From 9a821223765ec0134a58cddf4949a5dd9a064dc6 Mon Sep 17 00:00:00 2001 From: rob-bateman Date: Thu, 23 Oct 2014 22:19:24 +0100 Subject: [PATCH] move contents of core package to lib --- build/awayjs-stagegl.d.ts | 482 +- build/awayjs-stagegl.js | 18234 ++++++++-------- build/awayjs-stagegl.js.map | 252 +- lib/aglsl/AGLSLParser.js | 4 +- lib/aglsl/AGLSLParser.ts | 2 +- lib/animators/AnimationSetBase.js | 2 +- lib/animators/AnimationSetBase.ts | 2 +- lib/animators/AnimatorBase.js | 2 +- lib/animators/AnimatorBase.ts | 6 +- lib/base/ContextGLBase.js | 343 + lib/{core/stagegl => base}/ContextGLBase.ts | 40 +- lib/base/ContextGLBlendFactor.js | 18 + .../stagegl => base}/ContextGLBlendFactor.ts | 0 lib/base/ContextGLClearMask.js | 12 + .../stagegl => base}/ContextGLClearMask.ts | 0 lib/base/ContextGLCompareMode.js | 16 + .../stagegl => base}/ContextGLCompareMode.ts | 0 lib/base/ContextGLMipFilter.js | 11 + .../stagegl => base}/ContextGLMipFilter.ts | 0 lib/base/ContextGLProfile.js | 11 + .../stagegl => base}/ContextGLProfile.ts | 0 lib/base/ContextGLProgramType.js | 10 + .../stagegl => base}/ContextGLProgramType.ts | 0 lib/base/ContextGLStencilAction.js | 16 + .../ContextGLStencilAction.ts | 0 lib/base/ContextGLTextureFilter.js | 10 + .../ContextGLTextureFilter.ts | 0 lib/base/ContextGLTextureFormat.js | 13 + .../ContextGLTextureFormat.ts | 0 lib/base/ContextGLTriangleFace.js | 12 + .../stagegl => base}/ContextGLTriangleFace.ts | 0 lib/base/ContextGLVertexBufferFormat.js | 13 + .../ContextGLVertexBufferFormat.ts | 0 lib/base/ContextGLWrapMode.js | 10 + .../stagegl => base}/ContextGLWrapMode.ts | 0 lib/base/ContextStage3D.js | 333 + lib/{core/stagegl => base}/ContextStage3D.ts | 24 +- lib/base/ContextWebGL.js | 375 + lib/{core/stagegl => base}/ContextWebGL.ts | 36 +- .../stagegl => base}/CubeTextureFlash.js | 6 +- .../stagegl => base}/CubeTextureFlash.ts | 8 +- lib/base/CubeTextureWebGL.js | 56 + .../stagegl => base}/CubeTextureWebGL.ts | 4 +- lib/base/IContextStageGL.js | 3 + lib/{core/stagegl => base}/IContextStageGL.ts | 24 +- lib/base/ICubeTexture.js | 3 + lib/{core/stagegl => base}/ICubeTexture.ts | 2 +- lib/base/IIndexBuffer.js | 3 + lib/{core/stagegl => base}/IIndexBuffer.ts | 0 lib/base/IProgram.js | 3 + lib/{core/stagegl => base}/IProgram.ts | 0 lib/base/ITexture.js | 3 + lib/{core/stagegl => base}/ITexture.ts | 2 +- lib/base/ITextureBase.js | 3 + lib/{core/stagegl => base}/ITextureBase.ts | 0 lib/base/IVertexBuffer.js | 3 + lib/{core/stagegl => base}/IVertexBuffer.ts | 0 .../stagegl => base}/IndexBufferFlash.js | 6 +- .../stagegl => base}/IndexBufferFlash.ts | 8 +- lib/base/IndexBufferWebGL.js | 33 + .../stagegl => base}/IndexBufferWebGL.ts | 2 +- lib/base/OpCodes.js | 52 + lib/{core/stagegl => base}/OpCodes.ts | 0 lib/base/ProgramFlash.js | 34 + lib/{core/stagegl => base}/ProgramFlash.ts | 8 +- lib/base/ProgramWebGL.js | 51 + lib/{core/stagegl => base}/ProgramWebGL.ts | 2 +- lib/base/ResourceBaseFlash.js | 17 + .../stagegl => base}/ResourceBaseFlash.ts | 0 lib/base/SamplerState.js | 8 + lib/{core/stagegl => base}/SamplerState.ts | 0 lib/base/Stage.js | 491 + lib/{core => }/base/Stage.ts | 6 +- lib/base/TextureBaseWebGL.js | 21 + .../stagegl => base}/TextureBaseWebGL.ts | 0 lib/{core/stagegl => base}/TextureFlash.js | 6 +- lib/{core/stagegl => base}/TextureFlash.ts | 8 +- lib/base/TextureWebGL.js | 86 + lib/{core/stagegl => base}/TextureWebGL.ts | 4 +- .../stagegl => base}/VertexBufferFlash.js | 6 +- .../stagegl => base}/VertexBufferFlash.ts | 8 +- lib/base/VertexBufferWebGL.js | 42 + .../stagegl => base}/VertexBufferWebGL.ts | 2 +- lib/core/base/Stage.js | 491 - lib/core/pool/BillboardRenderable.js | 60 - lib/core/pool/IndexData.js | 113 - lib/core/pool/IndexDataPool.js | 33 - lib/core/pool/LineSubMeshRenderable.js | 65 - lib/core/pool/MaterialData.js | 69 - lib/core/pool/MaterialDataPool.js | 37 - lib/core/pool/MaterialPassData.js | 33 - lib/core/pool/MaterialPassDataPool.js | 42 - lib/core/pool/ProgramData.js | 31 - lib/core/pool/ProgramDataPool.js | 36 - lib/core/pool/RenderableBase.js | 228 - lib/core/pool/SkyboxRenderable.js | 49 - lib/core/pool/TextureData.js | 29 - lib/core/pool/TextureDataPool.js | 37 - lib/core/pool/TriangleSubMeshRenderable.js | 91 - lib/core/pool/VertexData.js | 100 - lib/core/pool/VertexDataPool.js | 41 - lib/core/render/DefaultRenderer.js | 335 - lib/core/render/DepthRenderer.js | 141 - lib/core/render/Filter3DRenderer.js | 140 - lib/core/render/RendererBase.js | 555 - lib/core/stagegl/ContextGLBase.js | 343 - lib/core/stagegl/ContextGLBlendFactor.js | 18 - lib/core/stagegl/ContextGLClearMask.js | 12 - lib/core/stagegl/ContextGLCompareMode.js | 16 - lib/core/stagegl/ContextGLMipFilter.js | 11 - lib/core/stagegl/ContextGLProfile.js | 11 - lib/core/stagegl/ContextGLProgramType.js | 10 - lib/core/stagegl/ContextGLStencilAction.js | 16 - lib/core/stagegl/ContextGLTextureFilter.js | 10 - lib/core/stagegl/ContextGLTextureFormat.js | 13 - lib/core/stagegl/ContextGLTriangleFace.js | 12 - .../stagegl/ContextGLVertexBufferFormat.js | 13 - lib/core/stagegl/ContextGLWrapMode.js | 10 - lib/core/stagegl/ContextStage3D.js | 333 - lib/core/stagegl/ContextWebGL.js | 375 - lib/core/stagegl/CubeTextureWebGL.js | 56 - lib/core/stagegl/IContextStageGL.js | 3 - lib/core/stagegl/ICubeTexture.js | 3 - lib/core/stagegl/IIndexBuffer.js | 3 - lib/core/stagegl/IProgram.js | 3 - lib/core/stagegl/ITexture.js | 3 - lib/core/stagegl/ITextureBase.js | 3 - lib/core/stagegl/IVertexBuffer.js | 3 - lib/core/stagegl/IndexBufferWebGL.js | 33 - lib/core/stagegl/OpCodes.js | 52 - lib/core/stagegl/ProgramFlash.js | 34 - lib/core/stagegl/ProgramWebGL.js | 51 - lib/core/stagegl/ResourceBaseFlash.js | 17 - lib/core/stagegl/SamplerState.js | 8 - lib/core/stagegl/TextureBaseWebGL.js | 21 - lib/core/stagegl/TextureWebGL.js | 86 - lib/core/stagegl/VertexBufferWebGL.js | 42 - lib/filters/Filter3DBase.js | 2 +- lib/filters/Filter3DBase.ts | 4 +- lib/filters/tasks/Filter3DTaskBase.js | 4 +- lib/filters/tasks/Filter3DTaskBase.ts | 10 +- lib/managers/RTTBufferManager.js | 2 +- lib/managers/RTTBufferManager.ts | 8 +- lib/managers/StageManager.js | 4 +- lib/managers/StageManager.ts | 2 +- lib/materials/LineBasicMaterial.js | 4 +- lib/materials/LineBasicMaterial.ts | 10 +- lib/materials/SkyboxMaterial.js | 12 +- lib/materials/SkyboxMaterial.ts | 18 +- lib/materials/TriangleBasicMaterial.js | 4 +- lib/materials/TriangleBasicMaterial.ts | 2 +- lib/materials/TriangleMaterialBase.js | 4 +- lib/materials/TriangleMaterialBase.ts | 12 +- lib/materials/TriangleMethodMaterial.js | 4 +- lib/materials/TriangleMethodMaterial.ts | 4 +- .../compilation/ShaderLightingCompiler.js | 4 +- .../compilation/ShaderLightingCompiler.ts | 2 +- .../compilation/ShaderLightingObject.js | 2 +- .../compilation/ShaderLightingObject.ts | 6 +- lib/materials/compilation/ShaderObjectBase.js | 4 +- lib/materials/compilation/ShaderObjectBase.ts | 8 +- lib/materials/methods/AmbientBasicMethod.js | 8 +- lib/materials/methods/AmbientBasicMethod.ts | 10 +- lib/materials/methods/DiffuseBasicMethod.js | 8 +- lib/materials/methods/DiffuseBasicMethod.ts | 12 +- .../methods/EffectColorTransformMethod.js | 2 +- .../methods/EffectColorTransformMethod.ts | 2 +- lib/materials/methods/NormalBasicMethod.js | 8 +- lib/materials/methods/NormalBasicMethod.ts | 10 +- lib/materials/methods/ShadingMethodBase.js | 2 +- lib/materials/methods/ShadingMethodBase.ts | 4 +- lib/materials/methods/ShadowHardMethod.js | 2 +- lib/materials/methods/ShadowHardMethod.ts | 2 +- lib/materials/methods/ShadowMethodBase.js | 2 +- lib/materials/methods/ShadowMethodBase.ts | 6 +- lib/materials/methods/SpecularBasicMethod.js | 8 +- lib/materials/methods/SpecularBasicMethod.ts | 10 +- lib/materials/passes/DepthMapPass.js | 8 +- lib/materials/passes/DepthMapPass.ts | 18 +- lib/materials/passes/DistanceMapPass.js | 8 +- lib/materials/passes/DistanceMapPass.ts | 14 +- lib/materials/passes/MaterialPassBase.js | 6 +- lib/materials/passes/MaterialPassBase.ts | 12 +- lib/materials/passes/TriangleBasicPass.js | 8 +- lib/materials/passes/TriangleBasicPass.ts | 12 +- lib/materials/passes/TriangleMethodPass.js | 2 +- lib/materials/passes/TriangleMethodPass.ts | 6 +- lib/materials/utils/ShaderCompilerHelper.js | 4 +- lib/materials/utils/ShaderCompilerHelper.ts | 2 +- lib/pool/BillboardRenderable.js | 60 + lib/{core => }/pool/BillboardRenderable.ts | 2 +- lib/pool/IndexData.js | 113 + lib/{core => }/pool/IndexData.ts | 4 +- lib/pool/IndexDataPool.js | 33 + lib/{core => }/pool/IndexDataPool.ts | 2 +- lib/pool/LineSubMeshRenderable.js | 65 + lib/{core => }/pool/LineSubMeshRenderable.ts | 2 +- lib/pool/MaterialData.js | 69 + lib/{core => }/pool/MaterialData.ts | 16 +- lib/pool/MaterialDataPool.js | 37 + lib/{core => }/pool/MaterialDataPool.ts | 6 +- lib/pool/MaterialPassData.js | 33 + lib/{core => }/pool/MaterialPassData.ts | 12 +- lib/pool/MaterialPassDataPool.js | 42 + lib/{core => }/pool/MaterialPassDataPool.ts | 6 +- lib/pool/ProgramData.js | 31 + lib/{core => }/pool/ProgramData.ts | 6 +- lib/pool/ProgramDataPool.js | 36 + lib/{core => }/pool/ProgramDataPool.ts | 6 +- lib/pool/RenderableBase.js | 228 + lib/{core => }/pool/RenderableBase.ts | 8 +- lib/pool/SkyboxRenderable.js | 49 + lib/{core => }/pool/SkyboxRenderable.ts | 2 +- lib/pool/TextureData.js | 29 + lib/{core => }/pool/TextureData.ts | 6 +- lib/pool/TextureDataPool.js | 37 + lib/{core => }/pool/TextureDataPool.ts | 4 +- lib/pool/TriangleSubMeshRenderable.js | 91 + .../pool/TriangleSubMeshRenderable.ts | 4 +- lib/pool/VertexData.js | 100 + lib/{core => }/pool/VertexData.ts | 4 +- lib/pool/VertexDataPool.js | 41 + lib/{core => }/pool/VertexDataPool.ts | 4 +- lib/render/DefaultRenderer.js | 335 + lib/{core => }/render/DefaultRenderer.ts | 24 +- lib/render/DepthRenderer.js | 141 + lib/{core => }/render/DepthRenderer.ts | 14 +- lib/render/Filter3DRenderer.js | 140 + lib/{core => }/render/Filter3DRenderer.ts | 14 +- lib/render/RendererBase.js | 555 + lib/{core => }/render/RendererBase.ts | 14 +- 231 files changed, 14225 insertions(+), 14225 deletions(-) create mode 100755 lib/base/ContextGLBase.js rename lib/{core/stagegl => base}/ContextGLBase.ts (90%) create mode 100755 lib/base/ContextGLBlendFactor.js rename lib/{core/stagegl => base}/ContextGLBlendFactor.ts (100%) create mode 100755 lib/base/ContextGLClearMask.js rename lib/{core/stagegl => base}/ContextGLClearMask.ts (100%) create mode 100755 lib/base/ContextGLCompareMode.js rename lib/{core/stagegl => base}/ContextGLCompareMode.ts (100%) create mode 100755 lib/base/ContextGLMipFilter.js rename lib/{core/stagegl => base}/ContextGLMipFilter.ts (100%) create mode 100755 lib/base/ContextGLProfile.js rename lib/{core/stagegl => base}/ContextGLProfile.ts (100%) create mode 100755 lib/base/ContextGLProgramType.js rename lib/{core/stagegl => base}/ContextGLProgramType.ts (100%) create mode 100755 lib/base/ContextGLStencilAction.js rename lib/{core/stagegl => base}/ContextGLStencilAction.ts (100%) create mode 100755 lib/base/ContextGLTextureFilter.js rename lib/{core/stagegl => base}/ContextGLTextureFilter.ts (100%) create mode 100755 lib/base/ContextGLTextureFormat.js rename lib/{core/stagegl => base}/ContextGLTextureFormat.ts (100%) create mode 100755 lib/base/ContextGLTriangleFace.js rename lib/{core/stagegl => base}/ContextGLTriangleFace.ts (100%) create mode 100755 lib/base/ContextGLVertexBufferFormat.js rename lib/{core/stagegl => base}/ContextGLVertexBufferFormat.ts (100%) create mode 100755 lib/base/ContextGLWrapMode.js rename lib/{core/stagegl => base}/ContextGLWrapMode.ts (100%) create mode 100755 lib/base/ContextStage3D.js rename lib/{core/stagegl => base}/ContextStage3D.ts (91%) create mode 100755 lib/base/ContextWebGL.js rename lib/{core/stagegl => base}/ContextWebGL.ts (91%) rename lib/{core/stagegl => base}/CubeTextureFlash.js (51%) rename lib/{core/stagegl => base}/CubeTextureFlash.ts (86%) create mode 100755 lib/base/CubeTextureWebGL.js rename lib/{core/stagegl => base}/CubeTextureWebGL.ts (91%) create mode 100755 lib/base/IContextStageGL.js rename lib/{core/stagegl => base}/IContextStageGL.ts (78%) create mode 100755 lib/base/ICubeTexture.js rename lib/{core/stagegl => base}/ICubeTexture.ts (84%) create mode 100755 lib/base/IIndexBuffer.js rename lib/{core/stagegl => base}/IIndexBuffer.ts (100%) create mode 100755 lib/base/IProgram.js rename lib/{core/stagegl => base}/IProgram.ts (100%) create mode 100755 lib/base/ITexture.js rename lib/{core/stagegl => base}/ITexture.ts (77%) create mode 100755 lib/base/ITextureBase.js rename lib/{core/stagegl => base}/ITextureBase.ts (100%) create mode 100755 lib/base/IVertexBuffer.js rename lib/{core/stagegl => base}/IVertexBuffer.ts (100%) rename lib/{core/stagegl => base}/IndexBufferFlash.js (52%) rename lib/{core/stagegl => base}/IndexBufferFlash.ts (75%) create mode 100755 lib/base/IndexBufferWebGL.js rename lib/{core/stagegl => base}/IndexBufferWebGL.ts (90%) create mode 100755 lib/base/OpCodes.js rename lib/{core/stagegl => base}/OpCodes.ts (100%) create mode 100755 lib/base/ProgramFlash.js rename lib/{core/stagegl => base}/ProgramFlash.ts (75%) create mode 100755 lib/base/ProgramWebGL.js rename lib/{core/stagegl => base}/ProgramWebGL.ts (96%) create mode 100755 lib/base/ResourceBaseFlash.js rename lib/{core/stagegl => base}/ResourceBaseFlash.ts (100%) create mode 100755 lib/base/SamplerState.js rename lib/{core/stagegl => base}/SamplerState.ts (100%) create mode 100755 lib/base/Stage.js rename lib/{core => }/base/Stage.ts (98%) create mode 100755 lib/base/TextureBaseWebGL.js rename lib/{core/stagegl => base}/TextureBaseWebGL.ts (100%) rename lib/{core/stagegl => base}/TextureFlash.js (52%) rename lib/{core/stagegl => base}/TextureFlash.ts (86%) create mode 100755 lib/base/TextureWebGL.js rename lib/{core/stagegl => base}/TextureWebGL.ts (94%) rename lib/{core/stagegl => base}/VertexBufferFlash.js (52%) rename lib/{core/stagegl => base}/VertexBufferFlash.ts (79%) create mode 100755 lib/base/VertexBufferWebGL.js rename lib/{core/stagegl => base}/VertexBufferWebGL.ts (93%) delete mode 100755 lib/core/base/Stage.js delete mode 100755 lib/core/pool/BillboardRenderable.js delete mode 100755 lib/core/pool/IndexData.js delete mode 100755 lib/core/pool/IndexDataPool.js delete mode 100755 lib/core/pool/LineSubMeshRenderable.js delete mode 100755 lib/core/pool/MaterialData.js delete mode 100755 lib/core/pool/MaterialDataPool.js delete mode 100755 lib/core/pool/MaterialPassData.js delete mode 100755 lib/core/pool/MaterialPassDataPool.js delete mode 100755 lib/core/pool/ProgramData.js delete mode 100755 lib/core/pool/ProgramDataPool.js delete mode 100755 lib/core/pool/RenderableBase.js delete mode 100755 lib/core/pool/SkyboxRenderable.js delete mode 100755 lib/core/pool/TextureData.js delete mode 100755 lib/core/pool/TextureDataPool.js delete mode 100755 lib/core/pool/TriangleSubMeshRenderable.js delete mode 100755 lib/core/pool/VertexData.js delete mode 100755 lib/core/pool/VertexDataPool.js delete mode 100755 lib/core/render/DefaultRenderer.js delete mode 100755 lib/core/render/DepthRenderer.js delete mode 100755 lib/core/render/Filter3DRenderer.js delete mode 100755 lib/core/render/RendererBase.js delete mode 100755 lib/core/stagegl/ContextGLBase.js delete mode 100755 lib/core/stagegl/ContextGLBlendFactor.js delete mode 100755 lib/core/stagegl/ContextGLClearMask.js delete mode 100755 lib/core/stagegl/ContextGLCompareMode.js delete mode 100755 lib/core/stagegl/ContextGLMipFilter.js delete mode 100755 lib/core/stagegl/ContextGLProfile.js delete mode 100755 lib/core/stagegl/ContextGLProgramType.js delete mode 100755 lib/core/stagegl/ContextGLStencilAction.js delete mode 100755 lib/core/stagegl/ContextGLTextureFilter.js delete mode 100755 lib/core/stagegl/ContextGLTextureFormat.js delete mode 100755 lib/core/stagegl/ContextGLTriangleFace.js delete mode 100755 lib/core/stagegl/ContextGLVertexBufferFormat.js delete mode 100755 lib/core/stagegl/ContextGLWrapMode.js delete mode 100755 lib/core/stagegl/ContextStage3D.js delete mode 100755 lib/core/stagegl/ContextWebGL.js delete mode 100755 lib/core/stagegl/CubeTextureWebGL.js delete mode 100755 lib/core/stagegl/IContextStageGL.js delete mode 100755 lib/core/stagegl/ICubeTexture.js delete mode 100755 lib/core/stagegl/IIndexBuffer.js delete mode 100755 lib/core/stagegl/IProgram.js delete mode 100755 lib/core/stagegl/ITexture.js delete mode 100755 lib/core/stagegl/ITextureBase.js delete mode 100755 lib/core/stagegl/IVertexBuffer.js delete mode 100755 lib/core/stagegl/IndexBufferWebGL.js delete mode 100755 lib/core/stagegl/OpCodes.js delete mode 100755 lib/core/stagegl/ProgramFlash.js delete mode 100755 lib/core/stagegl/ProgramWebGL.js delete mode 100755 lib/core/stagegl/ResourceBaseFlash.js delete mode 100755 lib/core/stagegl/SamplerState.js delete mode 100755 lib/core/stagegl/TextureBaseWebGL.js delete mode 100755 lib/core/stagegl/TextureWebGL.js delete mode 100755 lib/core/stagegl/VertexBufferWebGL.js create mode 100755 lib/pool/BillboardRenderable.js rename lib/{core => }/pool/BillboardRenderable.ts (96%) create mode 100755 lib/pool/IndexData.js rename lib/{core => }/pool/IndexData.ts (95%) create mode 100755 lib/pool/IndexDataPool.js rename lib/{core => }/pool/IndexDataPool.ts (94%) create mode 100755 lib/pool/LineSubMeshRenderable.js rename lib/{core => }/pool/LineSubMeshRenderable.ts (95%) create mode 100755 lib/pool/MaterialData.js rename lib/{core => }/pool/MaterialData.ts (77%) create mode 100755 lib/pool/MaterialDataPool.js rename lib/{core => }/pool/MaterialDataPool.ts (75%) create mode 100755 lib/pool/MaterialPassData.js rename lib/{core => }/pool/MaterialPassData.ts (68%) create mode 100755 lib/pool/MaterialPassDataPool.js rename lib/{core => }/pool/MaterialPassDataPool.ts (79%) create mode 100755 lib/pool/ProgramData.js rename lib/{core => }/pool/ProgramData.ts (74%) create mode 100755 lib/pool/ProgramDataPool.js rename lib/{core => }/pool/ProgramDataPool.ts (72%) create mode 100755 lib/pool/RenderableBase.js rename lib/{core => }/pool/RenderableBase.ts (96%) create mode 100755 lib/pool/SkyboxRenderable.js rename lib/{core => }/pool/SkyboxRenderable.ts (94%) create mode 100755 lib/pool/TextureData.js rename lib/{core => }/pool/TextureData.ts (76%) create mode 100755 lib/pool/TextureDataPool.js rename lib/{core => }/pool/TextureDataPool.ts (84%) create mode 100755 lib/pool/TriangleSubMeshRenderable.js rename lib/{core => }/pool/TriangleSubMeshRenderable.ts (95%) create mode 100755 lib/pool/VertexData.js rename lib/{core => }/pool/VertexData.ts (94%) create mode 100755 lib/pool/VertexDataPool.js rename lib/{core => }/pool/VertexDataPool.ts (92%) create mode 100755 lib/render/DefaultRenderer.js rename lib/{core => }/render/DefaultRenderer.ts (92%) create mode 100755 lib/render/DepthRenderer.js rename lib/{core => }/render/DepthRenderer.ts (90%) create mode 100755 lib/render/Filter3DRenderer.js rename lib/{core => }/render/Filter3DRenderer.ts (90%) create mode 100755 lib/render/RendererBase.js rename lib/{core => }/render/RendererBase.ts (96%) diff --git a/build/awayjs-stagegl.d.ts b/build/awayjs-stagegl.d.ts index c9422d66..eb013915 100755 --- a/build/awayjs-stagegl.d.ts +++ b/build/awayjs-stagegl.d.ts @@ -102,7 +102,7 @@ declare module "awayjs-stagegl/lib/aglsl/Sampler" { } declare module "awayjs-stagegl/lib/managers/StageManager" { import EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); /** * The StageManager class provides a multiton object that handles management for Stage objects. * @@ -172,7 +172,7 @@ declare module "awayjs-stagegl/lib/managers/StageManager" { export = StageManager; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor" { +declare module "awayjs-stagegl/lib/base/ContextGLBlendFactor" { class ContextGLBlendFactor { static DESTINATION_ALPHA: string; static DESTINATION_COLOR: string; @@ -188,7 +188,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor" { export = ContextGLBlendFactor; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLClearMask" { +declare module "awayjs-stagegl/lib/base/ContextGLClearMask" { class ContextGLClearMask { static COLOR: number; static DEPTH: number; @@ -198,7 +198,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLClearMask" { export = ContextGLClearMask; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode" { +declare module "awayjs-stagegl/lib/base/ContextGLCompareMode" { class ContextGLCompareMode { static ALWAYS: string; static EQUAL: string; @@ -212,7 +212,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode" { export = ContextGLCompareMode; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter" { +declare module "awayjs-stagegl/lib/base/ContextGLMipFilter" { class ContextGLMipFilter { static MIPLINEAR: string; static MIPNEAREST: string; @@ -221,7 +221,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter" { export = ContextGLMipFilter; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLProgramType" { +declare module "awayjs-stagegl/lib/base/ContextGLProgramType" { class ContextGLProgramType { static FRAGMENT: string; static VERTEX: string; @@ -229,7 +229,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLProgramType" { export = ContextGLProgramType; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter" { +declare module "awayjs-stagegl/lib/base/ContextGLTextureFilter" { class ContextGLTextureFilter { static LINEAR: string; static NEAREST: string; @@ -237,7 +237,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter" { export = ContextGLTextureFilter; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace" { +declare module "awayjs-stagegl/lib/base/ContextGLTriangleFace" { class ContextGLTriangleFace { static BACK: string; static FRONT: string; @@ -247,7 +247,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace" { export = ContextGLTriangleFace; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat" { +declare module "awayjs-stagegl/lib/base/ContextGLVertexBufferFormat" { class ContextGLVertexBufferFormat { static BYTES_4: string; static FLOAT_1: string; @@ -258,7 +258,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat" { export = ContextGLVertexBufferFormat; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode" { +declare module "awayjs-stagegl/lib/base/ContextGLWrapMode" { class ContextGLWrapMode { static CLAMP: string; static REPEAT: string; @@ -266,17 +266,17 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode" { export = ContextGLWrapMode; } -declare module "awayjs-stagegl/lib/core/stagegl/ITextureBase" { +declare module "awayjs-stagegl/lib/base/ITextureBase" { interface ITextureBase { dispose(): any; } export = ITextureBase; } -declare module "awayjs-stagegl/lib/core/stagegl/ICubeTexture" { +declare module "awayjs-stagegl/lib/base/ICubeTexture" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); + import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); interface ICubeTexture extends ITextureBase { size: number; uploadFromData(bitmapData: BitmapData, side: number, miplevel?: number): any; @@ -286,7 +286,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ICubeTexture" { export = ICubeTexture; } -declare module "awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL" { +declare module "awayjs-stagegl/lib/base/TextureBaseWebGL" { class TextureBaseWebGL { textureType: string; _gl: WebGLRenderingContext; @@ -297,11 +297,11 @@ declare module "awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL" { export = TextureBaseWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL" { +declare module "awayjs-stagegl/lib/base/CubeTextureWebGL" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); - import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); + import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); + import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); class CubeTextureWebGL extends TextureBaseWebGL implements ICubeTexture { private _textureSelectorDictionary; textureType: string; @@ -318,7 +318,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL" { export = CubeTextureWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/IIndexBuffer" { +declare module "awayjs-stagegl/lib/base/IIndexBuffer" { interface IIndexBuffer { numIndices: number; uploadFromArray(data: number[], startOffset: number, count: number): any; @@ -327,9 +327,9 @@ declare module "awayjs-stagegl/lib/core/stagegl/IIndexBuffer" { export = IIndexBuffer; } -declare module "awayjs-stagegl/lib/core/pool/IndexData" { - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); +declare module "awayjs-stagegl/lib/pool/IndexData" { + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); /** * */ @@ -367,9 +367,9 @@ declare module "awayjs-stagegl/lib/core/pool/IndexData" { export = IndexData; } -declare module "awayjs-stagegl/lib/core/pool/IndexDataPool" { +declare module "awayjs-stagegl/lib/pool/IndexDataPool" { import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); - import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); + import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); /** * */ @@ -383,7 +383,7 @@ declare module "awayjs-stagegl/lib/core/pool/IndexDataPool" { export = IndexDataPool; } -declare module "awayjs-stagegl/lib/core/stagegl/IVertexBuffer" { +declare module "awayjs-stagegl/lib/base/IVertexBuffer" { interface IVertexBuffer { numVertices: number; data32PerVertex: number; @@ -393,10 +393,10 @@ declare module "awayjs-stagegl/lib/core/stagegl/IVertexBuffer" { export = IVertexBuffer; } -declare module "awayjs-stagegl/lib/core/pool/VertexData" { +declare module "awayjs-stagegl/lib/pool/VertexData" { import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); /** * */ @@ -439,10 +439,10 @@ declare module "awayjs-stagegl/lib/core/pool/VertexData" { export = VertexData; } -declare module "awayjs-stagegl/lib/core/pool/VertexDataPool" { +declare module "awayjs-stagegl/lib/pool/VertexDataPool" { import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); - import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); - import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); + import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); + import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); /** * */ @@ -456,7 +456,7 @@ declare module "awayjs-stagegl/lib/core/pool/VertexDataPool" { export = VertexDataPool; } -declare module "awayjs-stagegl/lib/core/pool/RenderableBase" { +declare module "awayjs-stagegl/lib/pool/RenderableBase" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import IMaterialOwner = require("awayjs-display/lib/base/IMaterialOwner"); import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); @@ -464,8 +464,8 @@ declare module "awayjs-stagegl/lib/core/pool/RenderableBase" { import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import IEntity = require("awayjs-display/lib/entities/IEntity"); import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); - import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); - import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); + import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); + import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); /** * @class RenderableListItem */ @@ -659,7 +659,7 @@ declare module "awayjs-stagegl/lib/animators/AnimationSetBase" { import IAsset = require("awayjs-core/lib/library/IAsset"); import NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); import AnimationNodeBase = require("awayjs-display/lib/animators/nodes/AnimationNodeBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); /** * Provides an abstract base class for data set classes that hold animation data for use in animator classes. @@ -773,12 +773,12 @@ declare module "awayjs-stagegl/lib/animators/states/IAnimationState" { export = IAnimationState; } -declare module "awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable" { +declare module "awayjs-stagegl/lib/pool/TriangleSubMeshRenderable" { import IMaterialOwner = require("awayjs-display/lib/base/IMaterialOwner"); import TriangleSubMesh = require("awayjs-display/lib/base/TriangleSubMesh"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.TriangleSubMeshRenderable */ @@ -867,10 +867,10 @@ declare module "awayjs-stagegl/lib/animators/AnimatorBase" { import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); import Mesh = require("awayjs-display/lib/entities/Mesh"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import IAnimationState = require("awayjs-stagegl/lib/animators/states/IAnimationState"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); - import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); + import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/pool/TriangleSubMeshRenderable"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); /** * Dispatched when playback of an animation inside the animator object starts. @@ -1479,9 +1479,9 @@ declare module "awayjs-stagegl/lib/materials/compilation/ShaderObjectBase" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import AnimationRegisterCache = require("awayjs-stagegl/lib/animators/data/AnimationRegisterCache"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -1689,10 +1689,10 @@ declare module "awayjs-stagegl/lib/materials/StageGLMaterialBase" { export = StageGLMaterialBase; } -declare module "awayjs-stagegl/lib/core/pool/MaterialDataPool" { - import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); +declare module "awayjs-stagegl/lib/pool/MaterialDataPool" { + import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import StageGLMaterialBase = require("materials/StageGLMaterialBase"); /** * @class away.pool.MaterialDataPool */ @@ -1728,9 +1728,9 @@ declare module "awayjs-stagegl/lib/materials/passes/MaterialPassBase" { import Camera = require("awayjs-display/lib/entities/Camera"); import LightPickerBase = require("awayjs-display/lib/materials/lightpickers/LightPickerBase"); import IMaterialPass = require("awayjs-display/lib/materials/passes/IMaterialPass"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); @@ -1936,10 +1936,10 @@ declare module "awayjs-stagegl/lib/materials/passes/MaterialPassBase" { export = MaterialPassBase; } -declare module "awayjs-stagegl/lib/core/pool/MaterialPassDataPool" { - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); - import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +declare module "awayjs-stagegl/lib/pool/MaterialPassDataPool" { + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import StageGLMaterialBase = require("materials/StageGLMaterialBase"); + import MaterialPassBase = require("materials/passes/MaterialPassBase"); /** * @class away.pool.MaterialPassDataPool */ @@ -1970,9 +1970,9 @@ declare module "awayjs-stagegl/lib/core/pool/MaterialPassDataPool" { export = MaterialPassDataPool; } -declare module "awayjs-stagegl/lib/core/pool/ProgramDataPool" { - import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); +declare module "awayjs-stagegl/lib/pool/ProgramDataPool" { + import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); /** * @class away.pool.ProgramDataPool */ @@ -2002,7 +2002,7 @@ declare module "awayjs-stagegl/lib/core/pool/ProgramDataPool" { export = ProgramDataPool; } -declare module "awayjs-stagegl/lib/core/stagegl/IProgram" { +declare module "awayjs-stagegl/lib/base/IProgram" { import ByteArray = require("awayjs-core/lib/utils/ByteArray"); interface IProgram { upload(vertexProgram: ByteArray, fragmentProgram: ByteArray): any; @@ -2011,10 +2011,10 @@ declare module "awayjs-stagegl/lib/core/stagegl/IProgram" { export = IProgram; } -declare module "awayjs-stagegl/lib/core/pool/ProgramData" { - import ProgramDataPool = require("awayjs-stagegl/lib/core/pool/ProgramDataPool"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); +declare module "awayjs-stagegl/lib/pool/ProgramData" { + import ProgramDataPool = require("awayjs-stagegl/lib/pool/ProgramDataPool"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); /** * * @class away.pool.ProgramDataBase @@ -2036,13 +2036,13 @@ declare module "awayjs-stagegl/lib/core/pool/ProgramData" { export = ProgramData; } -declare module "awayjs-stagegl/lib/core/pool/MaterialPassData" { +declare module "awayjs-stagegl/lib/pool/MaterialPassData" { import IMaterialPassData = require("awayjs-display/lib/pool/IMaterialPassData"); - import MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); - import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); - import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); - import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); - import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); + import MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); + import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); + import StageGLMaterialBase = require("materials/StageGLMaterialBase"); + import MaterialPassBase = require("materials/passes/MaterialPassBase"); + import ShaderObjectBase = require("materials/compilation/ShaderObjectBase"); /** * * @class away.pool.MaterialPassData @@ -2075,13 +2075,13 @@ declare module "awayjs-stagegl/lib/core/pool/MaterialPassData" { export = MaterialPassData; } -declare module "awayjs-stagegl/lib/core/pool/MaterialData" { +declare module "awayjs-stagegl/lib/pool/MaterialData" { import IMaterialData = require("awayjs-display/lib/pool/IMaterialData"); - import MaterialDataPool = require("awayjs-stagegl/lib/core/pool/MaterialDataPool"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); - import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); + import MaterialDataPool = require("awayjs-stagegl/lib/pool/MaterialDataPool"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import StageGLMaterialBase = require("materials/StageGLMaterialBase"); + import MaterialPassBase = require("materials/passes/MaterialPassBase"); /** * * @class away.pool.MaterialData @@ -2113,9 +2113,9 @@ declare module "awayjs-stagegl/lib/core/pool/MaterialData" { export = MaterialData; } -declare module "awayjs-stagegl/lib/core/stagegl/ITexture" { +declare module "awayjs-stagegl/lib/base/ITexture" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); - import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); + import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); interface ITexture extends ITextureBase { width: number; height: number; @@ -2125,7 +2125,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ITexture" { export = ITexture; } -declare module "awayjs-stagegl/lib/core/stagegl/IContextStageGL" { +declare module "awayjs-stagegl/lib/base/IContextStageGL" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Rectangle = require("awayjs-core/lib/geom/Rectangle"); @@ -2136,17 +2136,17 @@ declare module "awayjs-stagegl/lib/core/stagegl/IContextStageGL" { import IContext = require("awayjs-display/lib/display/IContext"); import Camera = require("awayjs-display/lib/entities/Camera"); import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); - import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); - import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); - import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); + import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); + import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); + import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); interface IContextStageGL extends IContext { setRenderTarget(target: TextureProxyBase, enableDepthAndStencil?: boolean, surfaceSelector?: number): any; getRenderTexture(textureProxy: RenderTexture): ITextureBase; @@ -2189,8 +2189,8 @@ declare module "awayjs-stagegl/lib/core/stagegl/IContextStageGL" { export = IContextStageGL; } -declare module "awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL" { - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); +declare module "awayjs-stagegl/lib/base/IndexBufferWebGL" { + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); class IndexBufferWebGL implements IIndexBuffer { private _gl; private _numIndices; @@ -2204,9 +2204,9 @@ declare module "awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL" { export = IndexBufferWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/ProgramWebGL" { +declare module "awayjs-stagegl/lib/base/ProgramWebGL" { import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); class ProgramWebGL implements IProgram { private static _tokenizer; private static _aglslParser; @@ -2223,11 +2223,11 @@ declare module "awayjs-stagegl/lib/core/stagegl/ProgramWebGL" { export = ProgramWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/TextureWebGL" { +declare module "awayjs-stagegl/lib/base/TextureWebGL" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); - import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); + import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); class TextureWebGL extends TextureBaseWebGL implements ITexture { textureType: string; private _width; @@ -2248,7 +2248,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/TextureWebGL" { export = TextureWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/SamplerState" { +declare module "awayjs-stagegl/lib/base/SamplerState" { class SamplerState { type: number; wrap: number; @@ -2258,8 +2258,8 @@ declare module "awayjs-stagegl/lib/core/stagegl/SamplerState" { export = SamplerState; } -declare module "awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL" { - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +declare module "awayjs-stagegl/lib/base/VertexBufferWebGL" { + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); class VertexBufferWebGL implements IVertexBuffer { private _gl; private _numVertices; @@ -2275,18 +2275,18 @@ declare module "awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL" { export = VertexBufferWebGL; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextWebGL" { +declare module "awayjs-stagegl/lib/base/ContextWebGL" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Rectangle = require("awayjs-core/lib/geom/Rectangle"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import CubeTextureWebGL = require("awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL"); - import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); - import IndexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL"); - import ProgramWebGL = require("awayjs-stagegl/lib/core/stagegl/ProgramWebGL"); - import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); - import TextureWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureWebGL"); - import VertexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import CubeTextureWebGL = require("awayjs-stagegl/lib/base/CubeTextureWebGL"); + import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); + import IndexBufferWebGL = require("awayjs-stagegl/lib/base/IndexBufferWebGL"); + import ProgramWebGL = require("awayjs-stagegl/lib/base/ProgramWebGL"); + import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); + import TextureWebGL = require("awayjs-stagegl/lib/base/TextureWebGL"); + import VertexBufferWebGL = require("awayjs-stagegl/lib/base/VertexBufferWebGL"); class ContextWebGL extends ContextGLBase implements IContextStageGL { private _blendFactorDictionary; private _depthTestDictionary; @@ -2343,12 +2343,12 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextWebGL" { export = ContextWebGL; } -declare module "awayjs-stagegl/lib/core/base/Stage" { +declare module "awayjs-stagegl/lib/base/Stage" { import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); import IContext = require("awayjs-display/lib/display/IContext"); - import StageManager = require("awayjs-stagegl/lib/managers/StageManager"); + import StageManager = require("managers/StageManager"); /** * Stage provides a proxy class to handle the creation and attachment of the Context * (and in turn the back buffer) it uses. Stage should never be created directly, @@ -2597,10 +2597,10 @@ declare module "awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler" { export = AGALMiniAssembler; } -declare module "awayjs-stagegl/lib/core/pool/TextureDataPool" { +declare module "awayjs-stagegl/lib/pool/TextureDataPool" { import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); - import TextureData = require("awayjs-stagegl/lib/core/pool/TextureData"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); + import TextureData = require("awayjs-stagegl/lib/pool/TextureData"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); /** * @class away.pool.TextureDataPool */ @@ -2630,12 +2630,12 @@ declare module "awayjs-stagegl/lib/core/pool/TextureDataPool" { export = TextureDataPool; } -declare module "awayjs-stagegl/lib/core/pool/TextureData" { +declare module "awayjs-stagegl/lib/pool/TextureData" { import ITextureData = require("awayjs-core/lib/pool/ITextureData"); import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); - import TextureDataPool = require("awayjs-stagegl/lib/core/pool/TextureDataPool"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); + import TextureDataPool = require("awayjs-stagegl/lib/pool/TextureDataPool"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); /** * * @class away.pool.TextureDataBase @@ -2659,7 +2659,7 @@ declare module "awayjs-stagegl/lib/core/pool/TextureData" { export = TextureData; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat" { +declare module "awayjs-stagegl/lib/base/ContextGLTextureFormat" { class ContextGLTextureFormat { static BGRA: string; static BGRA_PACKED: string; @@ -2670,7 +2670,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat" { export = ContextGLTextureFormat; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLBase" { +declare module "awayjs-stagegl/lib/base/ContextGLBase" { import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import CubeTextureBase = require("awayjs-core/lib/textures/CubeTextureBase"); import RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); @@ -2678,18 +2678,18 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLBase" { import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); import IContext = require("awayjs-display/lib/display/IContext"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); - import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); - import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); - import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); - import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); + import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); + import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); + import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); + import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); /** * Stage provides a proxy class to handle the creation and attachment of the Context @@ -2776,7 +2776,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/ContextGLBase" { export = ContextGLBase; } -declare module "awayjs-stagegl/lib/core/stagegl/OpCodes" { +declare module "awayjs-stagegl/lib/base/OpCodes" { class OpCodes { static trueValue: number; static falseValue: number; @@ -2824,7 +2824,7 @@ declare module "awayjs-stagegl/lib/core/stagegl/OpCodes" { export = OpCodes; } -declare module "awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash" { +declare module "awayjs-stagegl/lib/base/ResourceBaseFlash" { class ResourceBaseFlash { _pId: number; id: number; @@ -2833,12 +2833,12 @@ declare module "awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash" { export = ResourceBaseFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/CubeTextureFlash" { +declare module "awayjs-stagegl/lib/base/CubeTextureFlash" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); - import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); + import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); + import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class CubeTextureFlash extends ResourceBaseFlash implements ICubeTexture { private _context; private _size; @@ -2852,10 +2852,10 @@ declare module "awayjs-stagegl/lib/core/stagegl/CubeTextureFlash" { export = CubeTextureFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/IndexBufferFlash" { - import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +declare module "awayjs-stagegl/lib/base/IndexBufferFlash" { + import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class IndexBufferFlash extends ResourceBaseFlash implements IIndexBuffer { private _context; private _numIndices; @@ -2867,11 +2867,11 @@ declare module "awayjs-stagegl/lib/core/stagegl/IndexBufferFlash" { export = IndexBufferFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/ProgramFlash" { +declare module "awayjs-stagegl/lib/base/ProgramFlash" { import ByteArray = require("awayjs-core/lib/utils/ByteArray"); - import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); + import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class ProgramFlash extends ResourceBaseFlash implements IProgram { private _context; constructor(context: ContextStage3D); @@ -2881,11 +2881,11 @@ declare module "awayjs-stagegl/lib/core/stagegl/ProgramFlash" { export = ProgramFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/TextureFlash" { +declare module "awayjs-stagegl/lib/base/TextureFlash" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); - import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); + import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class TextureFlash extends ResourceBaseFlash implements ITexture { private _context; private _width; @@ -2900,10 +2900,10 @@ declare module "awayjs-stagegl/lib/core/stagegl/TextureFlash" { export = TextureFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/VertexBufferFlash" { - import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +declare module "awayjs-stagegl/lib/base/VertexBufferFlash" { + import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class VertexBufferFlash extends ResourceBaseFlash implements IVertexBuffer { private _context; private _numVertices; @@ -2917,19 +2917,19 @@ declare module "awayjs-stagegl/lib/core/stagegl/VertexBufferFlash" { export = VertexBufferFlash; } -declare module "awayjs-stagegl/lib/core/stagegl/ContextStage3D" { +declare module "awayjs-stagegl/lib/base/ContextStage3D" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); - import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); - import CubeTextureFlash = require("awayjs-stagegl/lib/core/stagegl/CubeTextureFlash"); - import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); - import IndexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/IndexBufferFlash"); - import ProgramFlash = require("awayjs-stagegl/lib/core/stagegl/ProgramFlash"); - import TextureFlash = require("awayjs-stagegl/lib/core/stagegl/TextureFlash"); - import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); - import VertexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/VertexBufferFlash"); + import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); + import CubeTextureFlash = require("awayjs-stagegl/lib/base/CubeTextureFlash"); + import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); + import IndexBufferFlash = require("awayjs-stagegl/lib/base/IndexBufferFlash"); + import ProgramFlash = require("awayjs-stagegl/lib/base/ProgramFlash"); + import TextureFlash = require("awayjs-stagegl/lib/base/TextureFlash"); + import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); + import VertexBufferFlash = require("awayjs-stagegl/lib/base/VertexBufferFlash"); class ContextStage3D extends ContextGLBase implements IContextStageGL { static contexts: Object; static maxvertexconstants: number; @@ -2994,6 +2994,29 @@ declare module "awayjs-stagegl/lib/aglsl/AGLSLParser" { } export = AGLSLParser; +} +declare module "awayjs-stagegl/lib/base/ContextGLProfile" { + class ContextGLProfile { + static BASELINE: string; + static BASELINE_CONSTRAINED: string; + static BASELINE_EXTENDED: string; + } + export = ContextGLProfile; + +} +declare module "awayjs-stagegl/lib/base/ContextGLStencilAction" { + class ContextGLStencilAction { + static DECREMENT_SATURATE: string; + static DECREMENT_WRAP: string; + static INCREMENT_SATURATE: string; + static INCREMENT_WRAP: string; + static INVERT: string; + static KEEP: string; + static SET: string; + static ZERO: string; + } + export = ContextGLStencilAction; + } declare module "awayjs-stagegl/lib/events/ShadingMethodEvent" { import Event = require("awayjs-core/lib/events/Event"); @@ -3006,9 +3029,9 @@ declare module "awayjs-stagegl/lib/events/ShadingMethodEvent" { } declare module "awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase" { import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import IProgram = require("awayjs-stagegl/lib/base/IProgram"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); class Filter3DTaskBase { private _mainInputTexture; private _scaledTextureWidth; @@ -3046,8 +3069,8 @@ declare module "awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase" { } declare module "awayjs-stagegl/lib/filters/Filter3DBase" { import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); import Filter3DTaskBase = require("awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase"); class Filter3DBase { private _tasks; @@ -3071,9 +3094,9 @@ declare module "awayjs-stagegl/lib/filters/Filter3DBase" { declare module "awayjs-stagegl/lib/managers/RTTBufferManager" { import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); - import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); + import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); class RTTBufferManager extends EventDispatcher { private static _instances; private _renderToTextureVertexBuffer; @@ -3134,9 +3157,9 @@ declare module "awayjs-stagegl/lib/materials/passes/LineBasicPass" { declare module "awayjs-stagegl/lib/materials/LineBasicMaterial" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -3174,15 +3197,6 @@ declare module "awayjs-stagegl/lib/materials/LineBasicMaterial" { } export = LineBasicMaterial; -} -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLProfile" { - class ContextGLProfile { - static BASELINE: string; - static BASELINE_CONSTRAINED: string; - static BASELINE_EXTENDED: string; - } - export = ContextGLProfile; - } declare module "awayjs-stagegl/lib/materials/passes/ILightingPassStageGL" { import LightPickerBase = require("awayjs-display/lib/materials/lightpickers/LightPickerBase"); @@ -3299,8 +3313,8 @@ declare module "awayjs-stagegl/lib/materials/compilation/ShaderLightingObject" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Camera = require("awayjs-display/lib/entities/Camera"); import LightPickerBase = require("awayjs-display/lib/materials/lightpickers/LightPickerBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); @@ -3470,9 +3484,9 @@ declare module "awayjs-stagegl/lib/materials/SkyboxMaterial" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import CubeTextureBase = require("awayjs-core/lib/textures/CubeTextureBase"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -3517,8 +3531,8 @@ declare module "awayjs-stagegl/lib/materials/SkyboxMaterial" { } declare module "awayjs-stagegl/lib/materials/passes/TriangleBasicPass" { import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); @@ -3565,9 +3579,9 @@ declare module "awayjs-stagegl/lib/materials/passes/TriangleBasicPass" { declare module "awayjs-stagegl/lib/materials/TriangleMaterialBase" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); @@ -3660,8 +3674,8 @@ declare module "awayjs-stagegl/lib/materials/TriangleMaterialMode" { declare module "awayjs-stagegl/lib/materials/methods/ShadingMethodBase" { import NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -3810,7 +3824,7 @@ declare module "awayjs-stagegl/lib/materials/compilation/MethodVO" { } declare module "awayjs-stagegl/lib/materials/methods/AmbientBasicMethod" { - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -3929,8 +3943,8 @@ declare module "awayjs-stagegl/lib/materials/methods/LightingMethodBase" { declare module "awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod" { import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -4069,7 +4083,7 @@ declare module "awayjs-stagegl/lib/materials/methods/EffectMethodBase" { } declare module "awayjs-stagegl/lib/materials/methods/NormalBasicMethod" { import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -4165,7 +4179,7 @@ declare module "awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase" { } declare module "awayjs-stagegl/lib/materials/methods/SpecularBasicMethod" { import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -4256,7 +4270,7 @@ declare module "awayjs-stagegl/lib/materials/methods/SpecularBasicMethod" { } declare module "awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod" { import ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); @@ -4293,9 +4307,9 @@ declare module "awayjs-stagegl/lib/materials/passes/TriangleMethodPass" { import ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); @@ -4661,11 +4675,11 @@ declare module "awayjs-stagegl/lib/materials/TriangleMethodMaterial" { export = TriangleMethodMaterial; } -declare module "awayjs-stagegl/lib/core/pool/BillboardRenderable" { +declare module "awayjs-stagegl/lib/pool/BillboardRenderable" { import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import Billboard = require("awayjs-display/lib/entities/Billboard"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.RenderableListItem */ @@ -4696,12 +4710,12 @@ declare module "awayjs-stagegl/lib/core/pool/BillboardRenderable" { export = BillboardRenderable; } -declare module "awayjs-stagegl/lib/core/pool/LineSubMeshRenderable" { +declare module "awayjs-stagegl/lib/pool/LineSubMeshRenderable" { import IMaterialOwner = require("awayjs-display/lib/base/IMaterialOwner"); import LineSubMesh = require("awayjs-display/lib/base/LineSubMesh"); import LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.LineSubMeshRenderable */ @@ -4745,11 +4759,11 @@ declare module "awayjs-stagegl/lib/core/pool/LineSubMeshRenderable" { export = LineSubMeshRenderable; } -declare module "awayjs-stagegl/lib/core/pool/SkyboxRenderable" { +declare module "awayjs-stagegl/lib/pool/SkyboxRenderable" { import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import Skybox = require("awayjs-display/lib/entities/Skybox"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.SkyboxRenderable */ @@ -4800,7 +4814,7 @@ declare module "awayjs-stagegl/lib/materials/utils/DefaultMaterialManager" { export = DefaultMaterialManager; } -declare module "awayjs-stagegl/lib/core/render/RendererBase" { +declare module "awayjs-stagegl/lib/render/RendererBase" { import BitmapData = require("awayjs-core/lib/base/BitmapData"); import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Rectangle = require("awayjs-core/lib/geom/Rectangle"); @@ -4809,15 +4823,15 @@ declare module "awayjs-stagegl/lib/core/render/RendererBase" { import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); import LineSubMesh = require("awayjs-display/lib/base/LineSubMesh"); import TriangleSubMesh = require("awayjs-display/lib/base/TriangleSubMesh"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import IEntitySorter = require("awayjs-display/lib/sort/IEntitySorter"); import Billboard = require("awayjs-display/lib/entities/Billboard"); import Camera = require("awayjs-display/lib/entities/Camera"); import StageEvent = require("awayjs-display/lib/events/StageEvent"); import ICollector = require("awayjs-display/lib/traverse/ICollector"); import ShadowCasterCollector = require("awayjs-display/lib/traverse/ShadowCasterCollector"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); - import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); + import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); /** * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the @@ -5005,13 +5019,13 @@ declare module "awayjs-stagegl/lib/core/render/RendererBase" { export = RendererBase; } -declare module "awayjs-stagegl/lib/core/render/DepthRenderer" { +declare module "awayjs-stagegl/lib/render/DepthRenderer" { import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); import Camera = require("awayjs-display/lib/entities/Camera"); import EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); import ShadowCasterCollector = require("awayjs-display/lib/traverse/ShadowCasterCollector"); - import RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); + import RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); /** * The DepthRenderer class renders 32-bit depth information encoded as RGBA @@ -5045,10 +5059,10 @@ declare module "awayjs-stagegl/lib/core/render/DepthRenderer" { export = DepthRenderer; } -declare module "awayjs-stagegl/lib/core/render/Filter3DRenderer" { +declare module "awayjs-stagegl/lib/render/Filter3DRenderer" { import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import ITexture = require("awayjs-stagegl/lib/base/ITexture"); import Filter3DBase = require("awayjs-stagegl/lib/filters/Filter3DBase"); /** * @class away.render.Filter3DRenderer @@ -5079,9 +5093,9 @@ declare module "awayjs-stagegl/lib/core/render/Filter3DRenderer" { declare module "awayjs-stagegl/lib/materials/passes/DepthMapPass" { import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); @@ -5119,8 +5133,8 @@ declare module "awayjs-stagegl/lib/materials/passes/DepthMapPass" { } declare module "awayjs-stagegl/lib/materials/passes/DistanceMapPass" { import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); @@ -5155,15 +5169,15 @@ declare module "awayjs-stagegl/lib/materials/passes/DistanceMapPass" { export = DistanceMapPass; } -declare module "awayjs-stagegl/lib/core/render/DefaultRenderer" { +declare module "awayjs-stagegl/lib/render/DefaultRenderer" { import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); import IRenderer = require("awayjs-display/lib/render/IRenderer"); import EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); import ICollector = require("awayjs-display/lib/traverse/ICollector"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import Filter3DRenderer = require("awayjs-stagegl/lib/core/render/Filter3DRenderer"); - import RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import Filter3DRenderer = require("awayjs-stagegl/lib/render/Filter3DRenderer"); + import RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); import Filter3DBase = require("awayjs-stagegl/lib/filters/Filter3DBase"); /** * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the @@ -5239,26 +5253,12 @@ declare module "awayjs-stagegl/lib/core/render/DefaultRenderer" { } export = DefaultRenderer; -} -declare module "awayjs-stagegl/lib/core/stagegl/ContextGLStencilAction" { - class ContextGLStencilAction { - static DECREMENT_SATURATE: string; - static DECREMENT_WRAP: string; - static INCREMENT_SATURATE: string; - static INCREMENT_WRAP: string; - static INVERT: string; - static KEEP: string; - static SET: string; - static ZERO: string; - } - export = ContextGLStencilAction; - } declare module "awayjs-stagegl/lib/materials/methods/ShadowMethodBase" { import LightBase = require("awayjs-display/lib/base/LightBase"); import Camera = require("awayjs-display/lib/entities/Camera"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); - import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); + import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); @@ -5360,7 +5360,7 @@ declare module "awayjs-stagegl/lib/materials/methods/ShadowMethodBase" { } declare module "awayjs-stagegl/lib/materials/methods/ShadowHardMethod" { import LightBase = require("awayjs-display/lib/base/LightBase"); - import Stage = require("awayjs-stagegl/lib/core/base/Stage"); + import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/build/awayjs-stagegl.js b/build/awayjs-stagegl.js index 04a1be41..abd98a64 100755 --- a/build/awayjs-stagegl.js +++ b/build/awayjs-stagegl.js @@ -122,7 +122,7 @@ module.exports = AGALTokenizer; },{"awayjs-stagegl/lib/aglsl/Description":undefined,"awayjs-stagegl/lib/aglsl/Header":undefined,"awayjs-stagegl/lib/aglsl/Mapping":undefined,"awayjs-stagegl/lib/aglsl/Token":undefined}],"awayjs-stagegl/lib/aglsl/AGLSLParser":[function(require,module,exports){ var Mapping = require("awayjs-stagegl/lib/aglsl/Mapping"); -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); var AGLSLParser = (function () { function AGLSLParser() { } @@ -346,7 +346,7 @@ var AGLSLParser = (function () { module.exports = AGLSLParser; -},{"awayjs-stagegl/lib/aglsl/Mapping":undefined,"awayjs-stagegl/lib/core/stagegl/ContextStage3D":undefined}],"awayjs-stagegl/lib/aglsl/Description":[function(require,module,exports){ +},{"awayjs-stagegl/lib/aglsl/Mapping":undefined,"awayjs-stagegl/lib/base/ContextStage3D":undefined}],"awayjs-stagegl/lib/aglsl/Description":[function(require,module,exports){ var Header = require("awayjs-stagegl/lib/aglsl/Header"); var Description = (function () { function Description() { @@ -1797,21 +1797,15 @@ module.exports = AnimationRegisterCache; -},{}],"awayjs-stagegl/lib/core/base/Stage":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var Event = require("awayjs-core/lib/events/Event"); -var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var CSS = require("awayjs-core/lib/utils/CSS"); -var ContextMode = require("awayjs-display/lib/display/ContextMode"); -var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -var ContextWebGL = require("awayjs-stagegl/lib/core/stagegl/ContextWebGL"); +},{}],"awayjs-stagegl/lib/base/ContextGLBase":[function(require,module,exports){ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); +var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); +var TextureDataPool = require("awayjs-stagegl/lib/pool/TextureDataPool"); +var ProgramDataPool = require("awayjs-stagegl/lib/pool/ProgramDataPool"); +var MaterialDataPool = require("awayjs-stagegl/lib/pool/MaterialDataPool"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); /** * Stage provides a proxy class to handle the creation and attachment of the Context * (and in turn the back buffer) it uses. Stage should never be created directly, @@ -1820,6125 +1814,5815 @@ var ContextWebGL = require("awayjs-stagegl/lib/core/stagegl/ContextWebGL"); * @see away.managers.StageManager * */ -var Stage = (function (_super) { - __extends(Stage, _super); - function Stage(container, stageIndex, stageManager, forceSoftware, profile) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - _super.call(this); - this._x = 0; - this._y = 0; +var ContextGLBase = (function () { + function ContextGLBase(stageIndex) { + this._programData = new Array(); + this._numUsedStreams = 0; + this._numUsedTextures = 0; //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame this._stageIndex = -1; this._antiAlias = 0; - //private var _activeVertexBuffers : Vector. = new Vector.(8, true); - //private var _activeTextures : Vector. = new Vector.(8, true); this._renderTarget = null; this._renderSurfaceSelector = 0; - //private _mouse3DManager:away.managers.Mouse3DManager; - //private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager - this._initialised = false; - this._container = container; this._stageIndex = stageIndex; - this._stageManager = stageManager; - this._viewPort = new Rectangle(); - this._enableDepthAndStencil = true; - CSS.setElementX(this._container, 0); - CSS.setElementY(this._container, 0); - this.visible = true; + this._texturePool = new TextureDataPool(this); + this._materialDataPool = new MaterialDataPool(this); + this._programDataPool = new ProgramDataPool(this); } - /** - * Requests a Context object to attach to the managed gl canvas. - */ - Stage.prototype.requestContext = function (forceSoftware, profile, mode) { - // If forcing software, we can be certain that the - // returned Context will be running software mode. - // If not, we can't be sure and should stick to the - // old value (will likely be same if re-requesting.) - var _this = this; - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - if (this._usesSoftwareRendering != null) - this._usesSoftwareRendering = forceSoftware; - this._profile = profile; - try { - if (mode == ContextMode.FLASH) - new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); - else - this._context = new ContextWebGL(this._container, this._stageIndex); - } - catch (e) { - try { - if (mode == ContextMode.AUTO) - new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); - else - this.dispatchEvent(new Event(Event.ERROR)); - } - catch (e) { - this.dispatchEvent(new Event(Event.ERROR)); - } - } - if (this._context) - this._callback(this._context); - }; - Object.defineProperty(Stage.prototype, "width", { - /** - * The width of the gl canvas - */ - get: function () { - return this._width; - }, - set: function (val) { - if (this._width == val) - return; - CSS.setElementWidth(this._container, val); - this._width = this._viewPort.width = val; - this._backBufferDirty = true; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "height", { - /** - * The height of the gl canvas - */ - get: function () { - return this._height; - }, - set: function (val) { - if (this._height == val) - return; - CSS.setElementHeight(this._container, val); - this._height = this._viewPort.height = val; - this._backBufferDirty = true; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "x", { - /** - * The x position of the gl canvas - */ - get: function () { - return this._x; - }, - set: function (val) { - if (this._x == val) - return; - CSS.setElementX(this._container, val); - this._x = this._viewPort.x = val; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "y", { - /** - * The y position of the gl canvas - */ - get: function () { - return this._y; - }, - set: function (val) { - if (this._y == val) - return; - CSS.setElementY(this._container, val); - this._y = this._viewPort.y = val; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "visible", { - get: function () { - return CSS.getElementVisibility(this._container); - }, - set: function (val) { - CSS.setElementVisibility(this._container, val); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "container", { - get: function () { - return this._container; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "context", { - /** - * The Context object associated with the given stage object. - */ + Object.defineProperty(ContextGLBase.prototype, "container", { get: function () { - return this._context; + return this._pContainer; }, enumerable: true, configurable: true }); - Stage.prototype.notifyViewportUpdated = function () { - if (this._viewportDirty) + ContextGLBase.prototype.setRenderTarget = function (target, enableDepthAndStencil, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + if (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil) return; - this._viewportDirty = true; - //if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED)) - //return; - //if (!_viewportUpdated) - this._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED); - this.dispatchEvent(this._viewportUpdated); - }; - Stage.prototype.notifyEnterFrame = function () { - //if (!hasEventListener(Event.ENTER_FRAME)) - //return; - if (!this._enterFrame) - this._enterFrame = new Event(Event.ENTER_FRAME); - this.dispatchEvent(this._enterFrame); + this._renderTarget = target; + this._renderSurfaceSelector = surfaceSelector; + this._enableDepthAndStencil = enableDepthAndStencil; + if (target instanceof RenderTexture) { + this.setRenderToTexture(this.getRenderTexture(target), enableDepthAndStencil, this._antiAlias, surfaceSelector); + } + else { + this.setRenderToBackBuffer(); + this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + } }; - Stage.prototype.notifyExitFrame = function () { - //if (!hasEventListener(Event.EXIT_FRAME)) - //return; - if (!this._exitFrame) - this._exitFrame = new Event(Event.EXIT_FRAME); - this.dispatchEvent(this._exitFrame); + ContextGLBase.prototype.getRenderTexture = function (textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) + textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); + return textureData.texture; }; - Object.defineProperty(Stage.prototype, "profile", { - get: function () { - return this._profile; - }, - enumerable: true, - configurable: true - }); - /** - * Disposes the Stage object, freeing the Context attached to the Stage. - */ - Stage.prototype.dispose = function () { - this._stageManager.iRemoveStage(this); - this.freeContext(); - this._stageManager = null; - this._stageIndex = -1; + ContextGLBase.prototype.getProgram = function (materialPassData) { + //check key doesn't need re-concatenating + if (!materialPassData.key.length) { + materialPassData.key = materialPassData.animationVertexCode + materialPassData.vertexCode + "---" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode; + } + else { + return materialPassData.programData; + } + var programData = this._programDataPool.getItem(materialPassData.key); + //check program data hasn't changed, keep count of program usages + if (materialPassData.programData != programData) { + if (materialPassData.programData) + materialPassData.programData.dispose(); + materialPassData.programData = programData; + programData.usages++; + } + return programData; }; /** - * Configures the back buffer associated with the Stage object. - * @param backBufferWidth The width of the backbuffer. - * @param backBufferHeight The height of the backbuffer. - * @param antiAlias The amount of anti-aliasing to use. - * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer. + * + * @param material */ - Stage.prototype.configureBackBuffer = function (backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil) { - this.width = backBufferWidth; - this.height = backBufferHeight; - this._antiAlias = antiAlias; - this._enableDepthAndStencil = enableDepthAndStencil; - if (this._context) - this._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil); - }; - Object.defineProperty(Stage.prototype, "enableDepthAndStencil", { - /* - * Indicates whether the depth and stencil buffer is used - */ - get: function () { - return this._enableDepthAndStencil; - }, - set: function (enableDepthAndStencil) { - this._enableDepthAndStencil = enableDepthAndStencil; - this._backBufferDirty = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "renderTarget", { - get: function () { - return this._renderTarget; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "renderSurfaceSelector", { - get: function () { - return this._renderSurfaceSelector; - }, - enumerable: true, - configurable: true - }); - /* - * Clear and reset the back buffer when using a shared context - */ - Stage.prototype.clear = function () { - if (!this._context) - return; - if (this._backBufferDirty) { - this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - this._backBufferDirty = false; + ContextGLBase.prototype.getMaterial = function (material, profile) { + var materialData = this._materialDataPool.getItem(material); + if (materialData.invalidAnimation) { + materialData.invalidAnimation = false; + var materialDataPasses = materialData.getMaterialPasses(profile); + var enabledGPUAnimation = this.getEnabledGPUAnimation(material, materialDataPasses); + var renderOrderId = 0; + var mult = 1; + var materialPassData; + var len = materialDataPasses.length; + for (var i = 0; i < len; i++) { + materialPassData = materialDataPasses[i]; + if (materialPassData.usesAnimation != enabledGPUAnimation) { + materialPassData.usesAnimation = enabledGPUAnimation; + materialPassData.key == ""; + } + if (materialPassData.key == "") + this.calcAnimationCode(material, materialPassData); + renderOrderId += this.getProgram(materialPassData).id * mult; + mult *= 1000; + } + materialData.renderOrderId = renderOrderId; } - this._context.clear((this._color & 0xff000000) >>> 24, (this._color & 0xff0000) >>> 16, (this._color & 0xff00) >>> 8, this._color & 0xff); - this._bufferClear = true; + return materialData; }; /** - * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode. - * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority. + * Assigns an attribute stream * - * @param type The type of event. - * @param listener The listener function that processes the event. - * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false. - * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0. - * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not. + * @param index The attribute stream index for the vertex shader + * @param buffer + * @param offset + * @param stride + * @param format */ - Stage.prototype.addEventListener = function (type, listener) { - _super.prototype.addEventListener.call(this, type, listener); - //away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame'); - //if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ - //_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); - //} - /* Original code - if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ - - _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); - - - } - */ + ContextGLBase.prototype.activateBuffer = function (index, buffer, offset, format) { + if (!buffer.contexts[this._stageIndex]) + buffer.contexts[this._stageIndex] = this; + if (!buffer.buffers[this._stageIndex]) { + buffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length / buffer.dataPerVertex, buffer.dataPerVertex); + buffer.invalid[this._stageIndex] = true; + } + if (buffer.invalid[this._stageIndex]) { + buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length / buffer.dataPerVertex); + buffer.invalid[this._stageIndex] = false; + } + this.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format); + }; + ContextGLBase.prototype.disposeVertexData = function (buffer) { + buffer.buffers[this._stageIndex].dispose(); + buffer.buffers[this._stageIndex] = null; + }; + ContextGLBase.prototype.activateRenderTexture = function (index, textureProxy) { + this.setTextureAt(index, this.getRenderTexture(textureProxy)); + }; + ContextGLBase.prototype.activateMaterialPass = function (materialPassData, stage, camera) { + var shaderObject = materialPassData.shaderObject; + for (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++) + this.setVertexBufferAt(i, null); + for (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++) + this.setTextureAt(i, null); + if (materialPassData.usesAnimation) + materialPassData.material.animationSet.activate(shaderObject, stage); + //activate shader object + shaderObject.iActivate(stage, camera); + //check program data is uploaded + var programData = this.getProgram(materialPassData); + if (!programData.program) { + programData.program = this.createProgram(); + var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + materialPassData.animationVertexCode + materialPassData.vertexCode + "endpart"))['vertex'].data; + var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + "endpart"))['fragment'].data; + programData.program.upload(vertexByteCode, fragmentByteCode); + } + //set program data + this.setProgram(programData.program); + }; + ContextGLBase.prototype.deactivateMaterialPass = function (materialPassData, stage) { + var shaderObject = materialPassData.shaderObject; + if (materialPassData.usesAnimation) + materialPassData.material.animationSet.deactivate(shaderObject, stage); + materialPassData.shaderObject.iDeactivate(stage); + this._numUsedStreams = shaderObject.numUsedStreams; + this._numUsedTextures = shaderObject.numUsedTextures; + }; + ContextGLBase.prototype.activateTexture = function (index, textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) { + textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); + textureData.invalid = true; + } + if (textureData.invalid) { + textureData.invalid = false; + if (textureProxy.generateMipmaps) { + var mipmapData = textureProxy._iGetMipmapData(); + var len = mipmapData.length; + for (var i = 0; i < len; i++) + textureData.texture.uploadFromData(mipmapData[i], i); + } + else { + textureData.texture.uploadFromData(textureProxy._iGetTextureData(), 0); + } + } + this.setTextureAt(index, textureData.texture); + }; + ContextGLBase.prototype.activateCubeTexture = function (index, textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) { + textureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false); + textureData.invalid = true; + } + if (textureData.invalid) { + textureData.invalid = false; + for (var i = 0; i < 6; ++i) { + if (textureProxy.generateMipmaps) { + var mipmapData = textureProxy._iGetMipmapData(i); + var len = mipmapData.length; + for (var j = 0; j < len; j++) + textureData.texture.uploadFromData(mipmapData[j], i, j); + } + else { + textureData.texture.uploadFromData(textureProxy._iGetTextureData(i), i, 0); + } + } + } + this.setTextureAt(index, textureData.texture); }; /** - * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode. - * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect. - * - * @param type The type of event. - * @param listener The listener object to remove. - * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false. + * Retrieves the VertexBuffer object that contains triangle indices. + * @param context The ContextWeb for which we request the buffer + * @return The VertexBuffer object that contains triangle indices. */ - Stage.prototype.removeEventListener = function (type, listener) { - _super.prototype.removeEventListener.call(this, type, listener); - /* - // Remove the main rendering listener if no EnterFrame listeners remain - if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this ) - && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME)) - { - - //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this ); - - } - */ + ContextGLBase.prototype.getIndexBuffer = function (buffer) { + if (!buffer.contexts[this._stageIndex]) + buffer.contexts[this._stageIndex] = this; + if (!buffer.buffers[this._stageIndex]) { + buffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length); + buffer.invalid[this._stageIndex] = true; + } + if (buffer.invalid[this._stageIndex]) { + buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length); + buffer.invalid[this._stageIndex] = false; + } + return buffer.buffers[this._stageIndex]; }; - Object.defineProperty(Stage.prototype, "scissorRect", { - get: function () { - return this._scissorRect; - }, - set: function (value) { - this._scissorRect = value; - this._context.setScissorRectangle(this._scissorRect); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "stageIndex", { - /** - * The index of the Stage which is managed by this instance of StageProxy. - */ - get: function () { - return this._stageIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "usesSoftwareRendering", { - /** - * Indicates whether the Stage managed by this proxy is running in software mode. - * Remember to wait for the CONTEXT_CREATED event before checking this property, - * as only then will it be guaranteed to be accurate. - */ - get: function () { - return this._usesSoftwareRendering; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "antiAlias", { - /** - * The antiAliasing of the Stage. - */ - get: function () { - return this._antiAlias; - }, - set: function (antiAlias) { - this._antiAlias = antiAlias; - this._backBufferDirty = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "viewPort", { - /** - * A viewPort rectangle equivalent of the Stage size and position. - */ - get: function () { - this._viewportDirty = false; - return this._viewPort; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "color", { - /** - * The background color of the Stage. - */ - get: function () { - return this._color; - }, - set: function (color) { - this._color = color; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "bufferClear", { - /** - * The freshly cleared state of the backbuffer before any rendering - */ - get: function () { - return this._bufferClear; - }, - set: function (newBufferClear) { - this._bufferClear = newBufferClear; - }, - enumerable: true, - configurable: true - }); - /* - * Access to fire mouseevents across multiple layered view3D instances - */ - // public get mouse3DManager():Mouse3DManager - // { - // return this._mouse3DManager; - // } - // - // public set mouse3DManager(value:Mouse3DManager) - // { - // this._mouse3DManager = value; - // } - /* TODO: implement dependency Touch3DManager - public get touch3DManager():Touch3DManager - { - return _touch3DManager; - } - - public set touch3DManager(value:Touch3DManager) - { - _touch3DManager = value; - } - */ - /** - * Frees the Context associated with this StageProxy. - */ - Stage.prototype.freeContext = function () { - if (this._context) { - this._context.dispose(); - this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); - } - this._context = null; - this._initialised = false; + ContextGLBase.prototype.disposeIndexData = function (buffer) { + buffer.buffers[this._stageIndex].dispose(); + buffer.buffers[this._stageIndex] = null; }; - /** - * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers. - * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance. - */ - Stage.prototype.onEnterFrame = function (event) { - if (!this._context) - return; - // Clear the stage instance - this.clear(); - //notify the enterframe listeners - this.notifyEnterFrame(); - // Call the present() to render the frame - if (!this._context) - this._context.present(); - //notify the exitframe listeners - this.notifyExitFrame(); + ContextGLBase.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } }; - Stage.prototype.recoverFromDisposal = function () { - if (!this._context) - return false; - //away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' ); - /* - if (this._iContext.driverInfo == "Disposed") - { - this._iContext = null; - this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); - return false; - - } - */ - return true; + ContextGLBase.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + this._width = width; + this._height = height; }; - Stage.prototype._callback = function (context) { - this._context = context; - this._container = this._context.container; - // Only configure back buffer if width and height have been set, - // which they may not have been if View.render() has yet to be - // invoked for the first time. - if (this._width && this._height) - this._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - // Dispatch the appropriate event depending on whether context was - // created for the first time or recreated after a device loss. - this.dispatchEvent(new StageEvent(this._initialised ? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED)); - this._initialised = true; + ContextGLBase.prototype.createIndexBuffer = function (numIndices) { + throw new AbstractMethodError(); }; - return Stage; -})(EventDispatcher); -module.exports = Stage; - - -},{"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/CSS":undefined,"awayjs-display/lib/display/ContextMode":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-stagegl/lib/core/stagegl/ContextStage3D":undefined,"awayjs-stagegl/lib/core/stagegl/ContextWebGL":undefined}],"awayjs-stagegl/lib/core/pool/BillboardRenderable":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.RenderableListItem - */ -var BillboardRenderable = (function (_super) { - __extends(BillboardRenderable, _super); - /** - * //TODO - * - * @param pool - * @param billboard - */ - function BillboardRenderable(pool, billboard) { - _super.call(this, pool, billboard, billboard); - this._billboard = billboard; - } - /** - * //TODO - * - * @returns {away.base.TriangleSubGeometry} - */ - BillboardRenderable.prototype._pGetSubGeometry = function () { - var material = this._billboard.material; - var geometry = BillboardRenderable._materialGeometry[material.id]; - if (!geometry) { - geometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true); - geometry.autoDeriveNormals = false; - geometry.autoDeriveTangents = false; - geometry.updateIndices(Array(0, 1, 2, 0, 2, 3)); - geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); - geometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0)); - geometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1)); - geometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1)); - } - else { - geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); - } - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; - return geometry; + ContextGLBase.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + throw new AbstractMethodError(); }; - BillboardRenderable._materialGeometry = new Object(); - /** - * - */ - BillboardRenderable.id = "billboard"; - return BillboardRenderable; -})(RenderableBase); -module.exports = BillboardRenderable; - - -},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/core/pool/IndexDataPool":[function(require,module,exports){ -var IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -/** - * - */ -var IndexDataPool = (function () { - function IndexDataPool() { - } - IndexDataPool.getItem = function (subGeometry, level, indexOffset) { - var subGeometryData = (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array())); - var indexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level)); - indexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices); - return indexData; + ContextGLBase.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + throw new AbstractMethodError(); }; - IndexDataPool.disposeItem = function (id, level) { - var subGeometryData = this._pool[id]; - subGeometryData[level].dispose(); - subGeometryData[level] = null; + ContextGLBase.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + throw new AbstractMethodError(); }; - IndexDataPool.prototype.disposeData = function (id) { - var subGeometryData = IndexDataPool._pool[id]; - var len = subGeometryData.length; - for (var i = 0; i < len; i++) { - subGeometryData[i].dispose(); - subGeometryData[i] = null; - } - IndexDataPool._pool[id] = null; + ContextGLBase.prototype.createProgram = function () { + throw new AbstractMethodError(); }; - IndexDataPool._pool = new Object(); - return IndexDataPool; -})(); -module.exports = IndexDataPool; - - -},{"awayjs-stagegl/lib/core/pool/IndexData":undefined}],"awayjs-stagegl/lib/core/pool/IndexData":[function(require,module,exports){ -/** - * - */ -var IndexData = (function () { - function IndexData(level) { - this._dataDirty = true; - this.invalid = new Array(8); - this.contexts = new Array(8); - this.buffers = new Array(8); - this.level = level; - } - IndexData.prototype.updateData = function (offset, indices, numVertices) { - if (this._dataDirty) { - this._dataDirty = false; - if (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) { - //shortcut for those buffers that fit into the maximum buffer sizes - this.indexMappings = null; - this.originalIndices = null; - this.setData(indices); - this.offset = indices.length; - } - else { - var i; - var len; - var outIndex; - var j; - var k; - var splitIndices = new Array(); - this.indexMappings = new Array(indices.length); - this.originalIndices = new Array(); - i = this.indexMappings.length; - while (i--) - this.indexMappings[i] = -1; - var originalIndex; - var splitIndex; - // Loop over all triangles - outIndex = 0; - len = indices.length; - i = offset; - k = 0; - while (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) { - for (j = 0; j < 3; j++) { - originalIndex = indices[i + j]; - if (this.indexMappings[originalIndex] >= 0) { - splitIndex = this.indexMappings[originalIndex]; - } - else { - // This vertex does not yet exist in the split list and - // needs to be copied from the long list. - splitIndex = k++; - this.indexMappings[originalIndex] = splitIndex; - this.originalIndices.push(originalIndex); - } - // Store new index, which may have come from the mapping look-up, - // or from copying a new set of vertex data from the original vector - splitIndices[outIndex + j] = splitIndex; - } - outIndex += 3; - i += 3; - } - this.setData(splitIndices); - this.offset = i; - } - } + ContextGLBase.prototype.dispose = function () { }; - IndexData.prototype.invalidateData = function () { - this._dataDirty = true; + ContextGLBase.prototype.present = function () { }; - IndexData.prototype.dispose = function () { - for (var i = 0; i < 8; ++i) { - if (this.contexts[i]) { - this.contexts[i].disposeIndexData(this); - this.contexts[i] = null; - } - } + ContextGLBase.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } }; - /** - * @private - */ - IndexData.prototype.disposeBuffers = function () { - for (var i = 0; i < 8; ++i) { - if (this.buffers[i]) { - this.buffers[i].dispose(); - this.buffers[i] = null; - } - } + ContextGLBase.prototype.setRenderToBackBuffer = function () { }; - /** - * @private - */ - IndexData.prototype.invalidateBuffers = function () { - for (var i = 0; i < 8; ++i) - this.invalid[i] = true; + ContextGLBase.prototype.setScissorRectangle = function (rectangle) { }; - /** - * - * @param data - * @private - */ - IndexData.prototype.setData = function (data) { - if (this.data && this.data.length != data.length) - this.disposeBuffers(); - else - this.invalidateBuffers(); - this.data = data; + ContextGLBase.prototype.setTextureAt = function (sampler, texture) { }; - IndexData.LIMIT_VERTS = 0xffff; - IndexData.LIMIT_INDICES = 0xffffff; - return IndexData; -})(); -module.exports = IndexData; - - -},{}],"awayjs-stagegl/lib/core/pool/LineSubMeshRenderable":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.LineSubMeshRenderable - */ -var LineSubMeshRenderable = (function (_super) { - __extends(LineSubMeshRenderable, _super); - /** - * //TODO - * - * @param pool - * @param subMesh - * @param level - * @param dataOffset - */ - function LineSubMeshRenderable(pool, subMesh, level, indexOffset) { - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); - this.subMesh = subMesh; - } - /** - * //TODO - * - * @returns {base.LineSubGeometry} - * @protected - */ - LineSubMeshRenderable.prototype._pGetSubGeometry = function () { - var subGeometry = this.subMesh.subGeometry; - this._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true; - this._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true; - if (subGeometry.thickness) - this._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true; - if (subGeometry.startColors) - this._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true; - return subGeometry; + ContextGLBase.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } }; - /** - * //TODO - * - * @param pool - * @param materialOwner - * @param level - * @param indexOffset - * @returns {away.pool.LineSubMeshRenderable} - * @private - */ - LineSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - return new LineSubMeshRenderable(pool, materialOwner, level, indexOffset); + ContextGLBase.prototype.setProgram = function (program) { }; - /** - * - */ - LineSubMeshRenderable.id = "linesubmesh"; - return LineSubMeshRenderable; -})(RenderableBase); -module.exports = LineSubMeshRenderable; - - -},{"awayjs-display/lib/base/LineSubGeometry":undefined,"awayjs-stagegl/lib/core/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/core/pool/MaterialDataPool":[function(require,module,exports){ -var MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -/** - * @class away.pool.MaterialDataPool - */ -var MaterialDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function MaterialDataPool(context) { - this._pool = new Object(); - this._context = context; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - MaterialDataPool.prototype.getItem = function (material) { - return (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material)))); + ContextGLBase.prototype.registerProgram = function (programData) { + var i = 0; + while (this._programData[i] != null) + i++; + this._programData[i] = programData; + programData.id = i; + }; + ContextGLBase.prototype.unRegisterProgram = function (programData) { + this._programData[programData.id] = null; + programData.id = -1; }; /** - * //TODO - * - * @param materialOwner + * test if animation will be able to run on gpu BEFORE compiling materials + * test if the shader objects supports animating the animation set in the vertex shader + * if any object using this material fails to support accelerated animations for any of the shader objects, + * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations) */ - MaterialDataPool.prototype.disposeItem = function (material) { - material._iRemoveMaterialData(this._pool[material.id]); - this._pool[material.id] = null; + ContextGLBase.prototype.getEnabledGPUAnimation = function (material, materialDataPasses) { + if (material.animationSet) { + material.animationSet.resetGPUCompatibility(); + var owners = material.iOwners; + var numOwners = owners.length; + var len = materialDataPasses.length; + for (var i = 0; i < len; i++) + for (var j = 0; j < numOwners; j++) + if (owners[j].animator) + owners[j].animator.testGPUCompatibility(materialDataPasses[i].shaderObject); + return !material.animationSet.usesCPU; + } + return false; }; - return MaterialDataPool; + ContextGLBase.prototype.calcAnimationCode = function (material, materialPassData) { + //reset key so that the program is re-calculated + materialPassData.key = ""; + materialPassData.animationVertexCode = ""; + materialPassData.animationFragmentCode = ""; + var shaderObject = materialPassData.shaderObject; + //check to see if GPU animation is used + if (materialPassData.usesAnimation) { + var animationSet = material.animationSet; + materialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject); + if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) + materialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject); + if (shaderObject.usesFragmentAnimation) + materialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget); + animationSet.doneAGALCode(shaderObject); + } + else { + // simply write attributes to targets, do not animate them + // projection will pick up on targets[0] to do the projection + var len = shaderObject.animatableAttributes.length; + for (var i = 0; i < len; ++i) + materialPassData.animationVertexCode += "mov " + shaderObject.animationTargetRegisters[i] + ", " + shaderObject.animatableAttributes[i] + "\n"; + if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) + materialPassData.animationVertexCode += "mov " + shaderObject.uvTarget + "," + shaderObject.uvSource + "\n"; + } + }; + return ContextGLBase; })(); -module.exports = MaterialDataPool; +module.exports = ContextGLBase; -},{"awayjs-stagegl/lib/core/pool/MaterialData":undefined}],"awayjs-stagegl/lib/core/pool/MaterialData":[function(require,module,exports){ -var MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); -/** - * - * @class away.pool.MaterialData - */ -var MaterialData = (function () { - function MaterialData(pool, context, material) { - this.invalidAnimation = true; - this._pool = pool; - this.context = context; - this.material = material; - this._materialPassDataPool = new MaterialPassDataPool(material); +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/textures/RenderTexture":undefined,"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler":undefined,"awayjs-stagegl/lib/base/ContextGLClearMask":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFormat":undefined,"awayjs-stagegl/lib/pool/MaterialDataPool":undefined,"awayjs-stagegl/lib/pool/ProgramDataPool":undefined,"awayjs-stagegl/lib/pool/TextureDataPool":undefined}],"awayjs-stagegl/lib/base/ContextGLBlendFactor":[function(require,module,exports){ +var ContextGLBlendFactor = (function () { + function ContextGLBlendFactor() { } - MaterialData.prototype.getMaterialPass = function (materialPass, profile) { - var materialPassData = this._materialPassDataPool.getItem(materialPass); - if (!materialPassData.shaderObject) { - materialPassData.shaderObject = materialPass.createShaderObject(profile); - materialPassData.invalid = true; - } - if (materialPassData.invalid) { - materialPassData.invalid = false; - var compiler = materialPassData.shaderObject.createCompiler(this.material, materialPass); - compiler.compile(); - materialPassData.shadedTarget = compiler.shadedTarget; - materialPassData.vertexCode = compiler.vertexCode; - materialPassData.fragmentCode = compiler.fragmentCode; - materialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode; - materialPassData.key = ""; - } - return materialPassData; - }; - MaterialData.prototype.getMaterialPasses = function (profile) { - if (this._passes == null) { - var passes = this.material._iScreenPasses; - var numPasses = passes.length; - //reset the material passes in MaterialData - this._passes = new Array(numPasses); - for (var i = 0; i < numPasses; i++) - this._passes[i] = this.getMaterialPass(passes[i], profile); - } - return this._passes; - }; - /** - * - */ - MaterialData.prototype.dispose = function () { - this._materialPassDataPool.disposePool(); - this._materialPassDataPool = null; - this._pool.disposeItem(this.material); - this._passes = null; - }; - /** - * - */ - MaterialData.prototype.invalidateMaterial = function () { - this._passes = null; - this.invalidateAnimation(); - }; - /** - * - */ - MaterialData.prototype.invalidateAnimation = function () { - this.invalidAnimation = true; - }; - return MaterialData; + ContextGLBlendFactor.DESTINATION_ALPHA = "destinationAlpha"; + ContextGLBlendFactor.DESTINATION_COLOR = "destinationColor"; + ContextGLBlendFactor.ONE = "one"; + ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA = "oneMinusDestinationAlpha"; + ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR = "oneMinusDestinationColor"; + ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA = "oneMinusSourceAlpha"; + ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR = "oneMinusSourceColor"; + ContextGLBlendFactor.SOURCE_ALPHA = "sourceAlpha"; + ContextGLBlendFactor.SOURCE_COLOR = "sourceColor"; + ContextGLBlendFactor.ZERO = "zero"; + return ContextGLBlendFactor; })(); -module.exports = MaterialData; +module.exports = ContextGLBlendFactor; -},{"awayjs-stagegl/lib/core/pool/MaterialPassDataPool":undefined}],"awayjs-stagegl/lib/core/pool/MaterialPassDataPool":[function(require,module,exports){ -var MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -/** - * @class away.pool.MaterialPassDataPool - */ -var MaterialPassDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function MaterialPassDataPool(material) { - this._pool = new Object(); - this._material = material; +},{}],"awayjs-stagegl/lib/base/ContextGLClearMask":[function(require,module,exports){ +var ContextGLClearMask = (function () { + function ContextGLClearMask() { } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - MaterialPassDataPool.prototype.getItem = function (materialPass) { - return (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass))))); - }; - /** - * //TODO - * - * @param materialOwner - */ - MaterialPassDataPool.prototype.disposeItem = function (materialPass) { - materialPass._iRemoveMaterialPassData(this._pool[materialPass.id]); - delete this._pool[materialPass.id]; - }; - MaterialPassDataPool.prototype.disposePool = function () { - for (var id in this._pool) - this._pool[id].materialPass._iRemoveMaterialPassData(this._pool[id]); - delete this._pool; - }; - return MaterialPassDataPool; + ContextGLClearMask.COLOR = 1; + ContextGLClearMask.DEPTH = 2; + ContextGLClearMask.STENCIL = 4; + ContextGLClearMask.ALL = ContextGLClearMask.COLOR | ContextGLClearMask.DEPTH | ContextGLClearMask.STENCIL; + return ContextGLClearMask; })(); -module.exports = MaterialPassDataPool; +module.exports = ContextGLClearMask; -},{"awayjs-stagegl/lib/core/pool/MaterialPassData":undefined}],"awayjs-stagegl/lib/core/pool/MaterialPassData":[function(require,module,exports){ -/** - * - * @class away.pool.MaterialPassData - */ -var MaterialPassData = (function () { - function MaterialPassData(pool, material, materialPass) { - this.animationVertexCode = ""; - this.animationFragmentCode = ""; - this._pool = pool; - this.material = material; - this.materialPass = materialPass; +},{}],"awayjs-stagegl/lib/base/ContextGLCompareMode":[function(require,module,exports){ +var ContextGLCompareMode = (function () { + function ContextGLCompareMode() { } - /** - * - */ - MaterialPassData.prototype.dispose = function () { - this._pool.disposeItem(this.materialPass); - this.shaderObject.dispose(); - this.shaderObject = null; - this.programData.dispose(); - this.programData = null; - }; - /** - * - */ - MaterialPassData.prototype.invalidate = function () { - this.invalid = true; - }; - return MaterialPassData; + ContextGLCompareMode.ALWAYS = "always"; + ContextGLCompareMode.EQUAL = "equal"; + ContextGLCompareMode.GREATER = "greater"; + ContextGLCompareMode.GREATER_EQUAL = "greaterEqual"; + ContextGLCompareMode.LESS = "less"; + ContextGLCompareMode.LESS_EQUAL = "lessEqual"; + ContextGLCompareMode.NEVER = "never"; + ContextGLCompareMode.NOT_EQUAL = "notEqual"; + return ContextGLCompareMode; })(); -module.exports = MaterialPassData; +module.exports = ContextGLCompareMode; -},{}],"awayjs-stagegl/lib/core/pool/ProgramDataPool":[function(require,module,exports){ -var ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); -/** - * @class away.pool.ProgramDataPool - */ -var ProgramDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function ProgramDataPool(context) { - this._pool = new Object(); - this._context = context; +},{}],"awayjs-stagegl/lib/base/ContextGLMipFilter":[function(require,module,exports){ +var ContextGLMipFilter = (function () { + function ContextGLMipFilter() { } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - ProgramDataPool.prototype.getItem = function (key) { - return this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key)); - }; - /** - * //TODO - * - * @param materialOwner - */ - ProgramDataPool.prototype.disposeItem = function (key) { - this._pool[key] = null; - }; - return ProgramDataPool; + ContextGLMipFilter.MIPLINEAR = "miplinear"; + ContextGLMipFilter.MIPNEAREST = "mipnearest"; + ContextGLMipFilter.MIPNONE = "mipnone"; + return ContextGLMipFilter; })(); -module.exports = ProgramDataPool; +module.exports = ContextGLMipFilter; -},{"awayjs-stagegl/lib/core/pool/ProgramData":undefined}],"awayjs-stagegl/lib/core/pool/ProgramData":[function(require,module,exports){ -/** - * - * @class away.pool.ProgramDataBase - */ -var ProgramData = (function () { - function ProgramData(pool, context, key) { - this.usages = 0; - this._pool = pool; - this.context = context; - this._key = key; - this.context.registerProgram(this); +},{}],"awayjs-stagegl/lib/base/ContextGLProfile":[function(require,module,exports){ +var ContextGLProfile = (function () { + function ContextGLProfile() { } - /** - * - */ - ProgramData.prototype.dispose = function () { - this.usages--; - if (!this.usages) { - this._pool.disposeItem(this._key); - this.context.unRegisterProgram(this); - if (this.program) - this.program.dispose(); - } - this.program = null; - }; - ProgramData.PROGRAMDATA_ID_COUNT = 0; - return ProgramData; + ContextGLProfile.BASELINE = "baseline"; + ContextGLProfile.BASELINE_CONSTRAINED = "baselineConstrained"; + ContextGLProfile.BASELINE_EXTENDED = "baselineExtended"; + return ContextGLProfile; })(); -module.exports = ProgramData; +module.exports = ContextGLProfile; -},{}],"awayjs-stagegl/lib/core/pool/RenderableBase":[function(require,module,exports){ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -var IndexDataPool = require("awayjs-stagegl/lib/core/pool/IndexDataPool"); -var VertexDataPool = require("awayjs-stagegl/lib/core/pool/VertexDataPool"); -/** - * @class RenderableListItem - */ -var RenderableBase = (function () { - /** - * - * @param sourceEntity - * @param materialOwner - * @param subGeometry - * @param animationSubGeometry - */ - function RenderableBase(pool, sourceEntity, materialOwner, level, indexOffset) { - var _this = this; - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - this._geometryDirty = true; - this._indexDataDirty = true; - this._vertexData = new Object(); - this._pVertexDataDirty = new Object(); - this._vertexOffset = new Object(); - this._onIndicesUpdatedDelegate = function (event) { return _this._onIndicesUpdated(event); }; - this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; - //store a reference to the pool for later disposal - this._pool = pool; - //reference to level of overflow - this._level = level; - //reference to the offset on indices (if this is an overflow renderable) - this._indexOffset = indexOffset; - this.sourceEntity = sourceEntity; - this.materialOwner = materialOwner; +},{}],"awayjs-stagegl/lib/base/ContextGLProgramType":[function(require,module,exports){ +var ContextGLProgramType = (function () { + function ContextGLProgramType() { } - Object.defineProperty(RenderableBase.prototype, "overflow", { - /** - * - */ + ContextGLProgramType.FRAGMENT = "fragment"; + ContextGLProgramType.VERTEX = "vertex"; + return ContextGLProgramType; +})(); +module.exports = ContextGLProgramType; + + +},{}],"awayjs-stagegl/lib/base/ContextGLStencilAction":[function(require,module,exports){ +var ContextGLStencilAction = (function () { + function ContextGLStencilAction() { + } + ContextGLStencilAction.DECREMENT_SATURATE = "decrementSaturate"; + ContextGLStencilAction.DECREMENT_WRAP = "decrementWrap"; + ContextGLStencilAction.INCREMENT_SATURATE = "incrementSaturate"; + ContextGLStencilAction.INCREMENT_WRAP = "incrementWrap"; + ContextGLStencilAction.INVERT = "invert"; + ContextGLStencilAction.KEEP = "keep"; + ContextGLStencilAction.SET = "set"; + ContextGLStencilAction.ZERO = "zero"; + return ContextGLStencilAction; +})(); +module.exports = ContextGLStencilAction; + + +},{}],"awayjs-stagegl/lib/base/ContextGLTextureFilter":[function(require,module,exports){ +var ContextGLTextureFilter = (function () { + function ContextGLTextureFilter() { + } + ContextGLTextureFilter.LINEAR = "linear"; + ContextGLTextureFilter.NEAREST = "nearest"; + return ContextGLTextureFilter; +})(); +module.exports = ContextGLTextureFilter; + + +},{}],"awayjs-stagegl/lib/base/ContextGLTextureFormat":[function(require,module,exports){ +var ContextGLTextureFormat = (function () { + function ContextGLTextureFormat() { + } + ContextGLTextureFormat.BGRA = "bgra"; + ContextGLTextureFormat.BGRA_PACKED = "bgraPacked4444"; + ContextGLTextureFormat.BGR_PACKED = "bgrPacked565"; + ContextGLTextureFormat.COMPRESSED = "compressed"; + ContextGLTextureFormat.COMPRESSED_ALPHA = "compressedAlpha"; + return ContextGLTextureFormat; +})(); +module.exports = ContextGLTextureFormat; + + +},{}],"awayjs-stagegl/lib/base/ContextGLTriangleFace":[function(require,module,exports){ +var ContextGLTriangleFace = (function () { + function ContextGLTriangleFace() { + } + ContextGLTriangleFace.BACK = "back"; + ContextGLTriangleFace.FRONT = "front"; + ContextGLTriangleFace.FRONT_AND_BACK = "frontAndBack"; + ContextGLTriangleFace.NONE = "none"; + return ContextGLTriangleFace; +})(); +module.exports = ContextGLTriangleFace; + + +},{}],"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat":[function(require,module,exports){ +var ContextGLVertexBufferFormat = (function () { + function ContextGLVertexBufferFormat() { + } + ContextGLVertexBufferFormat.BYTES_4 = "bytes4"; + ContextGLVertexBufferFormat.FLOAT_1 = "float1"; + ContextGLVertexBufferFormat.FLOAT_2 = "float2"; + ContextGLVertexBufferFormat.FLOAT_3 = "float3"; + ContextGLVertexBufferFormat.FLOAT_4 = "float4"; + return ContextGLVertexBufferFormat; +})(); +module.exports = ContextGLVertexBufferFormat; + + +},{}],"awayjs-stagegl/lib/base/ContextGLWrapMode":[function(require,module,exports){ +var ContextGLWrapMode = (function () { + function ContextGLWrapMode() { + } + ContextGLWrapMode.CLAMP = "clamp"; + ContextGLWrapMode.REPEAT = "repeat"; + return ContextGLWrapMode; +})(); +module.exports = ContextGLWrapMode; + + +},{}],"awayjs-stagegl/lib/base/ContextStage3D":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var swfobject = require("awayjs-stagegl/lib/swfobject"); +var Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); +var ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var CubeTextureFlash = require("awayjs-stagegl/lib/base/CubeTextureFlash"); +var IndexBufferFlash = require("awayjs-stagegl/lib/base/IndexBufferFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ProgramFlash = require("awayjs-stagegl/lib/base/ProgramFlash"); +var TextureFlash = require("awayjs-stagegl/lib/base/TextureFlash"); +var VertexBufferFlash = require("awayjs-stagegl/lib/base/VertexBufferFlash"); +var ContextStage3D = (function (_super) { + __extends(ContextStage3D, _super); + //TODO: get rid of hack that fixes including definition file + function ContextStage3D(container, stageIndex, callback, include) { + _super.call(this, stageIndex); + this._cmdStream = ""; + this._resources = new Array(); + var swfVersionStr = "11.0.0"; + // To use express install, set to playerProductInstall.swf, otherwise the empty string. + var flashvars = { + id: container.id + }; + var params = { + quality: "high", + bgcolor: "#ffffff", + allowscriptaccess: "sameDomain", + allowfullscreen: "true", + wmode: "direct" + }; + this._errorCheckingEnabled = false; + this._iDriverInfo = "Unknown"; + var attributes = { + salign: "tl", + id: container.id, + name: container["name"] //TODO: needed? + }; + this._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose + this._oldParent = container.parentNode; + var context3dObj = this; + ContextStage3D.contexts[container.id] = this; + function callbackSWFObject(callbackInfo) { + if (!callbackInfo.success) + return; + context3dObj._pContainer = callbackInfo.ref; + context3dObj._iCallback = callback; + } + swfobject.embedSWF("libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); + } + Object.defineProperty(ContextStage3D.prototype, "container", { get: function () { - if (this._indexDataDirty) - this._updateIndexData(); - return this._overflow; + return this._pContainer; }, enumerable: true, configurable: true }); - Object.defineProperty(RenderableBase.prototype, "numTriangles", { - /** - * - */ + Object.defineProperty(ContextStage3D.prototype, "driverInfo", { get: function () { - return this._numTriangles; + return this._iDriverInfo; }, enumerable: true, configurable: true }); - /** - * - */ - RenderableBase.prototype.getIndexData = function () { - if (this._indexDataDirty) - this._updateIndexData(); - return this._indexData; + Object.defineProperty(ContextStage3D.prototype, "errorCheckingEnabled", { + get: function () { + return this._errorCheckingEnabled; + }, + set: function (value) { + if (this._errorCheckingEnabled == value) + return; + this._errorCheckingEnabled = value; + this.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value ? OpCodes.trueValue : OpCodes.falseValue)); + this.execute(); + }, + enumerable: true, + configurable: true + }); + ContextStage3D.prototype._iAddResource = function (resource) { + this._resources.push(resource); }; - /** - * - */ - RenderableBase.prototype.getVertexData = function (dataType) { - if (this._indexDataDirty) - this._updateIndexData(); - if (this._pVertexDataDirty[dataType]) - this._updateVertexData(dataType); - return this._vertexData[this._concatenateArrays ? TriangleSubGeometry.VERTEX_DATA : dataType]; + ContextStage3D.prototype._iRemoveResource = function (resource) { + this._resources.splice(this._resources.indexOf(resource)); }; - /** - * - */ - RenderableBase.prototype.getVertexOffset = function (dataType) { - if (this._indexDataDirty) - this._updateIndexData(); - if (this._pVertexDataDirty[dataType]) - this._updateVertexData(dataType); - return this._vertexOffset[dataType]; + ContextStage3D.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO:streaming + return new TextureFlash(this, width, height, format, optimizeForRenderToTexture); }; - RenderableBase.prototype.dispose = function () { - this._pool.disposeItem(this.materialOwner); - this._indexData.dispose(); - this._indexData = null; - for (var dataType in this._vertexData) { - this._vertexData[dataType].dispose(); - this._vertexData[dataType] = null; + ContextStage3D.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO:streaming + return new CubeTextureFlash(this, size, format, optimizeForRenderToTexture); + }; + ContextStage3D.prototype.setTextureAt = function (sampler, texture) { + if (texture) { + this.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + "," + texture.id + ","); } - if (this._overflow) { - this._overflow.dispose(); - this._overflow = null; + else { + this.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + ","); } + if (ContextStage3D.debug) + this.execute(); }; - RenderableBase.prototype.invalidateGeometry = function () { - this._geometryDirty = true; - //invalidate indices - if (this._level == 0) - this._indexDataDirty = true; - if (this._overflow) - this._overflow.invalidateGeometry(); + ContextStage3D.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { + //nothing to do here }; - /** - * - */ - RenderableBase.prototype.invalidateIndexData = function () { - this._indexDataDirty = true; + ContextStage3D.prototype.setStencilActions = function (triangleFace, compareMode, actionOnBothPass, actionOnDepthFail, actionOnDepthPassStencilFail) { + if (triangleFace === void 0) { triangleFace = "frontAndBack"; } + if (compareMode === void 0) { compareMode = "always"; } + if (actionOnBothPass === void 0) { actionOnBothPass = "keep"; } + if (actionOnDepthFail === void 0) { actionOnDepthFail = "keep"; } + if (actionOnDepthPassStencilFail === void 0) { actionOnDepthPassStencilFail = "keep"; } + this.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + "$" + compareMode + "$" + actionOnBothPass + "$" + actionOnDepthFail + "$" + actionOnDepthPassStencilFail + "$"); + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param dataType - */ - RenderableBase.prototype.invalidateVertexData = function (dataType) { - this._pVertexDataDirty[dataType] = true; + ContextStage3D.prototype.setStencilReferenceValue = function (referenceValue, readMask, writeMask) { + if (readMask === void 0) { readMask = 255; } + if (writeMask === void 0) { writeMask = 255; } + this.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask)); + if (ContextStage3D.debug) + this.execute(); }; - RenderableBase.prototype._pGetSubGeometry = function () { - throw new AbstractMethodError(); + ContextStage3D.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { + if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } + //TODO implement coordinateSystem option + this.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + "$"); + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param subGeometry - * @param offset - * @internal - */ - RenderableBase.prototype._iFillIndexData = function (indexOffset) { - if (this._geometryDirty) - this._updateGeometry(); - this._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset); - this._numTriangles = this._indexData.data.length / 3; - indexOffset = this._indexData.offset; - //check if there is more to split - if (indexOffset < this._subGeometry.indices.length) { - if (!this._overflow) - this._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1); - this._overflow._iFillIndexData(indexOffset); + ContextStage3D.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { + if (firstIndex === void 0) { firstIndex = 0; } + if (numTriangles === void 0) { numTriangles = -1; } + firstIndex = firstIndex || 0; + if (!numTriangles || numTriangles < 0) + numTriangles = indexBuffer.numIndices / 3; + this.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + "," + numTriangles + ","); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { + //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); + if (transposedMatrix === void 0) { transposedMatrix = false; } + //TODO remove special case for WebGL matrix calls? + var d = matrix.rawData; + if (transposedMatrix) { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); } - else if (this._overflow) { - this._overflow.dispose(); - this._overflow = null; + else { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); } }; - RenderableBase.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - throw new AbstractMethodError(); + ContextStage3D.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { + if (numRegisters === void 0) { numRegisters = -1; } + var startIndex; + var target = (programType == ContextGLProgramType.VERTEX) ? OpCodes.trueValue : OpCodes.falseValue; + for (var i = 0; i < numRegisters; i++) { + startIndex = i * 4; + this.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + "," + data[startIndex + 1] + "," + data[startIndex + 2] + "," + data[startIndex + 3] + ","); + if (ContextStage3D.debug) + this.execute(); + } }; - /** - * //TODO - * - * @private - */ - RenderableBase.prototype._updateGeometry = function () { - if (this._subGeometry) { - if (this._level == 0) - this._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); - this._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + ContextStage3D.prototype.setProgram = function (program) { + this.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask)); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.present = function () { + this.addStream(String.fromCharCode(OpCodes.present)); + this.execute(); + }; + ContextStage3D.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } + this.addStream(String.fromCharCode(OpCodes.clear) + red + "," + green + "," + blue + "," + alpha + "," + depth + "," + stencil + "," + mask + ","); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.createProgram = function () { + return new ProgramFlash(this); + }; + ContextStage3D.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + return new VertexBufferFlash(this, numVertices, data32PerVertex); + }; + ContextStage3D.prototype.createIndexBuffer = function (numIndices) { + return new IndexBufferFlash(this, numIndices); + }; + ContextStage3D.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); + //TODO: add Anitalias setting + this.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + "," + height + ","); + }; + ContextStage3D.prototype.drawToBitmapData = function (destination) { + //TODO + }; + ContextStage3D.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } + if (buffer) { + this.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + "," + bufferOffset + "," + format + "$"); } - this._subGeometry = this._pGetSubGeometry(); - this._concatenateArrays = this._subGeometry.concatenateArrays; - if (this._subGeometry) { - if (this._level == 0) - this._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); - this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + else { + this.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask)); } - //dispose - // if (this._indexData) { - // this._indexData.dispose(); //TODO where is a good place to dispose? - // this._indexData = null; - // } - // for (var dataType in this._vertexData) { - // ( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose? - // this._vertexData[dataType] = null; - // } - this._geometryDirty = false; - //specific vertex data types have to be invalidated in the specific renderable + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @private - */ - RenderableBase.prototype._updateIndexData = function () { - this._iFillIndexData(this._indexOffset); - this._indexDataDirty = false; + ContextStage3D.prototype.setColorMask = function (red, green, blue, alpha) { + this.addStream(String.fromCharCode(OpCodes.setColorMask, red ? OpCodes.trueValue : OpCodes.falseValue, green ? OpCodes.trueValue : OpCodes.falseValue, blue ? OpCodes.trueValue : OpCodes.falseValue, alpha ? OpCodes.trueValue : OpCodes.falseValue)); + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param dataType - * @private - */ - RenderableBase.prototype._updateVertexData = function (dataType) { - this._vertexOffset[dataType] = this._subGeometry.getOffset(dataType); - if (this._subGeometry.concatenateArrays) - dataType = SubGeometryBase.VERTEX_DATA; - this._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType); - this._pVertexDataDirty[dataType] = false; + ContextStage3D.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { + this.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + "$" + destinationFactor + "$"); + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param event - * @private - */ - RenderableBase.prototype._onIndicesUpdated = function (event) { - this.invalidateIndexData(); + ContextStage3D.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + if (target === null || target === undefined) { + this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); + } + else { + this.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil ? OpCodes.trueValue : OpCodes.falseValue) + target.id + "," + (antiAlias || 0) + ","); + } + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param event - * @private - */ - RenderableBase.prototype._onVerticesUpdated = function (event) { - this._concatenateArrays = event.target.concatenateArrays; - this.invalidateVertexData(event.dataType); + ContextStage3D.prototype.setRenderToBackBuffer = function () { + this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); + if (ContextStage3D.debug) + this.execute(); }; - return RenderableBase; -})(); -module.exports = RenderableBase; - - -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-display/lib/events/SubGeometryEvent":undefined,"awayjs-stagegl/lib/core/pool/IndexDataPool":undefined,"awayjs-stagegl/lib/core/pool/VertexDataPool":undefined}],"awayjs-stagegl/lib/core/pool/SkyboxRenderable":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.SkyboxRenderable - */ -var SkyboxRenderable = (function (_super) { - __extends(SkyboxRenderable, _super); - /** - * //TODO - * - * @param pool - * @param skybox - */ - function SkyboxRenderable(pool, skybox) { - _super.call(this, pool, skybox, skybox); - } - /** - * //TODO - * - * @returns {away.base.TriangleSubGeometry} - * @private - */ - SkyboxRenderable.prototype._pGetSubGeometry = function () { - var geometry = SkyboxRenderable._geometry; - if (!geometry) { - geometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true); - geometry.autoDeriveNormals = false; - geometry.autoDeriveTangents = false; - geometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2)); - geometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1)); + ContextStage3D.prototype.setScissorRectangle = function (rectangle) { + if (rectangle) { + this.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + "," + rectangle.y + "," + rectangle.width + "," + rectangle.height + ","); } - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - return geometry; + else { + this.addStream(String.fromCharCode(OpCodes.clearScissorRect)); + } + if (ContextStage3D.debug) + this.execute(); }; - /** - * - */ - SkyboxRenderable.id = "skybox"; - return SkyboxRenderable; -})(RenderableBase); -module.exports = SkyboxRenderable; - - -},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/core/pool/TextureDataPool":[function(require,module,exports){ -var TextureData = require("awayjs-stagegl/lib/core/pool/TextureData"); -/** - * @class away.pool.TextureDataPool - */ -var TextureDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function TextureDataPool(context) { - this._pool = new Object(); - this._context = context; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - TextureDataPool.prototype.getItem = function (textureProxy) { - return (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy)))); + ContextStage3D.prototype.setDepthTest = function (depthMask, passCompareMode) { + this.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask ? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + "$"); + if (ContextStage3D.debug) + this.execute(); }; - /** - * //TODO - * - * @param materialOwner - */ - TextureDataPool.prototype.disposeItem = function (textureProxy) { - textureProxy._iRemoveTextureData(this._pool[textureProxy.id]); - this._pool[textureProxy.id] = null; + ContextStage3D.prototype.dispose = function () { + if (this._pContainer == null) + return; + console.log("Context3D dispose, releasing " + this._resources.length + " resources."); + while (this._resources.length) + this._resources[0].dispose(); + if (this._pContainer) { + // encode command + this.addStream(String.fromCharCode(OpCodes.disposeContext)); + this.execute(); + swfobject.removeSWF(this._oldCanvas.id); + if (this._oldCanvas && this._oldParent) { + this._oldParent.appendChild(this._oldCanvas); + this._oldParent = null; + } + this._pContainer = null; + } + this._oldCanvas = null; }; - return TextureDataPool; -})(); -module.exports = TextureDataPool; - - -},{"awayjs-stagegl/lib/core/pool/TextureData":undefined}],"awayjs-stagegl/lib/core/pool/TextureData":[function(require,module,exports){ -/** - * - * @class away.pool.TextureDataBase - */ -var TextureData = (function () { - function TextureData(pool, context, textureProxy) { - this._pool = pool; - this.context = context; - this.textureProxy = textureProxy; - } - /** - * - */ - TextureData.prototype.dispose = function () { - this._pool.disposeItem(this.textureProxy); - this.texture.dispose(); - this.texture = null; + ContextStage3D.prototype.addStream = function (stream) { + this._cmdStream += stream; }; - /** - * - */ - TextureData.prototype.invalidate = function () { - this.invalid = true; + ContextStage3D.prototype.execute = function () { + if (ContextStage3D.logStream) + console.log(this._cmdStream); + var result = this._pContainer["CallFunction"]("" + this._cmdStream + ""); + if (Number(result) <= -3) + throw "Exec stream failed"; + this._cmdStream = ""; + return Number(result); }; - return TextureData; -})(); -module.exports = TextureData; + ContextStage3D.contexts = new Object(); + ContextStage3D.maxvertexconstants = 128; + ContextStage3D.maxfragconstants = 28; + ContextStage3D.maxtemp = 8; + ContextStage3D.maxstreams = 8; + ContextStage3D.maxtextures = 8; + ContextStage3D.defaultsampler = new Sampler(); + ContextStage3D.debug = false; + ContextStage3D.logStream = false; + return ContextStage3D; +})(ContextGLBase); +/** +* global function for flash callback +*/ +function mountain_js_context_available(id, driverInfo) { + var ctx = ContextStage3D.contexts[id]; + if (ctx._iCallback) { + ctx._iDriverInfo = driverInfo; + // get out of the current JS stack frame and call back from flash player + var timeOutId = window.setTimeout(function () { + window.clearTimeout(timeOutId); + try { + ctx._iCallback(ctx); + } + catch (e) { + console.log("Callback failed during flash initialization with '" + e.toString() + "'"); + } + }, 1); + } +} +module.exports = ContextStage3D; -},{}],"awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable":[function(require,module,exports){ +},{"awayjs-stagegl/lib/aglsl/Sampler":undefined,"awayjs-stagegl/lib/base/ContextGLBase":undefined,"awayjs-stagegl/lib/base/ContextGLClearMask":undefined,"awayjs-stagegl/lib/base/ContextGLProgramType":undefined,"awayjs-stagegl/lib/base/CubeTextureFlash":undefined,"awayjs-stagegl/lib/base/IndexBufferFlash":undefined,"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ProgramFlash":undefined,"awayjs-stagegl/lib/base/TextureFlash":undefined,"awayjs-stagegl/lib/base/VertexBufferFlash":undefined,"awayjs-stagegl/lib/swfobject":undefined}],"awayjs-stagegl/lib/base/ContextWebGL":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -/** - * @class away.pool.TriangleSubMeshRenderable - */ -var TriangleSubMeshRenderable = (function (_super) { - __extends(TriangleSubMeshRenderable, _super); - /** - * //TODO - * - * @param pool - * @param subMesh - * @param level - * @param indexOffset - */ - function TriangleSubMeshRenderable(pool, subMesh, level, indexOffset) { - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); - this.subMesh = subMesh; - } - /** - * - * @returns {SubGeometryBase} - * @protected - */ - TriangleSubMeshRenderable.prototype._pGetSubGeometry = function () { - var subGeometry; - if (this.subMesh.animator) - subGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry); - else - subGeometry = this.subMesh.subGeometry; - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - if (subGeometry.vertexNormals) - this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; - if (subGeometry.vertexTangents) - this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; - if (subGeometry.uvs) - this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; - if (subGeometry.secondaryUVs) - this._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true; - if (subGeometry.jointIndices) - this._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true; - if (subGeometry.jointWeights) - this._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true; - switch (subGeometry.jointsPerVertex) { - case 1: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1; - break; - case 2: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2; - break; - case 3: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3; - break; - case 4: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4; - break; - default: +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var ByteArray = require("awayjs-core/lib/utils/ByteArray"); +var ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var CubeTextureWebGL = require("awayjs-stagegl/lib/base/CubeTextureWebGL"); +var IndexBufferWebGL = require("awayjs-stagegl/lib/base/IndexBufferWebGL"); +var ProgramWebGL = require("awayjs-stagegl/lib/base/ProgramWebGL"); +var TextureWebGL = require("awayjs-stagegl/lib/base/TextureWebGL"); +var SamplerState = require("awayjs-stagegl/lib/base/SamplerState"); +var VertexBufferWebGL = require("awayjs-stagegl/lib/base/VertexBufferWebGL"); +var ContextWebGL = (function (_super) { + __extends(ContextWebGL, _super); + function ContextWebGL(canvas, stageIndex) { + _super.call(this, stageIndex); + this._blendFactorDictionary = new Object(); + this._depthTestDictionary = new Object(); + this._textureIndexDictionary = new Array(8); + this._textureTypeDictionary = new Object(); + this._wrapDictionary = new Object(); + this._filterDictionary = new Object(); + this._mipmapFilterDictionary = new Object(); + this._uniformLocationNameDictionary = new Object(); + this._vertexBufferDimensionDictionary = new Object(); + this._indexBufferList = new Array(); + this._vertexBufferList = new Array(); + this._textureList = new Array(); + this._programList = new Array(); + this._samplerStates = new Array(8); + this._pContainer = canvas; + try { + this._gl = canvas.getContext("experimental-webgl", { premultipliedAlpha: false, alpha: false }); + if (!this._gl) + this._gl = canvas.getContext("webgl", { premultipliedAlpha: false, alpha: false }); } - return subGeometry; - }; - /** - * //TODO - * - * @param pool - * @param materialOwner - * @param level - * @param indexOffset - * @returns {away.pool.TriangleSubMeshRenderable} - * @protected - */ - TriangleSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - return new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset); - }; - /** - * - */ - TriangleSubMeshRenderable.id = "trianglesubmesh"; - return TriangleSubMeshRenderable; -})(RenderableBase); -module.exports = TriangleSubMeshRenderable; - - -},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/pool/RenderableBase":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat":undefined}],"awayjs-stagegl/lib/core/pool/VertexDataPool":[function(require,module,exports){ -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); -/** - * - */ -var VertexDataPool = (function () { - function VertexDataPool() { - } - VertexDataPool.getItem = function (subGeometry, indexData, dataType) { - if (subGeometry.concatenateArrays) - dataType = SubGeometryBase.VERTEX_DATA; - var subGeometryDictionary = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object())); - var subGeometryData = (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array())); - var vertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType)); - vertexData.updateData(indexData.originalIndices, indexData.indexMappings); - return vertexData; - }; - VertexDataPool.disposeItem = function (subGeometry, level, dataType) { - var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; - var subGeometryData = subGeometryDictionary[dataType]; - subGeometryData[level].dispose(); - subGeometryData[level] = null; - }; - VertexDataPool.prototype.disposeData = function (subGeometry) { - var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; - for (var key in subGeometryDictionary) { - var subGeometryData = subGeometryDictionary[key]; - var len = subGeometryData.length; - for (var i = 0; i < len; i++) { - subGeometryData[i].dispose(); - subGeometryData[i] = null; - } + catch (e) { } - VertexDataPool._pool[subGeometry.id] = null; - }; - VertexDataPool._pool = new Object(); - return VertexDataPool; -})(); -module.exports = VertexDataPool; - - -},{"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-stagegl/lib/core/pool/VertexData":undefined}],"awayjs-stagegl/lib/core/pool/VertexData":[function(require,module,exports){ -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -/** - * - */ -var VertexData = (function () { - function VertexData(subGeometry, dataType) { - var _this = this; - this._dataDirty = true; - this.invalid = new Array(8); - this.buffers = new Array(8); - this.contexts = new Array(8); - this._subGeometry = subGeometry; - this._dataType = dataType; - this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; - this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); - } - VertexData.prototype.updateData = function (originalIndices, indexMappings) { - if (originalIndices === void 0) { originalIndices = null; } - if (indexMappings === void 0) { indexMappings = null; } - if (this._dataDirty) { - this._dataDirty = false; - this.dataPerVertex = this._subGeometry.getStride(this._dataType); - var vertices = this._subGeometry[this._dataType]; - if (indexMappings == null) { - this.setData(vertices); - } - else { - var splitVerts = new Array(originalIndices.length * this.dataPerVertex); - var originalIndex; - var splitIndex; - var i = 0; - var j = 0; - while (i < originalIndices.length) { - originalIndex = originalIndices[i]; - splitIndex = indexMappings[originalIndex] * this.dataPerVertex; - originalIndex *= this.dataPerVertex; - for (j = 0; j < this.dataPerVertex; j++) - splitVerts[splitIndex + j] = vertices[originalIndex + j]; - i++; - } - this.setData(splitVerts); - } + if (this._gl) { + //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) ); + //setup shortcut dictionaries + this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; + this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO; + this._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS; + this._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL; + this._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER; + this._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL; + this._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS; + this._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL; + this._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER; + this._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL; + this._textureIndexDictionary[0] = this._gl.TEXTURE0; + this._textureIndexDictionary[1] = this._gl.TEXTURE1; + this._textureIndexDictionary[2] = this._gl.TEXTURE2; + this._textureIndexDictionary[3] = this._gl.TEXTURE3; + this._textureIndexDictionary[4] = this._gl.TEXTURE4; + this._textureIndexDictionary[5] = this._gl.TEXTURE5; + this._textureIndexDictionary[6] = this._gl.TEXTURE6; + this._textureIndexDictionary[7] = this._gl.TEXTURE7; + this._textureTypeDictionary["texture2d"] = this._gl.TEXTURE_2D; + this._textureTypeDictionary["textureCube"] = this._gl.TEXTURE_CUBE_MAP; + this._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT; + this._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE; + this._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR; + this._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object(); + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object(); + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST; + this._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = "vc"; + this._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = "fc"; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4; } - }; - VertexData.prototype.dispose = function () { - for (var i = 0; i < 8; ++i) { - if (this.contexts[i]) { - this.contexts[i].disposeVertexData(this); - this.contexts[i] = null; - } + else { + //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) ); + alert("WebGL is not available."); } - }; - /** - * @private - */ - VertexData.prototype.disposeBuffers = function () { - for (var i = 0; i < 8; ++i) { - if (this.buffers[i]) { - this.buffers[i].dispose(); - this.buffers[i] = null; - } + for (var i = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) { + this._samplerStates[i] = new SamplerState(); + this._samplerStates[i].wrap = this._gl.REPEAT; + this._samplerStates[i].filter = this._gl.LINEAR; + this._samplerStates[i].mipfilter = this._gl.LINEAR; } - }; - /** - * @private - */ - VertexData.prototype.invalidateBuffers = function () { - for (var i = 0; i < 8; ++i) - this.invalid[i] = true; - }; - /** - * - * @param data - * @param dataPerVertex - * @private - */ - VertexData.prototype.setData = function (data) { - if (this.data && this.data.length != data.length) - this.disposeBuffers(); - else - this.invalidateBuffers(); - this.data = data; - }; - /** - * //TODO - * - * @param event - * @private - */ - VertexData.prototype._onVerticesUpdated = function (event) { - var dataType = this._subGeometry.concatenateArrays ? SubGeometryBase.VERTEX_DATA : event.dataType; - if (dataType == this._dataType) - this._dataDirty = true; - }; - return VertexData; -})(); -module.exports = VertexData; - - -},{"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-display/lib/events/SubGeometryEvent":undefined}],"awayjs-stagegl/lib/core/render/DefaultRenderer":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); -var Vector3D = require("awayjs-core/lib/geom/Vector3D"); -var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); -var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); -var SkyboxRenderable = require("awayjs-stagegl/lib/core/pool/SkyboxRenderable"); -var DepthRenderer = require("awayjs-stagegl/lib/core/render/DepthRenderer"); -var Filter3DRenderer = require("awayjs-stagegl/lib/core/render/Filter3DRenderer"); -var RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); -var StageManager = require("awayjs-stagegl/lib/managers/StageManager"); -var DepthMapPass = require("awayjs-stagegl/lib/materials/passes/DepthMapPass"); -var DistanceMapPass = require("awayjs-stagegl/lib/materials/passes/DistanceMapPass"); -/** - * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the - * materials assigned to them. - * - * @class away.render.DefaultRenderer - */ -var DefaultRenderer = (function (_super) { - __extends(DefaultRenderer, _super); - /** - * Creates a new DefaultRenderer object. - * - * @param antiAlias The amount of anti-aliasing to use. - * @param renderMode The render mode to use. - */ - function DefaultRenderer(forceSoftware, profile, mode) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - _super.call(this); - this._skyboxProjection = new Matrix3D(); - this._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable); - this._pDepthRenderer = new DepthRenderer(new DepthMapPass()); - this._pDistanceRenderer = new DepthRenderer(new DistanceMapPass()); - if (this._pStage == null) - this.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode); - this._pRttBufferManager = RTTBufferManager.getInstance(this._pStage); - if (this._width == 0) - this.width = window.innerWidth; - else - this._pRttBufferManager.viewWidth = this._width; - if (this._height == 0) - this.height = window.innerHeight; - else - this._pRttBufferManager.viewHeight = this._height; } - Object.defineProperty(DefaultRenderer.prototype, "antiAlias", { - get: function () { - return this._antiAlias; - }, - set: function (value) { - if (this._antiAlias == value) - return; - this._antiAlias = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DefaultRenderer.prototype, "depthPrepass", { - /** - * - */ + Object.defineProperty(ContextWebGL.prototype, "container", { get: function () { - return this._depthPrepass; - }, - set: function (value) { - this._depthPrepass = value; + return this._pContainer; }, enumerable: true, configurable: true }); - Object.defineProperty(DefaultRenderer.prototype, "filters3d", { - /** - * - * @returns {*} - */ - get: function () { - return this._pFilter3DRenderer ? this._pFilter3DRenderer.filters : null; - }, - set: function (value) { - if (value && value.length == 0) - value = null; - if (this._pFilter3DRenderer && !value) { - this._pFilter3DRenderer.dispose(); - this._pFilter3DRenderer = null; - } - else if (!this._pFilter3DRenderer && value) { - this._pFilter3DRenderer = new Filter3DRenderer(this._pStage); - this._pFilter3DRenderer.filters = value; - } - if (this._pFilter3DRenderer) { - this._pFilter3DRenderer.filters = value; - this._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender; - } - else { - this._pRequireDepthRender = false; - if (this._pDepthRender) { - this._pDepthRender.dispose(); - this._pDepthRender = null; - } - } - }, - enumerable: true, - configurable: true - }); - DefaultRenderer.prototype.render = function (entityCollector) { - _super.prototype.render.call(this, entityCollector); - if (!this._pStage.recoverFromDisposal()) { - this._pBackBufferInvalid = true; - return; - } - if (this._pBackBufferInvalid) - this.pUpdateBackBuffer(); - if (this._shareContext && this._pContext) - this._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH); - if (this._pFilter3DRenderer) { - this.textureRatioX = this._pRttBufferManager.textureRatioX; - this.textureRatioY = this._pRttBufferManager.textureRatioY; + ContextWebGL.prototype.gl = function () { + return this._gl; + }; + ContextWebGL.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } + if (!this._drawing) { + this.updateBlendStatus(); + this._drawing = true; } - else { - this.textureRatioX = 1; - this.textureRatioY = 1; + var glmask = 0; + if (mask & ContextGLClearMask.COLOR) + glmask |= this._gl.COLOR_BUFFER_BIT; + if (mask & ContextGLClearMask.STENCIL) + glmask |= this._gl.STENCIL_BUFFER_BIT; + if (mask & ContextGLClearMask.DEPTH) + glmask |= this._gl.DEPTH_BUFFER_BIT; + this._gl.clearColor(red, green, blue, alpha); + this._gl.clearDepth(depth); + this._gl.clearStencil(stencil); + this._gl.clear(glmask); + }; + ContextWebGL.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); + if (enableDepthAndStencil) { + this._gl.enable(this._gl.STENCIL_TEST); + this._gl.enable(this._gl.DEPTH_TEST); } - if (this._pRequireDepthRender) - this.pRenderSceneDepthToTexture(entityCollector); - if (this._depthPrepass) - this.pRenderDepthPrepass(entityCollector); - if (this._pFilter3DRenderer && this._pContext) { + this._gl.viewport['width'] = width; + this._gl.viewport['height'] = height; + this._gl.viewport(0, 0, width, height); + }; + ContextWebGL.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + var texture = new CubeTextureWebGL(this._gl, size); + this._textureList.push(texture); + return texture; + }; + ContextWebGL.prototype.createIndexBuffer = function (numIndices) { + var indexBuffer = new IndexBufferWebGL(this._gl, numIndices); + this._indexBufferList.push(indexBuffer); + return indexBuffer; + }; + ContextWebGL.prototype.createProgram = function () { + var program = new ProgramWebGL(this._gl); + this._programList.push(program); + return program; + }; + ContextWebGL.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO streaming + var texture = new TextureWebGL(this._gl, width, height); + this._textureList.push(texture); + return texture; + }; + ContextWebGL.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + var vertexBuffer = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex); + this._vertexBufferList.push(vertexBuffer); + return vertexBuffer; + }; + ContextWebGL.prototype.dispose = function () { + var i; + for (i = 0; i < this._indexBufferList.length; ++i) + this._indexBufferList[i].dispose(); + this._indexBufferList = null; + for (i = 0; i < this._vertexBufferList.length; ++i) + this._vertexBufferList[i].dispose(); + this._vertexBufferList = null; + for (i = 0; i < this._textureList.length; ++i) + this._textureList[i].dispose(); + this._textureList = null; + for (i = 0; i < this._programList.length; ++i) + this._programList[i].dispose(); + for (i = 0; i < this._samplerStates.length; ++i) + this._samplerStates[i] = null; + this._programList = null; + }; + ContextWebGL.prototype.drawToBitmapData = function (destination) { + var arrayBuffer = new ArrayBuffer(destination.width * destination.height * 4); + this._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer)); + var byteArray = new ByteArray(); + byteArray.setArrayBuffer(arrayBuffer); + destination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray); + }; + ContextWebGL.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { + if (firstIndex === void 0) { firstIndex = 0; } + if (numTriangles === void 0) { numTriangles = -1; } + if (!this._drawing) + throw "Need to clear before drawing if the buffer has not been cleared since the last present() call."; + this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer); + this._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1) ? indexBuffer.numIndices : numTriangles * 3, this._gl.UNSIGNED_SHORT, firstIndex); + }; + ContextWebGL.prototype.present = function () { + this._drawing = false; + }; + ContextWebGL.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { + this._blendEnabled = true; + this._blendSourceFactor = this._blendFactorDictionary[sourceFactor]; + this._blendDestinationFactor = this._blendFactorDictionary[destinationFactor]; + this.updateBlendStatus(); + }; + ContextWebGL.prototype.setColorMask = function (red, green, blue, alpha) { + this._gl.colorMask(red, green, blue, alpha); + }; + ContextWebGL.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { + if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } + if (triangleFaceToCull == ContextGLTriangleFace.NONE) { + this._gl.disable(this._gl.CULL_FACE); } else { - if (this._shareContext) - this._iRender(entityCollector, null, this._pScissorRect); - else - this._iRender(entityCollector); + this._gl.enable(this._gl.CULL_FACE); + switch (triangleFaceToCull) { + case ContextGLTriangleFace.BACK: + this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.FRONT : this._gl.BACK); + break; + case ContextGLTriangleFace.FRONT: + this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.BACK : this._gl.FRONT); + break; + case ContextGLTriangleFace.FRONT_AND_BACK: + this._gl.cullFace(this._gl.FRONT_AND_BACK); + break; + default: + throw "Unknown ContextGLTriangleFace type."; + } } - _super.prototype.render.call(this, entityCollector); - if (!this._shareContext && this._pContext) - this._pContext.present(); - // register that a view has been rendered - this._pStage.bufferClear = false; }; - DefaultRenderer.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - this.updateLights(entityCollector); - // otherwise RTT will interfere with other RTTs - if (target) { - this.pCollectRenderables(entityCollector); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); - } - _super.prototype.pExecuteRender.call(this, entityCollector, target, scissorRect, surfaceSelector); + // TODO ContextGLCompareMode + ContextWebGL.prototype.setDepthTest = function (depthMask, passCompareMode) { + this._gl.depthFunc(this._depthTestDictionary[passCompareMode]); + this._gl.depthMask(depthMask); }; - DefaultRenderer.prototype.updateLights = function (entityCollector) { - var dirLights = entityCollector.directionalLights; - var pointLights = entityCollector.pointLights; - var len, i; - var light; - var shadowMapper; - len = dirLights.length; - for (i = 0; i < len; ++i) { - light = dirLights[i]; - shadowMapper = light.shadowMapper; - if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) - shadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer); + ContextWebGL.prototype.setProgram = function (program) { + //TODO decide on construction/reference resposibilities + this._currentProgram = program; + program.focusProgram(); + }; + ContextWebGL.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { + //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); + if (transposedMatrix === void 0) { transposedMatrix = false; } + //TODO remove special case for WebGL matrix calls? + var d = matrix.rawData; + if (transposedMatrix) { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); } - len = pointLights.length; - for (i = 0; i < len; ++i) { - light = pointLights[i]; - shadowMapper = light.shadowMapper; - if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) - shadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer); + else { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); } }; - /** - * @inheritDoc - */ - DefaultRenderer.prototype.pDraw = function (entityCollector, target) { - if (!target) - this.pCollectRenderables(entityCollector); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - if (entityCollector.skyBox) { - this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); - this.drawSkybox(entityCollector); + ContextWebGL.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { + if (numRegisters === void 0) { numRegisters = -1; } + var locationName = this._uniformLocationNameDictionary[programType]; + var startIndex; + for (var i = 0; i < numRegisters; i++) { + startIndex = i * 4; + this._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]); } - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); }; - /** - * Draw the skybox if present. - * - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DefaultRenderer.prototype.drawSkybox = function (entityCollector) { - var skyBox = this._skyboxRenderablePool.getItem(entityCollector.skyBox); - var material = entityCollector.skyBox.material; - var camera = entityCollector.camera; - this.updateSkyboxProjection(camera); - var activePass = this._pStage.context.getMaterial(material, this._pStage.profile).getMaterialPass(material._iScreenPasses[0], this._pStage.profile); - material._iActivatePass(activePass, this._pStage, camera); - material._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection); - material._iDeactivatePass(activePass, this._pStage); - }; - DefaultRenderer.prototype.updateSkyboxProjection = function (camera) { - var near = new Vector3D(); - this._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix); - this._skyboxProjection.copyRowTo(2, near); - var camPos = camera.scenePosition; - var cx = near.x; - var cy = near.y; - var cz = near.z; - var cw = -(near.x * camPos.x + near.y * camPos.y + near.z * camPos.z + Math.sqrt(cx * cx + cy * cy + cz * cz)); - var signX = cx >= 0 ? 1 : -1; - var signY = cy >= 0 ? 1 : -1; - var p = new Vector3D(signX, signY, 1, 1); - var inverse = this._skyboxProjection.clone(); - inverse.invert(); - var q = inverse.transformVector(p); - this._skyboxProjection.copyRowTo(3, p); - var a = (q.x * p.x + q.y * p.y + q.z * p.z + q.w * p.w) / (cx * q.x + cy * q.y + cz * q.z + cw * q.w); - this._skyboxProjection.copyRowFrom(2, new Vector3D(cx * a, cy * a, cz * a, cw * a)); + ContextWebGL.prototype.setScissorRectangle = function (rectangle) { + if (!rectangle) { + this._gl.disable(this._gl.SCISSOR_TEST); + return; + } + this._gl.enable(this._gl.SCISSOR_TEST); + this._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height); }; - /** - * Draw a list of renderables. - * - * @param renderables The renderables to draw. - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DefaultRenderer.prototype.drawRenderables = function (renderable, entityCollector) { - var i; - var len; - var passes; - var activePass; - var activeMaterial; - var context = this._pStage.context; - var camera = entityCollector.camera; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - //iterate through each screen pass - passes = renderable.material._iScreenPasses; - len = renderable.material._iNumScreenPasses(); - for (i = 0; i < len; i++) { - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(passes[i], this._pStage.profile); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - renderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - activeMaterial.material._iDeactivatePass(activePass, this._pStage); + ContextWebGL.prototype.setTextureAt = function (sampler, texture) { + var samplerState = this._samplerStates[sampler]; + if (this._activeTexture != sampler && (texture || samplerState.type)) { + this._activeTexture = sampler; + this._gl.activeTexture(this._textureIndexDictionary[sampler]); + } + if (!texture) { + if (samplerState.type) { + this._gl.bindTexture(samplerState.type, null); + samplerState.type = null; } - renderable = renderable2; + return; } + var textureType = this._textureTypeDictionary[texture.textureType]; + samplerState.type = textureType; + this._gl.bindTexture(textureType, texture.glTexture); + this._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, "fs" + sampler), sampler); + this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap); + this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap); + this._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter); + this._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter); }; - DefaultRenderer.prototype.dispose = function () { - if (!this._shareContext) - this._pStage.dispose(); - this._pDepthRenderer.dispose(); - this._pDistanceRenderer.dispose(); - this._pDepthRenderer = null; - this._pDistanceRenderer = null; - this._pDepthRender = null; - _super.prototype.dispose.call(this); - }; - /** - * - */ - DefaultRenderer.prototype.pRenderDepthPrepass = function (entityCollector) { - this._pDepthRenderer.disableColor = true; - if (this._pFilter3DRenderer) { + ContextWebGL.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { + if (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) { + this._samplerStates[sampler].wrap = this._wrapDictionary[wrap]; + this._samplerStates[sampler].filter = this._filterDictionary[filter]; + this._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter]; } else { - this._pDepthRenderer.textureRatioX = 1; - this._pDepthRenderer.textureRatioY = 1; - this._pDepthRenderer._iRender(entityCollector); + throw "Sampler is out of bounds."; } - this._pDepthRenderer.disableColor = false; }; - /** - * - */ - DefaultRenderer.prototype.pRenderSceneDepthToTexture = function (entityCollector) { - if (this._pDepthTextureInvalid || !this._pDepthRender) - this.initDepthTexture(this._pStage.context); - this._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX; - this._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY; - this._pDepthRenderer._iRender(entityCollector, this._pDepthRender); + ContextWebGL.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } + var location = this._currentProgram ? this._gl.getAttribLocation(this._currentProgram.glProgram, "va" + index) : -1; + if (!buffer) { + if (location > -1) + this._gl.disableVertexAttribArray(location); + return; + } + this._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer); + this._gl.enableVertexAttribArray(location); + this._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex * 4, bufferOffset * 4); }; - /** - * Updates the backbuffer dimensions. - */ - DefaultRenderer.prototype.pUpdateBackBuffer = function () { - // No reason trying to configure back buffer if there is no context available. - // Doing this anyway (and relying on _stage to cache width/height for - // context does get available) means usesSoftwareRendering won't be reliable. - if (this._pStage.context && !this._shareContext) { - if (this._width && this._height) { - this._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true); - this._pBackBufferInvalid = false; - } + ContextWebGL.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + var texture = target; + var frameBuffer = texture.frameBuffer; + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer); + if (enableDepthAndStencil) { + this._gl.enable(this._gl.STENCIL_TEST); + this._gl.enable(this._gl.DEPTH_TEST); } + this._gl.viewport(0, 0, texture.width, texture.height); }; - DefaultRenderer.prototype.iSetStage = function (value) { - _super.prototype.iSetStage.call(this, value); - this._pDistanceRenderer.iSetStage(value); - this._pDepthRenderer.iSetStage(value); + ContextWebGL.prototype.setRenderToBackBuffer = function () { + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); }; - /** - * - */ - DefaultRenderer.prototype.initDepthTexture = function (context) { - this._pDepthTextureInvalid = false; - if (this._pDepthRender) - this._pDepthRender.dispose(); - this._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight); + ContextWebGL.prototype.updateBlendStatus = function () { + if (this._blendEnabled) { + this._gl.enable(this._gl.BLEND); + this._gl.blendEquation(this._gl.FUNC_ADD); + this._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor); + } + else { + this._gl.disable(this._gl.BLEND); + } }; - return DefaultRenderer; -})(RendererBase); -module.exports = DefaultRenderer; + ContextWebGL.MAX_SAMPLERS = 8; + ContextWebGL.modulo = 0; + return ContextWebGL; +})(ContextGLBase); +module.exports = ContextWebGL; -},{"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-core/lib/geom/Vector3D":undefined,"awayjs-core/lib/textures/RenderTexture":undefined,"awayjs-display/lib/pool/RenderablePool":undefined,"awayjs-stagegl/lib/core/pool/SkyboxRenderable":undefined,"awayjs-stagegl/lib/core/render/DepthRenderer":undefined,"awayjs-stagegl/lib/core/render/Filter3DRenderer":undefined,"awayjs-stagegl/lib/core/render/RendererBase":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/managers/RTTBufferManager":undefined,"awayjs-stagegl/lib/managers/StageManager":undefined,"awayjs-stagegl/lib/materials/passes/DepthMapPass":undefined,"awayjs-stagegl/lib/materials/passes/DistanceMapPass":undefined}],"awayjs-stagegl/lib/core/render/DepthRenderer":[function(require,module,exports){ +},{"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/ByteArray":undefined,"awayjs-stagegl/lib/base/ContextGLBase":undefined,"awayjs-stagegl/lib/base/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/base/ContextGLClearMask":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLProgramType":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTriangleFace":undefined,"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/base/CubeTextureWebGL":undefined,"awayjs-stagegl/lib/base/IndexBufferWebGL":undefined,"awayjs-stagegl/lib/base/ProgramWebGL":undefined,"awayjs-stagegl/lib/base/SamplerState":undefined,"awayjs-stagegl/lib/base/TextureWebGL":undefined,"awayjs-stagegl/lib/base/VertexBufferWebGL":undefined}],"awayjs-stagegl/lib/base/CubeTextureFlash":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -/** - * The DepthRenderer class renders 32-bit depth information encoded as RGBA - * - * @class away.render.DepthRenderer - */ -var DepthRenderer = (function (_super) { - __extends(DepthRenderer, _super); - /** - * Creates a new DepthRenderer object. - * @param renderBlended Indicates whether semi-transparent objects should be rendered. - * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based - */ - function DepthRenderer(pass, renderBlended) { - if (renderBlended === void 0) { renderBlended = false; } +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var CubeTextureFlash = (function (_super) { + __extends(CubeTextureFlash, _super); + function CubeTextureFlash(context, size, format, forRTT, streaming) { + if (streaming === void 0) { streaming = false; } _super.call(this); - this._pass = pass; - this._renderBlended = renderBlended; - this._iBackgroundR = 1; - this._iBackgroundG = 1; - this._iBackgroundB = 1; + this._context = context; + this._size = size; + this._context.addStream(String.fromCharCode(OpCodes.initCubeTexture, (forRTT ? OpCodes.trueValue : OpCodes.falseValue)) + size + "," + streaming + "," + format + "$"); + this._pId = this._context.execute(); + this._context._iAddResource(this); } - Object.defineProperty(DepthRenderer.prototype, "disableColor", { + Object.defineProperty(CubeTextureFlash.prototype, "size", { get: function () { - return this._disableColor; - }, - set: function (value) { - this._disableColor = value; + return this._size; }, enumerable: true, configurable: true }); - DepthRenderer.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { - this.pCollectRenderables(entityCollector); - this._pContext.setRenderTarget(target, true, 0); - this._pContext.clear(1, 1, 1, 1, 1, 0); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); - var head = this._pOpaqueRenderableHead; - var first = true; - for (var i = numCascades - 1; i >= 0; --i) { - this._pStage.scissorRect = scissorRects[i]; - this.drawCascadeRenderables(head, cameras[i], first ? null : cameras[i].frustumPlanes); - first = false; - } - //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! - this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); - this._pStage.scissorRect = null; + CubeTextureFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeCubeTexture) + this._pId.toString() + ","); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; }; - DepthRenderer.prototype.drawCascadeRenderables = function (renderable, camera, cullPlanes) { - var activePass; - var activeMaterial; - var context = this._pStage.context; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); - //TODO: generalise this test - if (activePass.key == "") - this._pContext.calcAnimationCode(renderable.material, activePass); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - // if completely in front, it will fall in a different cascade - // do not use near and far planes - if (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) { - renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - } - else { - renderable2.cascaded = true; - } - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded); - renderable.material._iDeactivatePass(activePass, this._pStage); - renderable = renderable2; + CubeTextureFlash.prototype.uploadFromData = function (data, side, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) { + data = data.imageData.data; + } + else if (data instanceof HTMLImageElement) { + var can = document.createElement("canvas"); + var w = data.width; + var h = data.height; + can.width = w; + can.height = h; + var ctx = can.getContext("2d"); + ctx.drawImage(data, 0, 0); + data = ctx.getImageData(0, 0, w, h).data; } + var pos = 0; + var bytes = ByteArrayBase.internalGetBase64String(data.length, function () { + return data[pos++]; + }, null); + this._context.addStream(String.fromCharCode(OpCodes.uploadBytesCubeTexture) + this._pId + "," + miplevel + "," + side + "," + (this.size >> miplevel) + "," + bytes + "%"); + this._context.execute(); }; - /** - * @inheritDoc - */ - DepthRenderer.prototype.pDraw = function (entityCollector, target) { - this.pCollectRenderables(entityCollector); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - if (this._disableColor) - this._pContext.setColorMask(false, false, false, false); - if (this._renderBlended) - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); - if (this._disableColor) - this._pContext.setColorMask(true, true, true, true); + CubeTextureFlash.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { + if (async === void 0) { async = false; } }; - /** - * Draw a list of renderables. - * @param renderables The renderables to draw. - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DepthRenderer.prototype.drawRenderables = function (renderable, entityCollector) { - var activePass; - var activeMaterial; - var context = this._pStage.context; - var camera = entityCollector.camera; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - // otherwise this would result in depth rendered anyway because fragment shader kil is ignored - if (this._disableColor && renderable.material.alphaThreshold != 0) { - renderable2 = renderable; - do { - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - } - else { - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); - //TODO: generalise this test - if (activePass.key == "") - this._pContext.calcAnimationCode(renderable.material, activePass); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - renderable.material._iDeactivatePass(activePass, this._pStage); - } - renderable = renderable2; - } + return CubeTextureFlash; +})(ResourceBaseFlash); +module.exports = CubeTextureFlash; + + +},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/utils/ByteArrayBase":undefined,"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/base/CubeTextureWebGL":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); +var CubeTextureWebGL = (function (_super) { + __extends(CubeTextureWebGL, _super); + function CubeTextureWebGL(gl, size) { + _super.call(this, gl); + this._textureSelectorDictionary = new Array(6); + this.textureType = "textureCube"; + this._size = size; + this._texture = this._gl.createTexture(); + this._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X; + this._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X; + this._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y; + this._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y; + this._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z; + this._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z; + } + CubeTextureWebGL.prototype.dispose = function () { + this._gl.deleteTexture(this._texture); }; - return DepthRenderer; -})(RendererBase); -module.exports = DepthRenderer; + CubeTextureWebGL.prototype.uploadFromData = function (data, side, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) + data = data.imageData; + this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture); + this._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); + this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null); + }; + CubeTextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { + if (async === void 0) { async = false; } + }; + Object.defineProperty(CubeTextureWebGL.prototype, "size", { + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CubeTextureWebGL.prototype, "glTexture", { + get: function () { + return this._texture; + }, + enumerable: true, + configurable: true + }); + return CubeTextureWebGL; +})(TextureBaseWebGL); +module.exports = CubeTextureWebGL; -},{"awayjs-stagegl/lib/core/render/RendererBase":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined}],"awayjs-stagegl/lib/core/render/Filter3DRenderer":[function(require,module,exports){ -var Event = require("awayjs-core/lib/events/Event"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); -/** - * @class away.render.Filter3DRenderer - */ -var Filter3DRenderer = (function () { - function Filter3DRenderer(stage) { - var _this = this; - this._filterSizesInvalid = true; - this._onRTTResizeDelegate = function (event) { return _this.onRTTResize(event); }; - this._stage = stage; - this._rttManager = RTTBufferManager.getInstance(stage); - this._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate); +},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-stagegl/lib/base/TextureBaseWebGL":undefined}],"awayjs-stagegl/lib/base/IContextStageGL":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/ICubeTexture":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/IIndexBuffer":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/IProgram":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/ITextureBase":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/ITexture":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/IVertexBuffer":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/base/IndexBufferFlash":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var IndexBufferFlash = (function (_super) { + __extends(IndexBufferFlash, _super); + function IndexBufferFlash(context, numIndices) { + _super.call(this); + this._context = context; + this._numIndices = numIndices; + this._context.addStream(String.fromCharCode(OpCodes.initIndexBuffer, numIndices + OpCodes.intMask)); + this._pId = this._context.execute(); + this._context._iAddResource(this); } - Filter3DRenderer.prototype.onRTTResize = function (event) { - this._filterSizesInvalid = true; + IndexBufferFlash.prototype.uploadFromArray = function (data, startOffset, count) { + this._context.addStream(String.fromCharCode(OpCodes.uploadArrayIndexBuffer, this._pId + OpCodes.intMask) + data.join() + "#" + startOffset + "," + count + ","); + this._context.execute(); }; - Object.defineProperty(Filter3DRenderer.prototype, "requireDepthRender", { + IndexBufferFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeIndexBuffer, this._pId + OpCodes.intMask)); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; + }; + Object.defineProperty(IndexBufferFlash.prototype, "numIndices", { get: function () { - return this._requireDepthRender; + return this._numIndices; }, enumerable: true, configurable: true }); - Filter3DRenderer.prototype.getMainInputTexture = function (stage) { - if (this._filterTasksInvalid) { - this.updateFilterTasks(stage); - } - return this._mainInputTexture; + return IndexBufferFlash; +})(ResourceBaseFlash); +module.exports = IndexBufferFlash; + + +},{"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/base/IndexBufferWebGL":[function(require,module,exports){ +var IndexBufferWebGL = (function () { + function IndexBufferWebGL(gl, numIndices) { + this._gl = gl; + this._buffer = this._gl.createBuffer(); + this._numIndices = numIndices; + } + IndexBufferWebGL.prototype.uploadFromArray = function (data, startOffset, count) { + this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer); + // TODO add index offsets + this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW); }; - Object.defineProperty(Filter3DRenderer.prototype, "filters", { + IndexBufferWebGL.prototype.dispose = function () { + this._gl.deleteBuffer(this._buffer); + }; + Object.defineProperty(IndexBufferWebGL.prototype, "numIndices", { get: function () { - return this._filters; + return this._numIndices; }, - set: function (value) { - this._filters = value; - this._filterTasksInvalid = true; - this._requireDepthRender = false; - if (!this._filters) { - return; - } - for (var i = 0; i < this._filters.length; ++i) { - // TODO: check logic: - // this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender ) - var s = this._filters[i]; - var b = (s.requireDepthRender == null) ? false : s.requireDepthRender; - this._requireDepthRender = this._requireDepthRender || b; - } - this._filterSizesInvalid = true; + enumerable: true, + configurable: true + }); + Object.defineProperty(IndexBufferWebGL.prototype, "glBuffer", { + get: function () { + return this._buffer; }, enumerable: true, configurable: true }); - Filter3DRenderer.prototype.updateFilterTasks = function (stage) { - var len; - if (this._filterSizesInvalid) { - this.updateFilterSizes(); - } - if (!this._filters) { - this._tasks = null; - return; - } - this._tasks = new Array(); - len = this._filters.length - 1; - var filter; - for (var i = 0; i <= len; ++i) { - // make sure all internal tasks are linked together - filter = this._filters[i]; - // TODO: check logic - // filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage); - filter.setRenderTargets(i == len ? null : this._filters[i + 1].getMainInputTexture(stage), stage); - this._tasks = this._tasks.concat(filter.tasks); - } - this._mainInputTexture = this._filters[0].getMainInputTexture(stage); + return IndexBufferWebGL; +})(); +module.exports = IndexBufferWebGL; + + +},{}],"awayjs-stagegl/lib/base/OpCodes":[function(require,module,exports){ +var OpCodes = (function () { + function OpCodes() { + } + OpCodes.trueValue = 32; + OpCodes.falseValue = 33; + OpCodes.intMask = 63; + OpCodes.drawTriangles = 41; + OpCodes.setProgramConstant = 42; + OpCodes.setProgram = 43; + OpCodes.present = 44; + OpCodes.clear = 45; + OpCodes.initProgram = 46; + OpCodes.initVertexBuffer = 47; + OpCodes.initIndexBuffer = 48; + OpCodes.configureBackBuffer = 49; + OpCodes.uploadArrayIndexBuffer = 50; + OpCodes.uploadArrayVertexBuffer = 51; + OpCodes.uploadAGALBytesProgram = 52; + OpCodes.setVertexBufferAt = 53; + OpCodes.uploadBytesIndexBuffer = 54; + OpCodes.uploadBytesVertexBuffer = 55; + OpCodes.setColorMask = 56; + OpCodes.setDepthTest = 57; + OpCodes.disposeProgram = 58; + OpCodes.disposeContext = 59; + // must skip 60 '<' as it will invalidate xml being passed over the bridge + OpCodes.disposeVertexBuffer = 61; + // must skip 62 '>' as it will invalidate xml being passed over the bridge + OpCodes.disposeIndexBuffer = 63; + OpCodes.initTexture = 64; + OpCodes.setTextureAt = 65; + OpCodes.uploadBytesTexture = 66; + OpCodes.disposeTexture = 67; + OpCodes.setCulling = 68; + OpCodes.setScissorRect = 69; + OpCodes.clearScissorRect = 70; + OpCodes.setBlendFactors = 71; + OpCodes.setRenderToTexture = 72; + OpCodes.clearTextureAt = 73; + OpCodes.clearVertexBufferAt = 74; + OpCodes.setStencilActions = 75; + OpCodes.setStencilReferenceValue = 76; + OpCodes.initCubeTexture = 77; + OpCodes.disposeCubeTexture = 78; + OpCodes.uploadBytesCubeTexture = 79; + OpCodes.clearRenderToTexture = 80; + OpCodes.enableErrorChecking = 81; + return OpCodes; +})(); +module.exports = OpCodes; + + +},{}],"awayjs-stagegl/lib/base/ProgramFlash":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var ProgramFlash = (function (_super) { + __extends(ProgramFlash, _super); + function ProgramFlash(context) { + _super.call(this); + this._context = context; + this._context.addStream(String.fromCharCode(OpCodes.initProgram)); + this._pId = this._context.execute(); + this._context._iAddResource(this); + } + ProgramFlash.prototype.upload = function (vertexProgram, fragmentProgram) { + this._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + "%" + fragmentProgram.readBase64String(fragmentProgram.length) + "%"); + if (ContextStage3D.debug) + this._context.execute(); }; - Filter3DRenderer.prototype.render = function (stage, camera, depthTexture) { - var len; - var i; - var task; - var context = stage.context; - var indexBuffer = this._rttManager.indexBuffer; - var vertexBuffer = this._rttManager.renderToTextureVertexBuffer; - if (!this._filters) { + ProgramFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask)); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; + }; + return ProgramFlash; +})(ResourceBaseFlash); +module.exports = ProgramFlash; + + +},{"awayjs-stagegl/lib/base/ContextStage3D":undefined,"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/base/ProgramWebGL":[function(require,module,exports){ +var AGALTokenizer = require("awayjs-stagegl/lib/aglsl/AGALTokenizer"); +var AGLSLParser = require("awayjs-stagegl/lib/aglsl/AGLSLParser"); +var ProgramWebGL = (function () { + function ProgramWebGL(gl) { + this._gl = gl; + this._program = this._gl.createProgram(); + } + ProgramWebGL.prototype.upload = function (vertexProgram, fragmentProgram) { + var vertexString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram)); + var fragmentString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram)); + this._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER); + this._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER); + this._gl.shaderSource(this._vertexShader, vertexString); + this._gl.compileShader(this._vertexShader); + if (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) { + throw new Error(this._gl.getShaderInfoLog(this._vertexShader)); return; } - if (this._filterSizesInvalid) { - this.updateFilterSizes(); - } - if (this._filterTasksInvalid) { - this.updateFilterTasks(stage); - } - len = this._filters.length; - for (i = 0; i < len; ++i) { - this._filters[i].update(stage, camera); - } - len = this._tasks.length; - if (len > 1) { - context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); + this._gl.shaderSource(this._fragmentShader, fragmentString); + this._gl.compileShader(this._fragmentShader); + if (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) { + throw new Error(this._gl.getShaderInfoLog(this._fragmentShader)); + return; } - for (i = 0; i < len; ++i) { - task = this._tasks[i]; - //stage.setRenderTarget(task.target); //TODO - if (!task.target) { - stage.scissorRect = null; - vertexBuffer = this._rttManager.renderToScreenVertexBuffer; - context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); - } - context.setTextureAt(0, task.getMainInputTexture(stage)); - context.setProgram(task.getProgram(stage)); - context.clear(0.0, 0.0, 0.0, 0.0); - task.activate(stage, camera, depthTexture); - context.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - context.drawTriangles(indexBuffer, 0, 2); - task.deactivate(stage); + this._gl.attachShader(this._program, this._vertexShader); + this._gl.attachShader(this._program, this._fragmentShader); + this._gl.linkProgram(this._program); + if (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) { + throw new Error(this._gl.getProgramInfoLog(this._program)); } - context.setTextureAt(0, null); - context.setVertexBufferAt(0, null); - context.setVertexBufferAt(1, null); }; - Filter3DRenderer.prototype.updateFilterSizes = function () { - for (var i = 0; i < this._filters.length; ++i) { - this._filters[i].textureWidth = this._rttManager.textureWidth; - this._filters[i].textureHeight = this._rttManager.textureHeight; - } - this._filterSizesInvalid = true; + ProgramWebGL.prototype.dispose = function () { + this._gl.deleteProgram(this._program); }; - Filter3DRenderer.prototype.dispose = function () { - this._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate); - this._rttManager = null; - this._stage = null; + ProgramWebGL.prototype.focusProgram = function () { + this._gl.useProgram(this._program); }; - return Filter3DRenderer; + Object.defineProperty(ProgramWebGL.prototype, "glProgram", { + get: function () { + return this._program; + }, + enumerable: true, + configurable: true + }); + ProgramWebGL._tokenizer = new AGALTokenizer(); + ProgramWebGL._aglslParser = new AGLSLParser(); + return ProgramWebGL; })(); -module.exports = Filter3DRenderer; +module.exports = ProgramWebGL; + + +},{"awayjs-stagegl/lib/aglsl/AGALTokenizer":undefined,"awayjs-stagegl/lib/aglsl/AGLSLParser":undefined}],"awayjs-stagegl/lib/base/ResourceBaseFlash":[function(require,module,exports){ +var ResourceBaseFlash = (function () { + function ResourceBaseFlash() { + } + Object.defineProperty(ResourceBaseFlash.prototype, "id", { + get: function () { + return this._pId; + }, + enumerable: true, + configurable: true + }); + ResourceBaseFlash.prototype.dispose = function () { + }; + return ResourceBaseFlash; +})(); +module.exports = ResourceBaseFlash; + + +},{}],"awayjs-stagegl/lib/base/SamplerState":[function(require,module,exports){ +var SamplerState = (function () { + function SamplerState() { + } + return SamplerState; +})(); +module.exports = SamplerState; -},{"awayjs-core/lib/events/Event":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat":undefined,"awayjs-stagegl/lib/managers/RTTBufferManager":undefined}],"awayjs-stagegl/lib/core/render/RendererBase":[function(require,module,exports){ +},{}],"awayjs-stagegl/lib/base/Stage":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); -var Point = require("awayjs-core/lib/geom/Point"); var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var Event = require("awayjs-core/lib/events/Event"); var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); -var RenderableMergeSort = require("awayjs-display/lib/sort/RenderableMergeSort"); -var RendererEvent = require("awayjs-display/lib/events/RendererEvent"); +var CSS = require("awayjs-core/lib/utils/CSS"); +var ContextMode = require("awayjs-display/lib/display/ContextMode"); var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); -var BillboardRenderable = require("awayjs-stagegl/lib/core/pool/BillboardRenderable"); -var LineSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/LineSubMeshRenderable"); -var TriangleSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +var ContextWebGL = require("awayjs-stagegl/lib/base/ContextWebGL"); /** - * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the - * contents of a partition + * Stage provides a proxy class to handle the creation and attachment of the Context + * (and in turn the back buffer) it uses. Stage should never be created directly, + * but requested through StageManager. + * + * @see away.managers.StageManager * - * @class away.render.RendererBase */ -var RendererBase = (function (_super) { - __extends(RendererBase, _super); - /** - * Creates a new RendererBase object. - */ - function RendererBase() { - var _this = this; - _super.call(this); - this._viewPort = new Rectangle(); - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this._depthPrepass = false; - this._backgroundR = 0; - this._backgroundG = 0; - this._backgroundB = 0; - this._backgroundAlpha = 1; - this._shareContext = false; - this.textureRatioX = 1; - this.textureRatioY = 1; - this._pRttViewProjectionMatrix = new Matrix3D(); - this._localPos = new Point(); - this._globalPos = new Point(); - this._pScissorRect = new Rectangle(); - this._pNumTriangles = 0; - this._onViewportUpdatedDelegate = function (event) { return _this.onViewportUpdated(event); }; - this._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable); - this._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable); - this._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable); - this._onContextUpdateDelegate = function (event) { return _this.onContextUpdate(event); }; - //default sorting algorithm - this.renderableSorter = new RenderableMergeSort(); +var Stage = (function (_super) { + __extends(Stage, _super); + function Stage(container, stageIndex, stageManager, forceSoftware, profile) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + _super.call(this); + this._x = 0; + this._y = 0; + //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame + this._stageIndex = -1; + this._antiAlias = 0; + //private var _activeVertexBuffers : Vector. = new Vector.(8, true); + //private var _activeTextures : Vector. = new Vector.(8, true); + this._renderTarget = null; + this._renderSurfaceSelector = 0; + //private _mouse3DManager:away.managers.Mouse3DManager; + //private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager + this._initialised = false; + this._container = container; + this._stageIndex = stageIndex; + this._stageManager = stageManager; + this._viewPort = new Rectangle(); + this._enableDepthAndStencil = true; + CSS.setElementX(this._container, 0); + CSS.setElementY(this._container, 0); + this.visible = true; } - Object.defineProperty(RendererBase.prototype, "numTriangles", { - /** - * - */ - get: function () { - return this._pNumTriangles; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "viewPort", { + /** + * Requests a Context object to attach to the managed gl canvas. + */ + Stage.prototype.requestContext = function (forceSoftware, profile, mode) { + // If forcing software, we can be certain that the + // returned Context will be running software mode. + // If not, we can't be sure and should stick to the + // old value (will likely be same if re-requesting.) + var _this = this; + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } + if (this._usesSoftwareRendering != null) + this._usesSoftwareRendering = forceSoftware; + this._profile = profile; + try { + if (mode == ContextMode.FLASH) + new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); + else + this._context = new ContextWebGL(this._container, this._stageIndex); + } + catch (e) { + try { + if (mode == ContextMode.AUTO) + new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); + else + this.dispatchEvent(new Event(Event.ERROR)); + } + catch (e) { + this.dispatchEvent(new Event(Event.ERROR)); + } + } + if (this._context) + this._callback(this._context); + }; + Object.defineProperty(Stage.prototype, "width", { /** - * A viewPort rectangle equivalent of the Stage size and position. + * The width of the gl canvas */ get: function () { - return this._viewPort; + return this._width; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "scissorRect", { - /** - * A scissor rectangle equivalent of the view size and position. - */ - get: function () { - return this._pScissorRect; + set: function (val) { + if (this._width == val) + return; + CSS.setElementWidth(this._container, val); + this._width = this._viewPort.width = val; + this._backBufferDirty = true; + this.notifyViewportUpdated(); }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "x", { + Object.defineProperty(Stage.prototype, "height", { /** - * + * The height of the gl canvas */ get: function () { - return this._localPos.x; + return this._height; }, - set: function (value) { - if (this.x == value) + set: function (val) { + if (this._height == val) return; - this._globalPos.x = this._localPos.x = value; - this.updateGlobalPos(); + CSS.setElementHeight(this._container, val); + this._height = this._viewPort.height = val; + this._backBufferDirty = true; + this.notifyViewportUpdated(); }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "y", { + Object.defineProperty(Stage.prototype, "x", { /** - * + * The x position of the gl canvas */ get: function () { - return this._localPos.y; + return this._x; }, - set: function (value) { - if (this.y == value) + set: function (val) { + if (this._x == val) return; - this._globalPos.y = this._localPos.y = value; - this.updateGlobalPos(); + CSS.setElementX(this._container, val); + this._x = this._viewPort.x = val; + this.notifyViewportUpdated(); }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "width", { + Object.defineProperty(Stage.prototype, "y", { /** - * + * The y position of the gl canvas */ get: function () { - return this._width; + return this._y; }, - set: function (value) { - if (this._width == value) + set: function (val) { + if (this._y == val) return; - this._width = value; - this._pScissorRect.width = value; - if (this._pRttBufferManager) - this._pRttBufferManager.viewWidth = value; - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this.notifyScissorUpdate(); + CSS.setElementY(this._container, val); + this._y = this._viewPort.y = val; + this.notifyViewportUpdated(); }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "height", { - /** - * - */ + Object.defineProperty(Stage.prototype, "visible", { get: function () { - return this._height; + return CSS.getElementVisibility(this._container); }, - set: function (value) { - if (this._height == value) - return; - this._height = value; - this._pScissorRect.height = value; - if (this._pRttBufferManager) - this._pRttBufferManager.viewHeight = value; - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this.notifyScissorUpdate(); + set: function (val) { + CSS.setElementVisibility(this._container, val); }, enumerable: true, configurable: true }); - RendererBase.prototype._iCreateEntityCollector = function () { - return new EntityCollector(); - }; - Object.defineProperty(RendererBase.prototype, "_iBackgroundR", { - /** - * The background color's red component, used when clearing. - * - * @private - */ + Object.defineProperty(Stage.prototype, "container", { get: function () { - return this._backgroundR; - }, - set: function (value) { - if (this._backgroundR == value) - return; - this._backgroundR = value; - this._pBackBufferInvalid = true; + return this._container; }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "_iBackgroundG", { + Object.defineProperty(Stage.prototype, "context", { /** - * The background color's green component, used when clearing. - * - * @private + * The Context object associated with the given stage object. */ get: function () { - return this._backgroundG; - }, - set: function (value) { - if (this._backgroundG == value) - return; - this._backgroundG = value; - this._pBackBufferInvalid = true; + return this._context; }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "_iBackgroundB", { - /** - * The background color's blue component, used when clearing. - * - * @private - */ + Stage.prototype.notifyViewportUpdated = function () { + if (this._viewportDirty) + return; + this._viewportDirty = true; + //if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED)) + //return; + //if (!_viewportUpdated) + this._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED); + this.dispatchEvent(this._viewportUpdated); + }; + Stage.prototype.notifyEnterFrame = function () { + //if (!hasEventListener(Event.ENTER_FRAME)) + //return; + if (!this._enterFrame) + this._enterFrame = new Event(Event.ENTER_FRAME); + this.dispatchEvent(this._enterFrame); + }; + Stage.prototype.notifyExitFrame = function () { + //if (!hasEventListener(Event.EXIT_FRAME)) + //return; + if (!this._exitFrame) + this._exitFrame = new Event(Event.EXIT_FRAME); + this.dispatchEvent(this._exitFrame); + }; + Object.defineProperty(Stage.prototype, "profile", { get: function () { - return this._backgroundB; - }, - set: function (value) { - if (this._backgroundB == value) - return; - this._backgroundB = value; - this._pBackBufferInvalid = true; + return this._profile; }, enumerable: true, configurable: true }); - Object.defineProperty(RendererBase.prototype, "stage", { - /** - * The Stage that will provide the ContextGL used for rendering. + /** + * Disposes the Stage object, freeing the Context attached to the Stage. + */ + Stage.prototype.dispose = function () { + this._stageManager.iRemoveStage(this); + this.freeContext(); + this._stageManager = null; + this._stageIndex = -1; + }; + /** + * Configures the back buffer associated with the Stage object. + * @param backBufferWidth The width of the backbuffer. + * @param backBufferHeight The height of the backbuffer. + * @param antiAlias The amount of anti-aliasing to use. + * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer. + */ + Stage.prototype.configureBackBuffer = function (backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil) { + this.width = backBufferWidth; + this.height = backBufferHeight; + this._antiAlias = antiAlias; + this._enableDepthAndStencil = enableDepthAndStencil; + if (this._context) + this._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil); + }; + Object.defineProperty(Stage.prototype, "enableDepthAndStencil", { + /* + * Indicates whether the depth and stencil buffer is used */ get: function () { - return this._pStage; + return this._enableDepthAndStencil; }, - set: function (value) { - if (value == this._pStage) - return; - this.iSetStage(value); + set: function (enableDepthAndStencil) { + this._enableDepthAndStencil = enableDepthAndStencil; + this._backBufferDirty = true; }, enumerable: true, configurable: true }); - RendererBase.prototype.iSetStage = function (value) { - if (this._pStage) { - this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - } - if (!value) { - this._pStage = null; - this._pContext = null; - } - else { - this._pStage = value; - this._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - /* - if (_backgroundImageRenderer) - _backgroundImageRenderer.stage = value; - */ - if (this._pStage.context) - this._pContext = this._pStage.context; - } - this._pBackBufferInvalid = true; - this.updateGlobalPos(); - }; - Object.defineProperty(RendererBase.prototype, "shareContext", { - /** - * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks - * to share the same ContextGL object. - */ + Object.defineProperty(Stage.prototype, "renderTarget", { get: function () { - return this._shareContext; + return this._renderTarget; }, - set: function (value) { - if (this._shareContext == value) - return; - this._shareContext = value; - this.updateGlobalPos(); + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "renderSurfaceSelector", { + get: function () { + return this._renderSurfaceSelector; }, enumerable: true, configurable: true }); - /** - * Disposes the resources used by the RendererBase. - */ - RendererBase.prototype.dispose = function () { - if (this._pRttBufferManager) - this._pRttBufferManager.dispose(); - this._pRttBufferManager = null; - this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - this._pStage = null; - /* - if (_backgroundImageRenderer) { - _backgroundImageRenderer.dispose(); - _backgroundImageRenderer = null; - } - */ - }; - RendererBase.prototype.render = function (entityCollector) { - this._viewportDirty = false; - this._scissorDirty = false; - }; - /** - * Renders the potentially visible geometry to the back buffer or texture. - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - * @param target An option target texture to render to. - * @param surfaceSelector The index of a CubeTexture's face to render to. - * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. + /* + * Clear and reset the back buffer when using a shared context */ - RendererBase.prototype._iRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - //TODO refactor setTarget so that rendertextures are created before this check - if (!this._pStage || !this._pContext) + Stage.prototype.clear = function () { + if (!this._context) return; - this._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection); - this._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1); - this.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector); - for (var i = 0; i < 8; ++i) { - this._pContext.setVertexBufferAt(i, null); - this._pContext.setTextureAt(i, null); - } - }; - RendererBase.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { - }; - RendererBase.prototype.pCollectRenderables = function (entityCollector) { - //reset head values - this._pBlendedRenderableHead = null; - this._pOpaqueRenderableHead = null; - this._pNumTriangles = 0; - //grab entity head - var item = entityCollector.entityHead; - //set temp values for entry point and camera forward vector - this._pCamera = entityCollector.camera; - this._iEntryPoint = this._pCamera.scenePosition; - this._pCameraForward = this._pCamera.transform.forwardVector; - while (item) { - item.entity._iCollectRenderables(this); - item = item.next; + if (this._backBufferDirty) { + this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + this._backBufferDirty = false; } - //sort the resulting renderables - this._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead); - this._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead); + this._context.clear((this._color & 0xff000000) >>> 24, (this._color & 0xff0000) >>> 16, (this._color & 0xff00) >>> 8, this._color & 0xff); + this._bufferClear = true; }; /** - * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up. + * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode. + * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority. * - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - * @param target An option target texture to render to. - * @param surfaceSelector The index of a CubeTexture's face to render to. - * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. + * @param type The type of event. + * @param listener The listener function that processes the event. + * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false. + * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0. + * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not. */ - RendererBase.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - this._pContext.setRenderTarget(target, true, surfaceSelector); - if ((target || !this._shareContext) && !this._depthPrepass) - this._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0); - this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); - this._pStage.scissorRect = scissorRect; - /* - if (_backgroundImageRenderer) - _backgroundImageRenderer.render(); + Stage.prototype.addEventListener = function (type, listener) { + _super.prototype.addEventListener.call(this, type, listener); + //away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame'); + //if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ + //_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); + //} + /* Original code + if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ + + _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); + + + } */ - this.pDraw(entityCollector, target); - //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! - //this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie - if (!this._shareContext) { - if (this._snapshotRequired && this._snapshotBitmapData) { - this._pContext.drawToBitmapData(this._snapshotBitmapData); - this._snapshotRequired = false; - } - } - this._pStage.scissorRect = null; - }; - /* - * Will draw the renderer's output on next render to the provided bitmap data. - * */ - RendererBase.prototype.queueSnapshot = function (bmd) { - this._snapshotRequired = true; - this._snapshotBitmapData = bmd; - }; - /** - * Performs the actual drawing of geometry to the target. - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - */ - RendererBase.prototype.pDraw = function (entityCollector, target) { - throw new AbstractMethodError(); }; /** - * Assign the context once retrieved + * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode. + * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect. + * + * @param type The type of event. + * @param listener The listener object to remove. + * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false. */ - RendererBase.prototype.onContextUpdate = function (event) { - this._pContext = this._pStage.context; + Stage.prototype.removeEventListener = function (type, listener) { + _super.prototype.removeEventListener.call(this, type, listener); + /* + // Remove the main rendering listener if no EnterFrame listeners remain + if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this ) + && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME)) + { + + //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this ); + + } + */ }; - Object.defineProperty(RendererBase.prototype, "_iBackgroundAlpha", { + Object.defineProperty(Stage.prototype, "scissorRect", { get: function () { - return this._backgroundAlpha; + return this._scissorRect; }, set: function (value) { - if (this._backgroundAlpha == value) - return; - this._backgroundAlpha = value; - this._pBackBufferInvalid = true; + this._scissorRect = value; + this._context.setScissorRectangle(this._scissorRect); }, enumerable: true, configurable: true }); - /* - public get iBackground():Texture2DBase - { - return this._background; - } - */ - /* - public set iBackground(value:Texture2DBase) - { - if (this._backgroundImageRenderer && !value) { - this._backgroundImageRenderer.dispose(); - this._backgroundImageRenderer = null; - } - - if (!this._backgroundImageRenderer && value) + Object.defineProperty(Stage.prototype, "stageIndex", { + /** + * The index of the Stage which is managed by this instance of StageProxy. + */ + get: function () { + return this._stageIndex; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "usesSoftwareRendering", { + /** + * Indicates whether the Stage managed by this proxy is running in software mode. + * Remember to wait for the CONTEXT_CREATED event before checking this property, + * as only then will it be guaranteed to be accurate. + */ + get: function () { + return this._usesSoftwareRendering; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "antiAlias", { + /** + * The antiAliasing of the Stage. + */ + get: function () { + return this._antiAlias; + }, + set: function (antiAlias) { + this._antiAlias = antiAlias; + this._backBufferDirty = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "viewPort", { + /** + * A viewPort rectangle equivalent of the Stage size and position. + */ + get: function () { + this._viewportDirty = false; + return this._viewPort; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "color", { + /** + * The background color of the Stage. + */ + get: function () { + return this._color; + }, + set: function (color) { + this._color = color; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "bufferClear", { + /** + * The freshly cleared state of the backbuffer before any rendering + */ + get: function () { + return this._bufferClear; + }, + set: function (newBufferClear) { + this._bufferClear = newBufferClear; + }, + enumerable: true, + configurable: true + }); + /* + * Access to fire mouseevents across multiple layered view3D instances + */ + // public get mouse3DManager():Mouse3DManager + // { + // return this._mouse3DManager; + // } + // + // public set mouse3DManager(value:Mouse3DManager) + // { + // this._mouse3DManager = value; + // } + /* TODO: implement dependency Touch3DManager + public get touch3DManager():Touch3DManager { - - this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage); - + return _touch3DManager; } - - this._background = value; - - if (this._backgroundImageRenderer) - this._backgroundImageRenderer.texture = value; - } - */ - /* - public get backgroundImageRenderer():BackgroundImageRenderer + public set touch3DManager(value:Touch3DManager) { - return _backgroundImageRenderer; + _touch3DManager = value; } */ /** - * @private - */ - RendererBase.prototype.notifyScissorUpdate = function () { - if (this._scissorDirty) - return; - this._scissorDirty = true; - if (!this._scissorUpdated) - this._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED); - this.dispatchEvent(this._scissorUpdated); - }; - /** - * @private - */ - RendererBase.prototype.notifyViewportUpdate = function () { - if (this._viewportDirty) - return; - this._viewportDirty = true; - if (!this._viewPortUpdated) - this._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED); - this.dispatchEvent(this._viewPortUpdated); - }; - /** - * - */ - RendererBase.prototype.onViewportUpdated = function (event) { - this._viewPort = this._pStage.viewPort; - //TODO stop firing viewport updated for every stagegl viewport change - if (this._shareContext) { - this._pScissorRect.x = this._globalPos.x - this._pStage.x; - this._pScissorRect.y = this._globalPos.y - this._pStage.y; - this.notifyScissorUpdate(); - } - this.notifyViewportUpdate(); - }; - /** - * + * Frees the Context associated with this StageProxy. */ - RendererBase.prototype.updateGlobalPos = function () { - if (this._shareContext) { - this._pScissorRect.x = this._globalPos.x - this._viewPort.x; - this._pScissorRect.y = this._globalPos.y - this._viewPort.y; - } - else { - this._pScissorRect.x = 0; - this._pScissorRect.y = 0; - this._viewPort.x = this._globalPos.x; - this._viewPort.y = this._globalPos.y; + Stage.prototype.freeContext = function () { + if (this._context) { + this._context.dispose(); + this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); } - this.notifyScissorUpdate(); - }; - /** - * - * @param billboard - * @protected - */ - RendererBase.prototype.applyBillboard = function (billboard) { - this._applyRenderable(this._billboardRenderablePool.getItem(billboard)); + this._context = null; + this._initialised = false; }; /** - * - * @param triangleSubMesh + * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers. + * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance. */ - RendererBase.prototype.applyTriangleSubMesh = function (triangleSubMesh) { - this._applyRenderable(this._triangleSubMeshRenderablePool.getItem(triangleSubMesh)); + Stage.prototype.onEnterFrame = function (event) { + if (!this._context) + return; + // Clear the stage instance + this.clear(); + //notify the enterframe listeners + this.notifyEnterFrame(); + // Call the present() to render the frame + if (!this._context) + this._context.present(); + //notify the exitframe listeners + this.notifyExitFrame(); }; - /** - * - * @param lineSubMesh - */ - RendererBase.prototype.applyLineSubMesh = function (lineSubMesh) { - this._applyRenderable(this._lineSubMeshRenderablePool.getItem(lineSubMesh)); + Stage.prototype.recoverFromDisposal = function () { + if (!this._context) + return false; + //away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' ); + /* + if (this._iContext.driverInfo == "Disposed") + { + this._iContext = null; + this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); + return false; + + } + */ + return true; }; - /** - * - * @param renderable - * @protected - */ - RendererBase.prototype._applyRenderable = function (renderable) { - var material = renderable.materialOwner.material; - var entity = renderable.sourceEntity; - var position = entity.scenePosition; - if (!material) - material = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner); - //update material if invalidated - material._iUpdateMaterial(); - //set ids for faster referencing - renderable.material = material; - renderable.materialId = material._iMaterialId; - renderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId; - renderable.cascaded = false; - // project onto camera's z-axis - position = this._iEntryPoint.subtract(position); - renderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward); - //store reference to scene transform - renderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera); - if (material.requiresBlending) { - renderable.next = this._pBlendedRenderableHead; - this._pBlendedRenderableHead = renderable; - } - else { - renderable.next = this._pOpaqueRenderableHead; - this._pOpaqueRenderableHead = renderable; - } - this._pNumTriangles += renderable.numTriangles; - //handle any overflow for renderables with data that exceeds GPU limitations - if (renderable.overflow) - this._applyRenderable(renderable.overflow); + Stage.prototype._callback = function (context) { + this._context = context; + this._container = this._context.container; + // Only configure back buffer if width and height have been set, + // which they may not have been if View.render() has yet to be + // invoked for the first time. + if (this._width && this._height) + this._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + // Dispatch the appropriate event depending on whether context was + // created for the first time or recreated after a device loss. + this.dispatchEvent(new StageEvent(this._initialised ? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED)); + this._initialised = true; }; - return RendererBase; + return Stage; })(EventDispatcher); -module.exports = RendererBase; +module.exports = Stage; -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-core/lib/geom/Point":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-display/lib/events/RendererEvent":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-display/lib/pool/RenderablePool":undefined,"awayjs-display/lib/sort/RenderableMergeSort":undefined,"awayjs-display/lib/traverse/EntityCollector":undefined,"awayjs-stagegl/lib/core/pool/BillboardRenderable":undefined,"awayjs-stagegl/lib/core/pool/LineSubMeshRenderable":undefined,"awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager":undefined}],"awayjs-stagegl/lib/core/stagegl/ContextGLBase":[function(require,module,exports){ +},{"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/CSS":undefined,"awayjs-display/lib/display/ContextMode":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-stagegl/lib/base/ContextStage3D":undefined,"awayjs-stagegl/lib/base/ContextWebGL":undefined}],"awayjs-stagegl/lib/base/TextureBaseWebGL":[function(require,module,exports){ var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); -var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); -var TextureDataPool = require("awayjs-stagegl/lib/core/pool/TextureDataPool"); -var ProgramDataPool = require("awayjs-stagegl/lib/core/pool/ProgramDataPool"); -var MaterialDataPool = require("awayjs-stagegl/lib/core/pool/MaterialDataPool"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -/** - * Stage provides a proxy class to handle the creation and attachment of the Context - * (and in turn the back buffer) it uses. Stage should never be created directly, - * but requested through StageManager. - * - * @see away.managers.StageManager - * - */ -var ContextGLBase = (function () { - function ContextGLBase(stageIndex) { - this._programData = new Array(); - this._numUsedStreams = 0; - this._numUsedTextures = 0; - //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame - this._stageIndex = -1; - this._antiAlias = 0; - this._renderTarget = null; - this._renderSurfaceSelector = 0; - this._stageIndex = stageIndex; - this._texturePool = new TextureDataPool(this); - this._materialDataPool = new MaterialDataPool(this); - this._programDataPool = new ProgramDataPool(this); +var TextureBaseWebGL = (function () { + function TextureBaseWebGL(gl) { + this.textureType = ""; + this._gl = gl; } - Object.defineProperty(ContextGLBase.prototype, "container", { + TextureBaseWebGL.prototype.dispose = function () { + throw "Abstract method must be overridden."; + }; + Object.defineProperty(TextureBaseWebGL.prototype, "glTexture", { get: function () { - return this._pContainer; + throw new AbstractMethodError(); }, enumerable: true, configurable: true }); - ContextGLBase.prototype.setRenderTarget = function (target, enableDepthAndStencil, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - if (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil) - return; - this._renderTarget = target; - this._renderSurfaceSelector = surfaceSelector; - this._enableDepthAndStencil = enableDepthAndStencil; - if (target instanceof RenderTexture) { - this.setRenderToTexture(this.getRenderTexture(target), enableDepthAndStencil, this._antiAlias, surfaceSelector); - } - else { - this.setRenderToBackBuffer(); - this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - } - }; - ContextGLBase.prototype.getRenderTexture = function (textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) - textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); - return textureData.texture; + return TextureBaseWebGL; +})(); +module.exports = TextureBaseWebGL; + + +},{"awayjs-core/lib/errors/AbstractMethodError":undefined}],"awayjs-stagegl/lib/base/TextureFlash":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var TextureFlash = (function (_super) { + __extends(TextureFlash, _super); + function TextureFlash(context, width, height, format, forRTT, streaming) { + if (streaming === void 0) { streaming = false; } + _super.call(this); + this._context = context; + this._width = width; + this._height = height; + this._context.addStream(String.fromCharCode(OpCodes.initTexture, (forRTT ? OpCodes.trueValue : OpCodes.falseValue)) + width + "," + height + "," + streaming + "," + format + "$"); + this._pId = this._context.execute(); + this._context._iAddResource(this); + } + Object.defineProperty(TextureFlash.prototype, "width", { + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TextureFlash.prototype, "height", { + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + TextureFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeTexture) + this._pId.toString() + ","); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; }; - ContextGLBase.prototype.getProgram = function (materialPassData) { - //check key doesn't need re-concatenating - if (!materialPassData.key.length) { - materialPassData.key = materialPassData.animationVertexCode + materialPassData.vertexCode + "---" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode; - } - else { - return materialPassData.programData; + TextureFlash.prototype.uploadFromData = function (data, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) { + data = data.imageData.data; } - var programData = this._programDataPool.getItem(materialPassData.key); - //check program data hasn't changed, keep count of program usages - if (materialPassData.programData != programData) { - if (materialPassData.programData) - materialPassData.programData.dispose(); - materialPassData.programData = programData; - programData.usages++; + else if (data instanceof HTMLImageElement) { + var can = document.createElement("canvas"); + var w = data.width; + var h = data.height; + can.width = w; + can.height = h; + var ctx = can.getContext("2d"); + ctx.drawImage(data, 0, 0); + data = ctx.getImageData(0, 0, w, h).data; } - return programData; + var pos = 0; + var bytes = ByteArrayBase.internalGetBase64String(data.length, function () { + return data[pos++]; + }, null); + this._context.addStream(String.fromCharCode(OpCodes.uploadBytesTexture) + this._pId + "," + miplevel + "," + (this._width >> miplevel) + "," + (this._height >> miplevel) + "," + bytes + "%"); + this._context.execute(); }; - /** - * - * @param material - */ - ContextGLBase.prototype.getMaterial = function (material, profile) { - var materialData = this._materialDataPool.getItem(material); - if (materialData.invalidAnimation) { - materialData.invalidAnimation = false; - var materialDataPasses = materialData.getMaterialPasses(profile); - var enabledGPUAnimation = this.getEnabledGPUAnimation(material, materialDataPasses); - var renderOrderId = 0; - var mult = 1; - var materialPassData; - var len = materialDataPasses.length; - for (var i = 0; i < len; i++) { - materialPassData = materialDataPasses[i]; - if (materialPassData.usesAnimation != enabledGPUAnimation) { - materialPassData.usesAnimation = enabledGPUAnimation; - materialPassData.key == ""; - } - if (materialPassData.key == "") - this.calcAnimationCode(material, materialPassData); - renderOrderId += this.getProgram(materialPassData).id * mult; - mult *= 1000; - } - materialData.renderOrderId = renderOrderId; - } - return materialData; + return TextureFlash; +})(ResourceBaseFlash); +module.exports = TextureFlash; + + +},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/utils/ByteArrayBase":undefined,"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/base/TextureWebGL":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); +var TextureWebGL = (function (_super) { + __extends(TextureWebGL, _super); + function TextureWebGL(gl, width, height) { + _super.call(this, gl); + this.textureType = "texture2d"; + this._width = width; + this._height = height; + this._glTexture = this._gl.createTexture(); + } + TextureWebGL.prototype.dispose = function () { + this._gl.deleteTexture(this._glTexture); }; - /** - * Assigns an attribute stream - * - * @param index The attribute stream index for the vertex shader - * @param buffer - * @param offset - * @param stride - * @param format - */ - ContextGLBase.prototype.activateBuffer = function (index, buffer, offset, format) { - if (!buffer.contexts[this._stageIndex]) - buffer.contexts[this._stageIndex] = this; - if (!buffer.buffers[this._stageIndex]) { - buffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length / buffer.dataPerVertex, buffer.dataPerVertex); - buffer.invalid[this._stageIndex] = true; - } - if (buffer.invalid[this._stageIndex]) { - buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length / buffer.dataPerVertex); - buffer.invalid[this._stageIndex] = false; - } - this.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format); + Object.defineProperty(TextureWebGL.prototype, "width", { + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TextureWebGL.prototype, "height", { + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TextureWebGL.prototype, "frameBuffer", { + get: function () { + if (!this._frameBuffer) { + this._frameBuffer = this._gl.createFramebuffer(); + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer); + this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); + this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null); + var renderBuffer = this._gl.createRenderbuffer(); + this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer); + this._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height); + this._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0); + this._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer); + this._gl.bindTexture(this._gl.TEXTURE_2D, null); + this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null); + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); + } + return this._frameBuffer; + }, + enumerable: true, + configurable: true + }); + TextureWebGL.prototype.uploadFromData = function (data, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) + data = data.imageData; + this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); + this._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); + this._gl.bindTexture(this._gl.TEXTURE_2D, null); }; - ContextGLBase.prototype.disposeVertexData = function (buffer) { - buffer.buffers[this._stageIndex].dispose(); - buffer.buffers[this._stageIndex] = null; + TextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { + if (async === void 0) { async = false; } + var ext = this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + //this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this) }; - ContextGLBase.prototype.activateRenderTexture = function (index, textureProxy) { - this.setTextureAt(index, this.getRenderTexture(textureProxy)); + Object.defineProperty(TextureWebGL.prototype, "glTexture", { + get: function () { + return this._glTexture; + }, + enumerable: true, + configurable: true + }); + TextureWebGL.prototype.generateMipmaps = function () { + //TODO: implement generating mipmaps + //this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture ); + //this._gl.generateMipmap(this._gl.TEXTURE_2D); + //this._gl.bindTexture( this._gl.TEXTURE_2D, null ); }; - ContextGLBase.prototype.activateMaterialPass = function (materialPassData, stage, camera) { - var shaderObject = materialPassData.shaderObject; - for (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++) - this.setVertexBufferAt(i, null); - for (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++) - this.setTextureAt(i, null); - if (materialPassData.usesAnimation) - materialPassData.material.animationSet.activate(shaderObject, stage); - //activate shader object - shaderObject.iActivate(stage, camera); - //check program data is uploaded - var programData = this.getProgram(materialPassData); - if (!programData.program) { - programData.program = this.createProgram(); - var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + materialPassData.animationVertexCode + materialPassData.vertexCode + "endpart"))['vertex'].data; - var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + "endpart"))['fragment'].data; - programData.program.upload(vertexByteCode, fragmentByteCode); - } - //set program data - this.setProgram(programData.program); + return TextureWebGL; +})(TextureBaseWebGL); +module.exports = TextureWebGL; + + +},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-stagegl/lib/base/TextureBaseWebGL":undefined}],"awayjs-stagegl/lib/base/VertexBufferFlash":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var VertexBufferFlash = (function (_super) { + __extends(VertexBufferFlash, _super); + function VertexBufferFlash(context, numVertices, data32PerVertex) { + _super.call(this); + this._context = context; + this._numVertices = numVertices; + this._data32PerVertex = data32PerVertex; + this._context.addStream(String.fromCharCode(OpCodes.initVertexBuffer, data32PerVertex + OpCodes.intMask) + numVertices.toString() + ","); + this._pId = this._context.execute(); + this._context._iAddResource(this); + } + VertexBufferFlash.prototype.uploadFromArray = function (data, startVertex, numVertices) { + this._context.addStream(String.fromCharCode(OpCodes.uploadArrayVertexBuffer, this._pId + OpCodes.intMask) + data.join() + "#" + [startVertex, numVertices].join() + ","); + this._context.execute(); }; - ContextGLBase.prototype.deactivateMaterialPass = function (materialPassData, stage) { - var shaderObject = materialPassData.shaderObject; - if (materialPassData.usesAnimation) - materialPassData.material.animationSet.deactivate(shaderObject, stage); - materialPassData.shaderObject.iDeactivate(stage); - this._numUsedStreams = shaderObject.numUsedStreams; - this._numUsedTextures = shaderObject.numUsedTextures; + Object.defineProperty(VertexBufferFlash.prototype, "numVertices", { + get: function () { + return this._numVertices; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VertexBufferFlash.prototype, "data32PerVertex", { + get: function () { + return this._data32PerVertex; + }, + enumerable: true, + configurable: true + }); + VertexBufferFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeVertexBuffer, this._pId + OpCodes.intMask)); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; }; - ContextGLBase.prototype.activateTexture = function (index, textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) { - textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); - textureData.invalid = true; - } - if (textureData.invalid) { - textureData.invalid = false; - if (textureProxy.generateMipmaps) { - var mipmapData = textureProxy._iGetMipmapData(); - var len = mipmapData.length; - for (var i = 0; i < len; i++) - textureData.texture.uploadFromData(mipmapData[i], i); - } - else { - textureData.texture.uploadFromData(textureProxy._iGetTextureData(), 0); - } - } - this.setTextureAt(index, textureData.texture); + return VertexBufferFlash; +})(ResourceBaseFlash); +module.exports = VertexBufferFlash; + + +},{"awayjs-stagegl/lib/base/OpCodes":undefined,"awayjs-stagegl/lib/base/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/base/VertexBufferWebGL":[function(require,module,exports){ +var VertexBufferWebGL = (function () { + function VertexBufferWebGL(gl, numVertices, data32PerVertex) { + this._gl = gl; + this._buffer = this._gl.createBuffer(); + this._numVertices = numVertices; + this._data32PerVertex = data32PerVertex; + } + VertexBufferWebGL.prototype.uploadFromArray = function (vertices, startVertex, numVertices) { + this._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer); + //console.log( "** WARNING upload not fully implemented, startVertex & numVertices not considered." ); + // TODO add offsets , startVertex, numVertices * this._data32PerVertex + this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW); }; - ContextGLBase.prototype.activateCubeTexture = function (index, textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) { - textureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false); - textureData.invalid = true; - } - if (textureData.invalid) { - textureData.invalid = false; - for (var i = 0; i < 6; ++i) { - if (textureProxy.generateMipmaps) { - var mipmapData = textureProxy._iGetMipmapData(i); - var len = mipmapData.length; - for (var j = 0; j < len; j++) - textureData.texture.uploadFromData(mipmapData[j], i, j); - } - else { - textureData.texture.uploadFromData(textureProxy._iGetTextureData(i), i, 0); - } - } - } - this.setTextureAt(index, textureData.texture); + Object.defineProperty(VertexBufferWebGL.prototype, "numVertices", { + get: function () { + return this._numVertices; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VertexBufferWebGL.prototype, "data32PerVertex", { + get: function () { + return this._data32PerVertex; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VertexBufferWebGL.prototype, "glBuffer", { + get: function () { + return this._buffer; + }, + enumerable: true, + configurable: true + }); + VertexBufferWebGL.prototype.dispose = function () { + this._gl.deleteBuffer(this._buffer); }; + return VertexBufferWebGL; +})(); +module.exports = VertexBufferWebGL; + + +},{}],"awayjs-stagegl/lib/errors/AnimationSetError":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Error = require("awayjs-core/lib/errors/Error"); +var AnimationSetError = (function (_super) { + __extends(AnimationSetError, _super); + function AnimationSetError(message) { + _super.call(this, message); + } + return AnimationSetError; +})(Error); +module.exports = AnimationSetError; + + +},{"awayjs-core/lib/errors/Error":undefined}],"awayjs-stagegl/lib/events/AnimatorEvent":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Event = require("awayjs-core/lib/events/Event"); +/** + * Dispatched to notify changes in an animator's state. + */ +var AnimatorEvent = (function (_super) { + __extends(AnimatorEvent, _super); /** - * Retrieves the VertexBuffer object that contains triangle indices. - * @param context The ContextWeb for which we request the buffer - * @return The VertexBuffer object that contains triangle indices. + * Create a new AnimatorEvent object. + * + * @param type The event type. + * @param animator The animator object that is the subject of this event. */ - ContextGLBase.prototype.getIndexBuffer = function (buffer) { - if (!buffer.contexts[this._stageIndex]) - buffer.contexts[this._stageIndex] = this; - if (!buffer.buffers[this._stageIndex]) { - buffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length); - buffer.invalid[this._stageIndex] = true; - } - if (buffer.invalid[this._stageIndex]) { - buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length); - buffer.invalid[this._stageIndex] = false; - } - return buffer.buffers[this._stageIndex]; - }; - ContextGLBase.prototype.disposeIndexData = function (buffer) { - buffer.buffers[this._stageIndex].dispose(); - buffer.buffers[this._stageIndex] = null; - }; - ContextGLBase.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - }; - ContextGLBase.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - this._width = width; - this._height = height; + function AnimatorEvent(type, animator) { + _super.call(this, type); + this._animator = animator; + } + Object.defineProperty(AnimatorEvent.prototype, "animator", { + get: function () { + return this._animator; + }, + enumerable: true, + configurable: true + }); + /** + * Clones the event. + * + * @return An exact duplicate of the current event object. + */ + AnimatorEvent.prototype.clone = function () { + return new AnimatorEvent(this.type, this._animator); }; - ContextGLBase.prototype.createIndexBuffer = function (numIndices) { - throw new AbstractMethodError(); + /** + * Defines the value of the type property of a start event object. + */ + AnimatorEvent.START = "start"; + /** + * Defines the value of the type property of a stop event object. + */ + AnimatorEvent.STOP = "stop"; + /** + * Defines the value of the type property of a cycle complete event object. + */ + AnimatorEvent.CYCLE_COMPLETE = "cycle_complete"; + return AnimatorEvent; +})(Event); +module.exports = AnimatorEvent; + + +},{"awayjs-core/lib/events/Event":undefined}],"awayjs-stagegl/lib/events/ShadingMethodEvent":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Event = require("awayjs-core/lib/events/Event"); +var ShadingMethodEvent = (function (_super) { + __extends(ShadingMethodEvent, _super); + function ShadingMethodEvent(type) { + _super.call(this, type); + } + ShadingMethodEvent.SHADER_INVALIDATED = "ShaderInvalidated"; + return ShadingMethodEvent; +})(Event); +module.exports = ShadingMethodEvent; + + +},{"awayjs-core/lib/events/Event":undefined}],"awayjs-stagegl/lib/filters/Filter3DBase":[function(require,module,exports){ +var Filter3DBase = (function () { + function Filter3DBase() { + this._tasks = new Array(); + } + Object.defineProperty(Filter3DBase.prototype, "requireDepthRender", { + get: function () { + return this._requireDepthRender; + }, + enumerable: true, + configurable: true + }); + Filter3DBase.prototype.pAddTask = function (filter) { + this._tasks.push(filter); + if (this._requireDepthRender == null) + this._requireDepthRender = filter.requireDepthRender; }; - ContextGLBase.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - throw new AbstractMethodError(); + Object.defineProperty(Filter3DBase.prototype, "tasks", { + get: function () { + return this._tasks; + }, + enumerable: true, + configurable: true + }); + Filter3DBase.prototype.getMainInputTexture = function (stage) { + return this._tasks[0].getMainInputTexture(stage); }; - ContextGLBase.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - throw new AbstractMethodError(); + Object.defineProperty(Filter3DBase.prototype, "textureWidth", { + get: function () { + return this._textureWidth; + }, + set: function (value) { + this._textureWidth = value; + for (var i = 0; i < this._tasks.length; ++i) + this._tasks[i].textureWidth = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter3DBase.prototype, "textureHeight", { + get: function () { + return this._textureHeight; + }, + set: function (value) { + this._textureHeight = value; + for (var i = 0; i < this._tasks.length; ++i) + this._tasks[i].textureHeight = value; + }, + enumerable: true, + configurable: true + }); + // link up the filters correctly with the next filter + Filter3DBase.prototype.setRenderTargets = function (mainTarget, stage) { + this._tasks[this._tasks.length - 1].target = mainTarget; }; - ContextGLBase.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - throw new AbstractMethodError(); + Filter3DBase.prototype.dispose = function () { + for (var i = 0; i < this._tasks.length; ++i) + this._tasks[i].dispose(); }; - ContextGLBase.prototype.createProgram = function () { - throw new AbstractMethodError(); + Filter3DBase.prototype.update = function (stage, camera) { }; - ContextGLBase.prototype.dispose = function () { + return Filter3DBase; +})(); +module.exports = Filter3DBase; + + +},{}],"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase":[function(require,module,exports){ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +var Filter3DTaskBase = (function () { + function Filter3DTaskBase(requireDepthRender) { + if (requireDepthRender === void 0) { requireDepthRender = false; } + this._scaledTextureWidth = -1; + this._scaledTextureHeight = -1; + this._textureWidth = -1; + this._textureHeight = -1; + this._textureDimensionsInvalid = true; + this._program3DInvalid = true; + this._textureScale = 0; + this._requireDepthRender = requireDepthRender; + } + Object.defineProperty(Filter3DTaskBase.prototype, "textureScale", { + /** + * The texture scale for the input of this texture. This will define the output of the previous entry in the chain + */ + get: function () { + return this._textureScale; + }, + set: function (value) { + if (this._textureScale == value) + return; + this._textureScale = value; + this._scaledTextureWidth = this._textureWidth >> this._textureScale; + this._scaledTextureHeight = this._textureHeight >> this._textureScale; + this._textureDimensionsInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter3DTaskBase.prototype, "target", { + get: function () { + return this._target; + }, + set: function (value) { + this._target = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter3DTaskBase.prototype, "textureWidth", { + get: function () { + return this._textureWidth; + }, + set: function (value) { + if (this._textureWidth == value) + return; + this._textureWidth = value; + this._scaledTextureWidth = this._textureWidth >> this._textureScale; + this._textureDimensionsInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter3DTaskBase.prototype, "textureHeight", { + get: function () { + return this._textureHeight; + }, + set: function (value) { + if (this._textureHeight == value) + return; + this._textureHeight = value; + this._scaledTextureHeight = this._textureHeight >> this._textureScale; + this._textureDimensionsInvalid = true; + }, + enumerable: true, + configurable: true + }); + Filter3DTaskBase.prototype.getMainInputTexture = function (stage) { + if (this._textureDimensionsInvalid) + this.pUpdateTextures(stage); + return this._mainInputTexture; }; - ContextGLBase.prototype.present = function () { + Filter3DTaskBase.prototype.dispose = function () { + if (this._mainInputTexture) + this._mainInputTexture.dispose(); + if (this._program3D) + this._program3D.dispose(); }; - ContextGLBase.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } + Filter3DTaskBase.prototype.pInvalidateProgram = function () { + this._program3DInvalid = true; }; - ContextGLBase.prototype.setRenderToBackBuffer = function () { + Filter3DTaskBase.prototype.pUpdateProgram = function (stage) { + if (this._program3D) + this._program3D.dispose(); + this._program3D = stage.context.createProgram(); + var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + this.pGetVertexCode() + "endpart"))['vertex'].data; + var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + this.pGetFragmentCode() + "endpart"))['fragment'].data; + this._program3D.upload(vertexByteCode, fragmentByteCode); + this._program3DInvalid = false; }; - ContextGLBase.prototype.setScissorRectangle = function (rectangle) { + Filter3DTaskBase.prototype.pGetVertexCode = function () { + // TODO: imeplement AGAL <> GLSL + return "mov op, va0\n" + "mov v0, va1\n"; }; - ContextGLBase.prototype.setTextureAt = function (sampler, texture) { + Filter3DTaskBase.prototype.pGetFragmentCode = function () { + throw new AbstractMethodError(); + return null; }; - ContextGLBase.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } + Filter3DTaskBase.prototype.pUpdateTextures = function (stage) { + if (this._mainInputTexture) + this._mainInputTexture.dispose(); + this._mainInputTexture = stage.context.createTexture(this._scaledTextureWidth, this._scaledTextureHeight, ContextGLTextureFormat.BGRA, true); + this._textureDimensionsInvalid = false; }; - ContextGLBase.prototype.setProgram = function (program) { + Filter3DTaskBase.prototype.getProgram = function (stage) { + if (this._program3DInvalid) + this.pUpdateProgram(stage); + return this._program3D; }; - ContextGLBase.prototype.registerProgram = function (programData) { - var i = 0; - while (this._programData[i] != null) - i++; - this._programData[i] = programData; - programData.id = i; + Filter3DTaskBase.prototype.activate = function (stage, camera, depthTexture) { }; - ContextGLBase.prototype.unRegisterProgram = function (programData) { - this._programData[programData.id] = null; - programData.id = -1; + Filter3DTaskBase.prototype.deactivate = function (stage) { }; - /** - * test if animation will be able to run on gpu BEFORE compiling materials - * test if the shader objects supports animating the animation set in the vertex shader - * if any object using this material fails to support accelerated animations for any of the shader objects, - * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations) - */ - ContextGLBase.prototype.getEnabledGPUAnimation = function (material, materialDataPasses) { - if (material.animationSet) { - material.animationSet.resetGPUCompatibility(); - var owners = material.iOwners; - var numOwners = owners.length; - var len = materialDataPasses.length; - for (var i = 0; i < len; i++) - for (var j = 0; j < numOwners; j++) - if (owners[j].animator) - owners[j].animator.testGPUCompatibility(materialDataPasses[i].shaderObject); - return !material.animationSet.usesCPU; - } - return false; - }; - ContextGLBase.prototype.calcAnimationCode = function (material, materialPassData) { - //reset key so that the program is re-calculated - materialPassData.key = ""; - materialPassData.animationVertexCode = ""; - materialPassData.animationFragmentCode = ""; - var shaderObject = materialPassData.shaderObject; - //check to see if GPU animation is used - if (materialPassData.usesAnimation) { - var animationSet = material.animationSet; - materialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject); - if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) - materialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject); - if (shaderObject.usesFragmentAnimation) - materialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget); - animationSet.doneAGALCode(shaderObject); - } - else { - // simply write attributes to targets, do not animate them - // projection will pick up on targets[0] to do the projection - var len = shaderObject.animatableAttributes.length; - for (var i = 0; i < len; ++i) - materialPassData.animationVertexCode += "mov " + shaderObject.animationTargetRegisters[i] + ", " + shaderObject.animatableAttributes[i] + "\n"; - if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) - materialPassData.animationVertexCode += "mov " + shaderObject.uvTarget + "," + shaderObject.uvSource + "\n"; - } - }; - return ContextGLBase; -})(); -module.exports = ContextGLBase; - - -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/textures/RenderTexture":undefined,"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler":undefined,"awayjs-stagegl/lib/core/pool/MaterialDataPool":undefined,"awayjs-stagegl/lib/core/pool/ProgramDataPool":undefined,"awayjs-stagegl/lib/core/pool/TextureDataPool":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat":undefined}],"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":[function(require,module,exports){ -var ContextGLBlendFactor = (function () { - function ContextGLBlendFactor() { - } - ContextGLBlendFactor.DESTINATION_ALPHA = "destinationAlpha"; - ContextGLBlendFactor.DESTINATION_COLOR = "destinationColor"; - ContextGLBlendFactor.ONE = "one"; - ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA = "oneMinusDestinationAlpha"; - ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR = "oneMinusDestinationColor"; - ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA = "oneMinusSourceAlpha"; - ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR = "oneMinusSourceColor"; - ContextGLBlendFactor.SOURCE_ALPHA = "sourceAlpha"; - ContextGLBlendFactor.SOURCE_COLOR = "sourceColor"; - ContextGLBlendFactor.ZERO = "zero"; - return ContextGLBlendFactor; -})(); -module.exports = ContextGLBlendFactor; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask":[function(require,module,exports){ -var ContextGLClearMask = (function () { - function ContextGLClearMask() { - } - ContextGLClearMask.COLOR = 1; - ContextGLClearMask.DEPTH = 2; - ContextGLClearMask.STENCIL = 4; - ContextGLClearMask.ALL = ContextGLClearMask.COLOR | ContextGLClearMask.DEPTH | ContextGLClearMask.STENCIL; - return ContextGLClearMask; -})(); -module.exports = ContextGLClearMask; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":[function(require,module,exports){ -var ContextGLCompareMode = (function () { - function ContextGLCompareMode() { - } - ContextGLCompareMode.ALWAYS = "always"; - ContextGLCompareMode.EQUAL = "equal"; - ContextGLCompareMode.GREATER = "greater"; - ContextGLCompareMode.GREATER_EQUAL = "greaterEqual"; - ContextGLCompareMode.LESS = "less"; - ContextGLCompareMode.LESS_EQUAL = "lessEqual"; - ContextGLCompareMode.NEVER = "never"; - ContextGLCompareMode.NOT_EQUAL = "notEqual"; - return ContextGLCompareMode; -})(); -module.exports = ContextGLCompareMode; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":[function(require,module,exports){ -var ContextGLMipFilter = (function () { - function ContextGLMipFilter() { - } - ContextGLMipFilter.MIPLINEAR = "miplinear"; - ContextGLMipFilter.MIPNEAREST = "mipnearest"; - ContextGLMipFilter.MIPNONE = "mipnone"; - return ContextGLMipFilter; -})(); -module.exports = ContextGLMipFilter; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLProfile":[function(require,module,exports){ -var ContextGLProfile = (function () { - function ContextGLProfile() { - } - ContextGLProfile.BASELINE = "baseline"; - ContextGLProfile.BASELINE_CONSTRAINED = "baselineConstrained"; - ContextGLProfile.BASELINE_EXTENDED = "baselineExtended"; - return ContextGLProfile; -})(); -module.exports = ContextGLProfile; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":[function(require,module,exports){ -var ContextGLProgramType = (function () { - function ContextGLProgramType() { - } - ContextGLProgramType.FRAGMENT = "fragment"; - ContextGLProgramType.VERTEX = "vertex"; - return ContextGLProgramType; -})(); -module.exports = ContextGLProgramType; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLStencilAction":[function(require,module,exports){ -var ContextGLStencilAction = (function () { - function ContextGLStencilAction() { - } - ContextGLStencilAction.DECREMENT_SATURATE = "decrementSaturate"; - ContextGLStencilAction.DECREMENT_WRAP = "decrementWrap"; - ContextGLStencilAction.INCREMENT_SATURATE = "incrementSaturate"; - ContextGLStencilAction.INCREMENT_WRAP = "incrementWrap"; - ContextGLStencilAction.INVERT = "invert"; - ContextGLStencilAction.KEEP = "keep"; - ContextGLStencilAction.SET = "set"; - ContextGLStencilAction.ZERO = "zero"; - return ContextGLStencilAction; -})(); -module.exports = ContextGLStencilAction; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":[function(require,module,exports){ -var ContextGLTextureFilter = (function () { - function ContextGLTextureFilter() { - } - ContextGLTextureFilter.LINEAR = "linear"; - ContextGLTextureFilter.NEAREST = "nearest"; - return ContextGLTextureFilter; -})(); -module.exports = ContextGLTextureFilter; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat":[function(require,module,exports){ -var ContextGLTextureFormat = (function () { - function ContextGLTextureFormat() { - } - ContextGLTextureFormat.BGRA = "bgra"; - ContextGLTextureFormat.BGRA_PACKED = "bgraPacked4444"; - ContextGLTextureFormat.BGR_PACKED = "bgrPacked565"; - ContextGLTextureFormat.COMPRESSED = "compressed"; - ContextGLTextureFormat.COMPRESSED_ALPHA = "compressedAlpha"; - return ContextGLTextureFormat; -})(); -module.exports = ContextGLTextureFormat; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace":[function(require,module,exports){ -var ContextGLTriangleFace = (function () { - function ContextGLTriangleFace() { - } - ContextGLTriangleFace.BACK = "back"; - ContextGLTriangleFace.FRONT = "front"; - ContextGLTriangleFace.FRONT_AND_BACK = "frontAndBack"; - ContextGLTriangleFace.NONE = "none"; - return ContextGLTriangleFace; -})(); -module.exports = ContextGLTriangleFace; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat":[function(require,module,exports){ -var ContextGLVertexBufferFormat = (function () { - function ContextGLVertexBufferFormat() { - } - ContextGLVertexBufferFormat.BYTES_4 = "bytes4"; - ContextGLVertexBufferFormat.FLOAT_1 = "float1"; - ContextGLVertexBufferFormat.FLOAT_2 = "float2"; - ContextGLVertexBufferFormat.FLOAT_3 = "float3"; - ContextGLVertexBufferFormat.FLOAT_4 = "float4"; - return ContextGLVertexBufferFormat; -})(); -module.exports = ContextGLVertexBufferFormat; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":[function(require,module,exports){ -var ContextGLWrapMode = (function () { - function ContextGLWrapMode() { - } - ContextGLWrapMode.CLAMP = "clamp"; - ContextGLWrapMode.REPEAT = "repeat"; - return ContextGLWrapMode; + Object.defineProperty(Filter3DTaskBase.prototype, "requireDepthRender", { + get: function () { + return this._requireDepthRender; + }, + enumerable: true, + configurable: true + }); + return Filter3DTaskBase; })(); -module.exports = ContextGLWrapMode; +module.exports = Filter3DTaskBase; -},{}],"awayjs-stagegl/lib/core/stagegl/ContextStage3D":[function(require,module,exports){ +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFormat":undefined}],"awayjs-stagegl/lib/managers/RTTBufferManager":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var swfobject = require("awayjs-stagegl/lib/swfobject"); -var Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); -var ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var CubeTextureFlash = require("awayjs-stagegl/lib/core/stagegl/CubeTextureFlash"); -var IndexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/IndexBufferFlash"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ProgramFlash = require("awayjs-stagegl/lib/core/stagegl/ProgramFlash"); -var TextureFlash = require("awayjs-stagegl/lib/core/stagegl/TextureFlash"); -var VertexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/VertexBufferFlash"); -var ContextStage3D = (function (_super) { - __extends(ContextStage3D, _super); - //TODO: get rid of hack that fixes including definition file - function ContextStage3D(container, stageIndex, callback, include) { - _super.call(this, stageIndex); - this._cmdStream = ""; - this._resources = new Array(); - var swfVersionStr = "11.0.0"; - // To use express install, set to playerProductInstall.swf, otherwise the empty string. - var flashvars = { - id: container.id - }; - var params = { - quality: "high", - bgcolor: "#ffffff", - allowscriptaccess: "sameDomain", - allowfullscreen: "true", - wmode: "direct" - }; - this._errorCheckingEnabled = false; - this._iDriverInfo = "Unknown"; - var attributes = { - salign: "tl", - id: container.id, - name: container["name"] //TODO: needed? - }; - this._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose - this._oldParent = container.parentNode; - var context3dObj = this; - ContextStage3D.contexts[container.id] = this; - function callbackSWFObject(callbackInfo) { - if (!callbackInfo.success) - return; - context3dObj._pContainer = callbackInfo.ref; - context3dObj._iCallback = callback; - } - swfobject.embedSWF("../libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var Event = require("awayjs-core/lib/events/Event"); +var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); +var TextureUtils = require("awayjs-core/lib/utils/TextureUtils"); +var RTTBufferManager = (function (_super) { + __extends(RTTBufferManager, _super); + function RTTBufferManager(stage) { + _super.call(this); + this._viewWidth = -1; + this._viewHeight = -1; + this._textureWidth = -1; + this._textureHeight = -1; + this._buffersInvalid = true; + this._renderToTextureRect = new Rectangle(); + this._stage = stage; } - Object.defineProperty(ContextStage3D.prototype, "container", { - get: function () { - return this._pContainer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ContextStage3D.prototype, "driverInfo", { - get: function () { - return this._iDriverInfo; - }, - enumerable: true, + RTTBufferManager.getInstance = function (stage) { + if (!stage) + throw new Error("stage key cannot be null!"); + if (RTTBufferManager._instances == null) + RTTBufferManager._instances = new Array(); + var rttBufferManager = RTTBufferManager.getRTTBufferManagerFromStage(stage); + if (rttBufferManager == null) { + rttBufferManager = new RTTBufferManager(stage); + var vo = new RTTBufferManagerVO(); + vo.stage3d = stage; + vo.rttbfm = rttBufferManager; + RTTBufferManager._instances.push(vo); + } + return rttBufferManager; + }; + RTTBufferManager.getRTTBufferManagerFromStage = function (stage) { + var l = RTTBufferManager._instances.length; + var r; + for (var c = 0; c < l; c++) { + r = RTTBufferManager._instances[c]; + if (r.stage3d === stage) + return r.rttbfm; + } + return null; + }; + RTTBufferManager.deleteRTTBufferManager = function (stage) { + var l = RTTBufferManager._instances.length; + var r; + for (var c = 0; c < l; c++) { + r = RTTBufferManager._instances[c]; + if (r.stage3d === stage) { + RTTBufferManager._instances.splice(c, 1); + return; + } + } + }; + Object.defineProperty(RTTBufferManager.prototype, "textureRatioX", { + get: function () { + if (this._buffersInvalid) + this.updateRTTBuffers(); + return this._textureRatioX; + }, + enumerable: true, configurable: true }); - Object.defineProperty(ContextStage3D.prototype, "errorCheckingEnabled", { + Object.defineProperty(RTTBufferManager.prototype, "textureRatioY", { get: function () { - return this._errorCheckingEnabled; + if (this._buffersInvalid) + this.updateRTTBuffers(); + return this._textureRatioY; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "viewWidth", { + get: function () { + return this._viewWidth; }, set: function (value) { - if (this._errorCheckingEnabled == value) + if (value == this._viewWidth) return; - this._errorCheckingEnabled = value; - this.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value ? OpCodes.trueValue : OpCodes.falseValue)); - this.execute(); + this._viewWidth = value; + this._buffersInvalid = true; + this._textureWidth = TextureUtils.getBestPowerOf2(this._viewWidth); + if (this._textureWidth > this._viewWidth) { + this._renderToTextureRect.x = Math.floor((this._textureWidth - this._viewWidth) * .5); + this._renderToTextureRect.width = this._viewWidth; + } + else { + this._renderToTextureRect.x = 0; + this._renderToTextureRect.width = this._textureWidth; + } + this.dispatchEvent(new Event(Event.RESIZE)); }, enumerable: true, configurable: true }); - ContextStage3D.prototype._iAddResource = function (resource) { - this._resources.push(resource); - }; - ContextStage3D.prototype._iRemoveResource = function (resource) { - this._resources.splice(this._resources.indexOf(resource)); - }; - ContextStage3D.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO:streaming - return new TextureFlash(this, width, height, format, optimizeForRenderToTexture); - }; - ContextStage3D.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO:streaming - return new CubeTextureFlash(this, size, format, optimizeForRenderToTexture); - }; - ContextStage3D.prototype.setTextureAt = function (sampler, texture) { - if (texture) { - this.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + "," + texture.id + ","); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + ","); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { - //nothing to do here - }; - ContextStage3D.prototype.setStencilActions = function (triangleFace, compareMode, actionOnBothPass, actionOnDepthFail, actionOnDepthPassStencilFail) { - if (triangleFace === void 0) { triangleFace = "frontAndBack"; } - if (compareMode === void 0) { compareMode = "always"; } - if (actionOnBothPass === void 0) { actionOnBothPass = "keep"; } - if (actionOnDepthFail === void 0) { actionOnDepthFail = "keep"; } - if (actionOnDepthPassStencilFail === void 0) { actionOnDepthPassStencilFail = "keep"; } - this.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + "$" + compareMode + "$" + actionOnBothPass + "$" + actionOnDepthFail + "$" + actionOnDepthPassStencilFail + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setStencilReferenceValue = function (referenceValue, readMask, writeMask) { - if (readMask === void 0) { readMask = 255; } - if (writeMask === void 0) { writeMask = 255; } - this.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { - if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } - //TODO implement coordinateSystem option - this.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { - if (firstIndex === void 0) { firstIndex = 0; } - if (numTriangles === void 0) { numTriangles = -1; } - firstIndex = firstIndex || 0; - if (!numTriangles || numTriangles < 0) - numTriangles = indexBuffer.numIndices / 3; - this.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + "," + numTriangles + ","); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { - //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); - if (transposedMatrix === void 0) { transposedMatrix = false; } - //TODO remove special case for WebGL matrix calls? - var d = matrix.rawData; - if (transposedMatrix) { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); - } - else { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); - } - }; - ContextStage3D.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { - if (numRegisters === void 0) { numRegisters = -1; } - var startIndex; - var target = (programType == ContextGLProgramType.VERTEX) ? OpCodes.trueValue : OpCodes.falseValue; - for (var i = 0; i < numRegisters; i++) { - startIndex = i * 4; - this.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + "," + data[startIndex + 1] + "," + data[startIndex + 2] + "," + data[startIndex + 3] + ","); - if (ContextStage3D.debug) - this.execute(); - } - }; - ContextStage3D.prototype.setProgram = function (program) { - this.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.present = function () { - this.addStream(String.fromCharCode(OpCodes.present)); - this.execute(); - }; - ContextStage3D.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - this.addStream(String.fromCharCode(OpCodes.clear) + red + "," + green + "," + blue + "," + alpha + "," + depth + "," + stencil + "," + mask + ","); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.createProgram = function () { - return new ProgramFlash(this); - }; - ContextStage3D.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - return new VertexBufferFlash(this, numVertices, data32PerVertex); - }; - ContextStage3D.prototype.createIndexBuffer = function (numIndices) { - return new IndexBufferFlash(this, numIndices); - }; - ContextStage3D.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); - //TODO: add Anitalias setting - this.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + "," + height + ","); - }; - ContextStage3D.prototype.drawToBitmapData = function (destination) { - //TODO - }; - ContextStage3D.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } - if (buffer) { - this.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + "," + bufferOffset + "," + format + "$"); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask)); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setColorMask = function (red, green, blue, alpha) { - this.addStream(String.fromCharCode(OpCodes.setColorMask, red ? OpCodes.trueValue : OpCodes.falseValue, green ? OpCodes.trueValue : OpCodes.falseValue, blue ? OpCodes.trueValue : OpCodes.falseValue, alpha ? OpCodes.trueValue : OpCodes.falseValue)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { - this.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + "$" + destinationFactor + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - if (target === null || target === undefined) { - this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); - } - else { - this.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil ? OpCodes.trueValue : OpCodes.falseValue) + target.id + "," + (antiAlias || 0) + ","); + Object.defineProperty(RTTBufferManager.prototype, "viewHeight", { + get: function () { + return this._viewHeight; + }, + set: function (value) { + if (value == this._viewHeight) + return; + this._viewHeight = value; + this._buffersInvalid = true; + this._textureHeight = TextureUtils.getBestPowerOf2(this._viewHeight); + if (this._textureHeight > this._viewHeight) { + this._renderToTextureRect.y = Math.floor((this._textureHeight - this._viewHeight) * .5); + this._renderToTextureRect.height = this._viewHeight; + } + else { + this._renderToTextureRect.y = 0; + this._renderToTextureRect.height = this._textureHeight; + } + this.dispatchEvent(new Event(Event.RESIZE)); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "renderToTextureVertexBuffer", { + get: function () { + if (this._buffersInvalid) + this.updateRTTBuffers(); + return this._renderToTextureVertexBuffer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "renderToScreenVertexBuffer", { + get: function () { + if (this._buffersInvalid) + this.updateRTTBuffers(); + return this._renderToScreenVertexBuffer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "indexBuffer", { + get: function () { + return this._indexBuffer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "renderToTextureRect", { + get: function () { + if (this._buffersInvalid) + this.updateRTTBuffers(); + return this._renderToTextureRect; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "textureWidth", { + get: function () { + return this._textureWidth; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RTTBufferManager.prototype, "textureHeight", { + get: function () { + return this._textureHeight; + }, + enumerable: true, + configurable: true + }); + RTTBufferManager.prototype.dispose = function () { + RTTBufferManager.deleteRTTBufferManager(this._stage); + if (this._indexBuffer) { + this._indexBuffer.dispose(); + this._renderToScreenVertexBuffer.dispose(); + this._renderToTextureVertexBuffer.dispose(); + this._renderToScreenVertexBuffer = null; + this._renderToTextureVertexBuffer = null; + this._indexBuffer = null; } - if (ContextStage3D.debug) - this.execute(); }; - ContextStage3D.prototype.setRenderToBackBuffer = function () { - this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setScissorRectangle = function (rectangle) { - if (rectangle) { - this.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + "," + rectangle.y + "," + rectangle.width + "," + rectangle.height + ","); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearScissorRect)); + // todo: place all this in a separate model, since it's used all over the place + // maybe it even has a place in the core (together with screenRect etc)? + // needs to be stored per view of course + RTTBufferManager.prototype.updateRTTBuffers = function () { + var context = this._stage.context; + var textureVerts; + var screenVerts; + var x; + var y; + if (this._renderToTextureVertexBuffer == null) + this._renderToTextureVertexBuffer = context.createVertexBuffer(4, 5); + if (this._renderToScreenVertexBuffer == null) + this._renderToScreenVertexBuffer = context.createVertexBuffer(4, 5); + if (!this._indexBuffer) { + this._indexBuffer = context.createIndexBuffer(6); + this._indexBuffer.uploadFromArray([2, 1, 0, 3, 2, 0], 0, 6); } - if (ContextStage3D.debug) - this.execute(); + this._textureRatioX = x = Math.min(this._viewWidth / this._textureWidth, 1); + this._textureRatioY = y = Math.min(this._viewHeight / this._textureHeight, 1); + var u1 = (1 - x) * .5; + var u2 = (x + 1) * .5; + var v1 = (y + 1) * .5; + var v2 = (1 - y) * .5; + // last element contains indices for data per vertex that can be passed to the vertex shader if necessary (ie: frustum corners for deferred rendering) + textureVerts = [-x, -y, u1, v1, 0, x, -y, u2, v1, 1, x, y, u2, v2, 2, -x, y, u1, v2, 3]; + screenVerts = [-1, -1, u1, v1, 0, 1, -1, u2, v1, 1, 1, 1, u2, v2, 2, -1, 1, u1, v2, 3]; + this._renderToTextureVertexBuffer.uploadFromArray(textureVerts, 0, 4); + this._renderToScreenVertexBuffer.uploadFromArray(screenVerts, 0, 4); + this._buffersInvalid = false; }; - ContextStage3D.prototype.setDepthTest = function (depthMask, passCompareMode) { - this.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask ? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + "$"); - if (ContextStage3D.debug) - this.execute(); + return RTTBufferManager; +})(EventDispatcher); +var RTTBufferManagerVO = (function () { + function RTTBufferManagerVO() { + } + return RTTBufferManagerVO; +})(); +module.exports = RTTBufferManager; + + +},{"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/TextureUtils":undefined}],"awayjs-stagegl/lib/managers/StageManager":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); +var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); +var StageEvent = require("awayjs-display/lib/events/StageEvent"); +var Stage = require("awayjs-stagegl/lib/base/Stage"); +/** + * The StageManager class provides a multiton object that handles management for Stage objects. + * + * @see away.base.Stage + */ +var StageManager = (function (_super) { + __extends(StageManager, _super); + /** + * Creates a new StageManager class. + * @param stage The Stage object that contains the Stage objects to be managed. + * @private + */ + function StageManager() { + var _this = this; + _super.call(this); + this._stages = new Array(StageManager.STAGE_MAX_QUANTITY); + this._onContextCreatedDelegate = function (event) { return _this.onContextCreated(event); }; + } + /** + * Gets a StageManager instance for the given Stage object. + * @param stage The Stage object that contains the Stage objects to be managed. + * @return The StageManager instance for the given Stage object. + */ + StageManager.getInstance = function () { + if (this._instance == null) + this._instance = new StageManager(); + return this._instance; }; - ContextStage3D.prototype.dispose = function () { - if (this._pContainer == null) - return; - console.log("Context3D dispose, releasing " + this._resources.length + " resources."); - while (this._resources.length) - this._resources[0].dispose(); - if (this._pContainer) { - // encode command - this.addStream(String.fromCharCode(OpCodes.disposeContext)); - this.execute(); - swfobject.removeSWF(this._oldCanvas.id); - if (this._oldCanvas && this._oldParent) { - this._oldParent.appendChild(this._oldCanvas); - this._oldParent = null; - } - this._pContainer = null; + /** + * Requests the Stage for the given index. + * + * @param index The index of the requested Stage. + * @param forceSoftware Whether to force software mode even if hardware acceleration is available. + * @param profile The compatibility profile, an enumeration of ContextProfile + * @return The Stage for the given index. + */ + StageManager.prototype.getStageAt = function (index, forceSoftware, profile, mode) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } + if (index < 0 || index >= StageManager.STAGE_MAX_QUANTITY) + throw new ArgumentError("Index is out of bounds [0.." + StageManager.STAGE_MAX_QUANTITY + "]"); + if (!this._stages[index]) { + StageManager._numStages++; + var canvas = document.createElement("canvas"); + canvas.id = "stage" + index; + document.body.appendChild(canvas); + var stage = this._stages[index] = new Stage(canvas, index, this, forceSoftware, profile); + stage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate); + stage.requestContext(forceSoftware, profile, mode); } - this._oldCanvas = null; + return stage; }; - ContextStage3D.prototype.addStream = function (stream) { - this._cmdStream += stream; + /** + * Removes a Stage from the manager. + * @param stage + * @private + */ + StageManager.prototype.iRemoveStage = function (stage) { + StageManager._numStages--; + stage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate); + this._stages[stage.stageIndex] = null; }; - ContextStage3D.prototype.execute = function () { - if (ContextStage3D.logStream) - console.log(this._cmdStream); - var result = this._pContainer["CallFunction"]("" + this._cmdStream + ""); - if (Number(result) <= -3) - throw "Exec stream failed"; - this._cmdStream = ""; - return Number(result); + /** + * Get the next available stage. An error is thrown if there are no StageProxies available + * @param forceSoftware Whether to force software mode even if hardware acceleration is available. + * @param profile The compatibility profile, an enumeration of ContextProfile + * @return The allocated stage + */ + StageManager.prototype.getFreeStage = function (forceSoftware, profile, mode) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } + var i = 0; + var len = this._stages.length; + while (i < len) { + if (!this._stages[i]) + return this.getStageAt(i, forceSoftware, profile, mode); + ++i; + } + return null; }; - ContextStage3D.contexts = new Object(); - ContextStage3D.maxvertexconstants = 128; - ContextStage3D.maxfragconstants = 28; - ContextStage3D.maxtemp = 8; - ContextStage3D.maxstreams = 8; - ContextStage3D.maxtextures = 8; - ContextStage3D.defaultsampler = new Sampler(); - ContextStage3D.debug = false; - ContextStage3D.logStream = false; - return ContextStage3D; -})(ContextGLBase); -/** -* global function for flash callback -*/ -function mountain_js_context_available(id, driverInfo) { - var ctx = ContextStage3D.contexts[id]; - if (ctx._iCallback) { - ctx._iDriverInfo = driverInfo; - // get out of the current JS stack frame and call back from flash player - var timeOutId = window.setTimeout(function () { - window.clearTimeout(timeOutId); - try { - ctx._iCallback(ctx); - } - catch (e) { - console.log("Callback failed during flash initialization with '" + e.toString() + "'"); - } - }, 1); - } -} -module.exports = ContextStage3D; + Object.defineProperty(StageManager.prototype, "hasFreeStage", { + /** + * Checks if a new stage can be created and managed by the class. + * @return true if there is one slot free for a new stage + */ + get: function () { + return StageManager._numStages < StageManager.STAGE_MAX_QUANTITY ? true : false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StageManager.prototype, "numSlotsFree", { + /** + * Returns the amount of stage objects that can be created and managed by the class + * @return the amount of free slots + */ + get: function () { + return StageManager.STAGE_MAX_QUANTITY - StageManager._numStages; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StageManager.prototype, "numSlotsUsed", { + /** + * Returns the amount of Stage objects currently managed by the class. + * @return the amount of slots used + */ + get: function () { + return StageManager._numStages; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StageManager.prototype, "numSlotsTotal", { + /** + * The maximum amount of Stage objects that can be managed by the class + */ + get: function () { + return this._stages.length; + }, + enumerable: true, + configurable: true + }); + StageManager.prototype.onContextCreated = function (event) { + //var stage:Stage = e.target; + //document.body.appendChild(stage.canvas) + }; + StageManager.STAGE_MAX_QUANTITY = 8; + StageManager._numStages = 0; + return StageManager; +})(EventDispatcher); +module.exports = StageManager; -},{"awayjs-stagegl/lib/aglsl/Sampler":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBase":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":undefined,"awayjs-stagegl/lib/core/stagegl/CubeTextureFlash":undefined,"awayjs-stagegl/lib/core/stagegl/IndexBufferFlash":undefined,"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ProgramFlash":undefined,"awayjs-stagegl/lib/core/stagegl/TextureFlash":undefined,"awayjs-stagegl/lib/core/stagegl/VertexBufferFlash":undefined,"awayjs-stagegl/lib/swfobject":undefined}],"awayjs-stagegl/lib/core/stagegl/ContextWebGL":[function(require,module,exports){ +},{"awayjs-core/lib/errors/ArgumentError":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-stagegl/lib/base/Stage":undefined}],"awayjs-stagegl/lib/materials/LineBasicMaterial":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var ByteArray = require("awayjs-core/lib/utils/ByteArray"); -var ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var CubeTextureWebGL = require("awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL"); -var IndexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL"); -var ProgramWebGL = require("awayjs-stagegl/lib/core/stagegl/ProgramWebGL"); -var TextureWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureWebGL"); -var SamplerState = require("awayjs-stagegl/lib/core/stagegl/SamplerState"); -var VertexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL"); -var ContextWebGL = (function (_super) { - __extends(ContextWebGL, _super); - function ContextWebGL(canvas, stageIndex) { - _super.call(this, stageIndex); - this._blendFactorDictionary = new Object(); - this._depthTestDictionary = new Object(); - this._textureIndexDictionary = new Array(8); - this._textureTypeDictionary = new Object(); - this._wrapDictionary = new Object(); - this._filterDictionary = new Object(); - this._mipmapFilterDictionary = new Object(); - this._uniformLocationNameDictionary = new Object(); - this._vertexBufferDimensionDictionary = new Object(); - this._indexBufferList = new Array(); - this._vertexBufferList = new Array(); - this._textureList = new Array(); - this._programList = new Array(); - this._samplerStates = new Array(8); - this._pContainer = canvas; - try { - this._gl = canvas.getContext("experimental-webgl", { premultipliedAlpha: false, alpha: false }); - if (!this._gl) - this._gl = canvas.getContext("webgl", { premultipliedAlpha: false, alpha: false }); - } - catch (e) { - } - if (this._gl) { - //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) ); - //setup shortcut dictionaries - this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; - this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO; - this._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS; - this._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL; - this._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER; - this._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL; - this._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS; - this._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL; - this._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER; - this._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL; - this._textureIndexDictionary[0] = this._gl.TEXTURE0; - this._textureIndexDictionary[1] = this._gl.TEXTURE1; - this._textureIndexDictionary[2] = this._gl.TEXTURE2; - this._textureIndexDictionary[3] = this._gl.TEXTURE3; - this._textureIndexDictionary[4] = this._gl.TEXTURE4; - this._textureIndexDictionary[5] = this._gl.TEXTURE5; - this._textureIndexDictionary[6] = this._gl.TEXTURE6; - this._textureIndexDictionary[7] = this._gl.TEXTURE7; - this._textureTypeDictionary["texture2d"] = this._gl.TEXTURE_2D; - this._textureTypeDictionary["textureCube"] = this._gl.TEXTURE_CUBE_MAP; - this._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT; - this._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE; - this._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR; - this._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object(); - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object(); - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST; - this._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = "vc"; - this._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = "fc"; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4; - } - else { - //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) ); - alert("WebGL is not available."); - } - for (var i = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) { - this._samplerStates[i] = new SamplerState(); - this._samplerStates[i].wrap = this._gl.REPEAT; - this._samplerStates[i].filter = this._gl.LINEAR; - this._samplerStates[i].mipfilter = this._gl.LINEAR; - } +var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); +var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); +var LineBasicPass = require("awayjs-stagegl/lib/materials/passes/LineBasicPass"); +/** + * LineMaterial is a material exclusively used to render wireframe objects + * + * @see away.entities.Lines + */ +var LineBasicMaterial = (function (_super) { + __extends(LineBasicMaterial, _super); + /** + * Creates a new LineMaterial object. + * + * @param thickness The thickness of the wireframe lines. + */ + function LineBasicMaterial(thickness) { + if (thickness === void 0) { thickness = 1.25; } + _super.call(this); + this._constants = new Array(0, 0, 0, 0); + this._thickness = thickness; + this.bothSides = true; + this._pAddScreenPass(this._screenPass = new LineBasicPass()); + this._calcMatrix = new Matrix3D(); + this._constants[1] = 1 / 255; + } + /** + * @inheritDoc + */ + LineBasicMaterial.prototype._iGetVertexCode = function (shaderObject, regCache, sharedReg) { + return "m44 vt0, va0, vc8 \n" + "m44 vt1, va1, vc8 \n" + "sub vt2, vt1, vt0 \n" + "slt vt5.x, vt0.z, vc7.z \n" + "sub vt5.y, vc5.x, vt5.x \n" + "add vt4.x, vt0.z, vc7.z \n" + "sub vt4.y, vt0.z, vt1.z \n" + "seq vt4.z, vt4.y vc6.x \n" + "add vt4.y, vt4.y, vt4.z \n" + "div vt4.z, vt4.x, vt4.y \n" + "mul vt4.xyz, vt4.zzz, vt2.xyz \n" + "add vt3.xyz, vt0.xyz, vt4.xyz \n" + "mov vt3.w, vc5.x \n" + "mul vt0, vt0, vt5.yyyy \n" + "mul vt3, vt3, vt5.xxxx \n" + "add vt0, vt0, vt3 \n" + "sub vt2, vt1, vt0 \n" + "nrm vt2.xyz, vt2.xyz \n" + "nrm vt5.xyz, vt0.xyz \n" + "mov vt5.w, vc5.x \n" + "crs vt3.xyz, vt2, vt5 \n" + "nrm vt3.xyz, vt3.xyz \n" + "mul vt3.xyz, vt3.xyz, va2.xxx \n" + "mov vt3.w, vc5.x \n" + "dp3 vt4.x, vt0, vc6 \n" + "mul vt4.x, vt4.x, vc7.x \n" + "mul vt3.xyz, vt3.xyz, vt4.xxx \n" + "add vt0.xyz, vt0.xyz, vt3.xyz \n" + "m44 op, vt0, vc0 \n" + "mov v0, va3 \n"; + }; + /** + * @inheritDoc + */ + LineBasicMaterial.prototype._iActivatePass = function (pass, stage, camera) { + _super.prototype._iActivatePass.call(this, pass, stage, camera); + var context = stage.context; + this._constants[0] = this._thickness / ((stage.scissorRect) ? Math.min(stage.scissorRect.width, stage.scissorRect.height) : Math.min(stage.width, stage.height)); + // value to convert distance from camera to model length per pixel width + this._constants[2] = camera.projection.near; + context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 5, LineBasicMaterial.pONE_VECTOR, 1); + context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 6, LineBasicMaterial.pFRONT_VECTOR, 1); + context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 7, this._constants, 1); + // projection matrix + context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, camera.projection.matrix, true); + }; + /** + * @inheritDoc + */ + LineBasicMaterial.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { + _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); + var context = stage.context; + this._calcMatrix.copyFrom(renderable.sourceEntity.sceneTransform); + this._calcMatrix.append(camera.inverseSceneTransform); + context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 8, this._calcMatrix, true); + context.activateBuffer(0, renderable.getVertexData(LineSubGeometry.START_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.START_POSITION_DATA), LineSubGeometry.POSITION_FORMAT); + context.activateBuffer(1, renderable.getVertexData(LineSubGeometry.END_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.END_POSITION_DATA), LineSubGeometry.POSITION_FORMAT); + context.activateBuffer(2, renderable.getVertexData(LineSubGeometry.THICKNESS_DATA), renderable.getVertexOffset(LineSubGeometry.THICKNESS_DATA), LineSubGeometry.THICKNESS_FORMAT); + context.activateBuffer(3, renderable.getVertexData(LineSubGeometry.COLOR_DATA), renderable.getVertexOffset(LineSubGeometry.COLOR_DATA), LineSubGeometry.COLOR_FORMAT); + context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); + }; + LineBasicMaterial.pONE_VECTOR = Array(1, 1, 1, 1); + LineBasicMaterial.pFRONT_VECTOR = Array(0, 0, -1, 0); + return LineBasicMaterial; +})(StageGLMaterialBase); +module.exports = LineBasicMaterial; + + +},{"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-display/lib/base/LineSubGeometry":undefined,"awayjs-stagegl/lib/base/ContextGLProgramType":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/LineBasicPass":undefined}],"awayjs-stagegl/lib/materials/SkyboxMaterial":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); +var SkyboxPass = require("awayjs-stagegl/lib/materials/passes/SkyboxPass"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +/** + * SkyboxMaterial is a material exclusively used to render skyboxes + * + * @see away3d.primitives.Skybox + */ +var SkyboxMaterial = (function (_super) { + __extends(SkyboxMaterial, _super); + /** + * Creates a new SkyboxMaterial object. + * @param cubeMap The CubeMap to use as the skybox. + */ + function SkyboxMaterial(cubeMap, smooth, repeat, mipmap) { + if (smooth === void 0) { smooth = true; } + if (repeat === void 0) { repeat = false; } + if (mipmap === void 0) { mipmap = false; } + _super.call(this); + this._cubeMap = cubeMap; + this._pAddScreenPass(this._skyboxPass = new SkyboxPass()); + this._vertexData = new Array(0, 0, 0, 0, 1, 1, 1, 1); } - Object.defineProperty(ContextWebGL.prototype, "container", { + Object.defineProperty(SkyboxMaterial.prototype, "cubeMap", { + /** + * The cube texture to use as the skybox. + */ get: function () { - return this._pContainer; + return this._cubeMap; + }, + set: function (value) { + if (value && this._cubeMap && (value.hasMipmaps != this._cubeMap.hasMipmaps || value.format != this._cubeMap.format)) + this._pInvalidatePasses(); + this._cubeMap = value; }, enumerable: true, configurable: true }); - ContextWebGL.prototype.gl = function () { - return this._gl; - }; - ContextWebGL.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - if (!this._drawing) { - this.updateBlendStatus(); - this._drawing = true; - } - var glmask = 0; - if (mask & ContextGLClearMask.COLOR) - glmask |= this._gl.COLOR_BUFFER_BIT; - if (mask & ContextGLClearMask.STENCIL) - glmask |= this._gl.STENCIL_BUFFER_BIT; - if (mask & ContextGLClearMask.DEPTH) - glmask |= this._gl.DEPTH_BUFFER_BIT; - this._gl.clearColor(red, green, blue, alpha); - this._gl.clearDepth(depth); - this._gl.clearStencil(stencil); - this._gl.clear(glmask); - }; - ContextWebGL.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); - if (enableDepthAndStencil) { - this._gl.enable(this._gl.STENCIL_TEST); - this._gl.enable(this._gl.DEPTH_TEST); - } - this._gl.viewport['width'] = width; - this._gl.viewport['height'] = height; - this._gl.viewport(0, 0, width, height); - }; - ContextWebGL.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - var texture = new CubeTextureWebGL(this._gl, size); - this._textureList.push(texture); - return texture; - }; - ContextWebGL.prototype.createIndexBuffer = function (numIndices) { - var indexBuffer = new IndexBufferWebGL(this._gl, numIndices); - this._indexBufferList.push(indexBuffer); - return indexBuffer; - }; - ContextWebGL.prototype.createProgram = function () { - var program = new ProgramWebGL(this._gl); - this._programList.push(program); - return program; - }; - ContextWebGL.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO streaming - var texture = new TextureWebGL(this._gl, width, height); - this._textureList.push(texture); - return texture; - }; - ContextWebGL.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - var vertexBuffer = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex); - this._vertexBufferList.push(vertexBuffer); - return vertexBuffer; - }; - ContextWebGL.prototype.dispose = function () { - var i; - for (i = 0; i < this._indexBufferList.length; ++i) - this._indexBufferList[i].dispose(); - this._indexBufferList = null; - for (i = 0; i < this._vertexBufferList.length; ++i) - this._vertexBufferList[i].dispose(); - this._vertexBufferList = null; - for (i = 0; i < this._textureList.length; ++i) - this._textureList[i].dispose(); - this._textureList = null; - for (i = 0; i < this._programList.length; ++i) - this._programList[i].dispose(); - for (i = 0; i < this._samplerStates.length; ++i) - this._samplerStates[i] = null; - this._programList = null; - }; - ContextWebGL.prototype.drawToBitmapData = function (destination) { - var arrayBuffer = new ArrayBuffer(destination.width * destination.height * 4); - this._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer)); - var byteArray = new ByteArray(); - byteArray.setArrayBuffer(arrayBuffer); - destination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray); - }; - ContextWebGL.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { - if (firstIndex === void 0) { firstIndex = 0; } - if (numTriangles === void 0) { numTriangles = -1; } - if (!this._drawing) - throw "Need to clear before drawing if the buffer has not been cleared since the last present() call."; - this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer); - this._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1) ? indexBuffer.numIndices : numTriangles * 3, this._gl.UNSIGNED_SHORT, firstIndex); - }; - ContextWebGL.prototype.present = function () { - this._drawing = false; + /** + * @inheritDoc + */ + SkyboxMaterial.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return "mul vt0, va0, vc5\n" + "add vt0, vt0, vc4\n" + "m44 op, vt0, vc0\n" + "mov v0, va0\n"; }; - ContextWebGL.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { - this._blendEnabled = true; - this._blendSourceFactor = this._blendFactorDictionary[sourceFactor]; - this._blendDestinationFactor = this._blendFactorDictionary[destinationFactor]; - this.updateBlendStatus(); + /** + * @inheritDoc + */ + SkyboxMaterial.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + //var cubeMapReg:ShaderRegisterElement = registerCache.getFreeTextureReg(); + //this._texturesIndex = cubeMapReg.index; + //ShaderCompilerHelper.getTexCubeSampleCode(sharedRegisters.shadedTarget, cubeMapReg, this._cubeTexture, shaderObject.useSmoothTextures, shaderObject.useMipmapping); + var mip = ",mipnone"; + if (this._cubeMap.hasMipmaps) + mip = ",miplinear"; + return "tex ft0, v0, fs0 \n"; }; - ContextWebGL.prototype.setColorMask = function (red, green, blue, alpha) { - this._gl.colorMask(red, green, blue, alpha); + /** + * @inheritDoc + */ + SkyboxMaterial.prototype._iActivatePass = function (pass, stage, camera) { + _super.prototype._iActivatePass.call(this, pass, stage, camera); + var context = stage.context; + context.setSamplerStateAt(0, ContextGLWrapMode.CLAMP, ContextGLTextureFilter.LINEAR, this._cubeMap.hasMipmaps ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + context.setDepthTest(false, ContextGLCompareMode.LESS); + context.activateCubeTexture(0, this._cubeMap); }; - ContextWebGL.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { - if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } - if (triangleFaceToCull == ContextGLTriangleFace.NONE) { - this._gl.disable(this._gl.CULL_FACE); - } - else { - this._gl.enable(this._gl.CULL_FACE); - switch (triangleFaceToCull) { - case ContextGLTriangleFace.BACK: - this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.FRONT : this._gl.BACK); - break; - case ContextGLTriangleFace.FRONT: - this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.BACK : this._gl.FRONT); - break; - case ContextGLTriangleFace.FRONT_AND_BACK: - this._gl.cullFace(this._gl.FRONT_AND_BACK); - break; - default: - throw "Unknown ContextGLTriangleFace type."; - } - } + /** + * @inheritDoc + */ + SkyboxMaterial.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { + _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); + var context = stage.context; + var pos = camera.scenePosition; + this._vertexData[0] = pos.x; + this._vertexData[1] = pos.y; + this._vertexData[2] = pos.z; + this._vertexData[4] = this._vertexData[5] = this._vertexData[6] = camera.projection.far / Math.sqrt(3); + context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, viewProjection, true); + context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 4, this._vertexData, 2); + context.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT); + context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); }; - // TODO ContextGLCompareMode - ContextWebGL.prototype.setDepthTest = function (depthMask, passCompareMode) { - this._gl.depthFunc(this._depthTestDictionary[passCompareMode]); - this._gl.depthMask(depthMask); + return SkyboxMaterial; +})(StageGLMaterialBase); +module.exports = SkyboxMaterial; + + +},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLProgramType":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/SkyboxPass":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/StageGLMaterialBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); +var StageGLMaterialBase = (function (_super) { + __extends(StageGLMaterialBase, _super); + function StageGLMaterialBase() { + _super.apply(this, arguments); + } + StageGLMaterialBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; }; - ContextWebGL.prototype.setProgram = function (program) { - //TODO decide on construction/reference resposibilities - this._currentProgram = program; - program.focusProgram(); + StageGLMaterialBase.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; }; - ContextWebGL.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { - //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); - if (transposedMatrix === void 0) { transposedMatrix = false; } - //TODO remove special case for WebGL matrix calls? - var d = matrix.rawData; - if (transposedMatrix) { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); + return StageGLMaterialBase; +})(MaterialBase); +module.exports = StageGLMaterialBase; + + +},{"awayjs-display/lib/materials/MaterialBase":undefined}],"awayjs-stagegl/lib/materials/TriangleBasicMaterial":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); +var BlendMode = require("awayjs-display/lib/base/BlendMode"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var TriangleBasicPass = require("awayjs-stagegl/lib/materials/passes/TriangleBasicPass"); +var TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); +/** + * TriangleMaterial forms an abstract base class for the default shaded materials provided by Stage, + * using material methods to define their appearance. + */ +var TriangleBasicMaterial = (function (_super) { + __extends(TriangleBasicMaterial, _super); + function TriangleBasicMaterial(textureColor, smoothAlpha, repeat, mipmap) { + if (textureColor === void 0) { textureColor = null; } + if (smoothAlpha === void 0) { smoothAlpha = null; } + if (repeat === void 0) { repeat = false; } + if (mipmap === void 0) { mipmap = false; } + _super.call(this); + this._alphaBlending = false; + this._alpha = 1; + this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; + this._screenPass = new TriangleBasicPass(); + if (textureColor instanceof Texture2DBase) { + this.texture = textureColor; + this.smooth = (smoothAlpha == null) ? true : false; + this.repeat = repeat; + this.mipmap = mipmap; } else { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); + this.color = textureColor ? Number(textureColor) : 0xCCCCCC; + this.alpha = (smoothAlpha == null) ? 1 : Number(smoothAlpha); } - }; - ContextWebGL.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { - if (numRegisters === void 0) { numRegisters = -1; } - var locationName = this._uniformLocationNameDictionary[programType]; - var startIndex; - for (var i = 0; i < numRegisters; i++) { - startIndex = i * 4; - this._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]); + } + Object.defineProperty(TriangleBasicMaterial.prototype, "depthCompareMode", { + /** + * The depth compare mode used to render the renderables using this material. + * + * @see away.stagegl.ContextGLCompareMode + */ + get: function () { + return this._depthCompareMode; + }, + set: function (value) { + if (this._depthCompareMode == value) + return; + this._depthCompareMode = value; + this._pInvalidatePasses(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleBasicMaterial.prototype, "alpha", { + /** + * The alpha of the surface. + */ + get: function () { + return this._alpha; + }, + set: function (value) { + if (value > 1) + value = 1; + else if (value < 0) + value = 0; + if (this._alpha == value) + return; + this._alpha = value; + this._pInvalidatePasses(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleBasicMaterial.prototype, "alphaBlending", { + /** + * Indicates whether or not the material has transparency. If binary transparency is sufficient, for + * example when using textures of foliage, consider using alphaThreshold instead. + */ + get: function () { + return this._alphaBlending; + }, + set: function (value) { + if (this._alphaBlending == value) + return; + this._alphaBlending = value; + this._pInvalidatePasses(); + }, + enumerable: true, + configurable: true + }); + /** + * @inheritDoc + */ + TriangleBasicMaterial.prototype.iUpdateMaterial = function () { + var passesInvalid; + if (this._pScreenPassesInvalid) { + this.pUpdateScreenPasses(); + passesInvalid = true; } - }; - ContextWebGL.prototype.setScissorRectangle = function (rectangle) { - if (!rectangle) { - this._gl.disable(this._gl.SCISSOR_TEST); - return; + if (passesInvalid) { + this._pClearScreenPasses(); + this._pAddScreenPass(this._screenPass); } - this._gl.enable(this._gl.SCISSOR_TEST); - this._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height); }; - ContextWebGL.prototype.setTextureAt = function (sampler, texture) { - var samplerState = this._samplerStates[sampler]; - if (this._activeTexture != sampler && (texture || samplerState.type)) { - this._activeTexture = sampler; - this._gl.activeTexture(this._textureIndexDictionary[sampler]); - } - if (!texture) { - if (samplerState.type) { - this._gl.bindTexture(samplerState.type, null); - samplerState.type = null; - } - return; - } - var textureType = this._textureTypeDictionary[texture.textureType]; - samplerState.type = textureType; - this._gl.bindTexture(textureType, texture.glTexture); - this._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, "fs" + sampler), sampler); - this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap); - this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap); - this._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter); - this._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter); + /** + * Updates screen passes when they were found to be invalid. + */ + TriangleBasicMaterial.prototype.pUpdateScreenPasses = function () { + this.initPasses(); + this.setBlendAndCompareModes(); + this._pScreenPassesInvalid = false; }; - ContextWebGL.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { - if (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) { - this._samplerStates[sampler].wrap = this._wrapDictionary[wrap]; - this._samplerStates[sampler].filter = this._filterDictionary[filter]; - this._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter]; - } - else { - throw "Sampler is out of bounds."; - } + /** + * Initializes all the passes and their dependent passes. + */ + TriangleBasicMaterial.prototype.initPasses = function () { + // }; - ContextWebGL.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } - var location = this._currentProgram ? this._gl.getAttribLocation(this._currentProgram.glProgram, "va" + index) : -1; - if (!buffer) { - if (location > -1) - this._gl.disableVertexAttribArray(location); - return; - } - this._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer); - this._gl.enableVertexAttribArray(location); - this._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex * 4, bufferOffset * 4); + /** + * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes. + */ + TriangleBasicMaterial.prototype.setBlendAndCompareModes = function () { + this._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || this._alpha < 1); + this._screenPass.depthCompareMode = this._depthCompareMode; + this._screenPass.preserveAlpha = this._pRequiresBlending; + this._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending) ? BlendMode.LAYER : this._pBlendMode); + this._screenPass.forceSeparateMVP = false; }; - ContextWebGL.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - var texture = target; - var frameBuffer = texture.frameBuffer; - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer); - if (enableDepthAndStencil) { - this._gl.enable(this._gl.STENCIL_TEST); - this._gl.enable(this._gl.DEPTH_TEST); + return TriangleBasicMaterial; +})(TriangleMaterialBase); +module.exports = TriangleBasicMaterial; + + +},{"awayjs-core/lib/textures/Texture2DBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/TriangleBasicPass":undefined}],"awayjs-stagegl/lib/materials/TriangleMaterialBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Matrix3DUtils = require("awayjs-core/lib/geom/Matrix3DUtils"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); +/** + * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, + * using material methods to define their appearance. + */ +var TriangleMaterialBase = (function (_super) { + __extends(TriangleMaterialBase, _super); + function TriangleMaterialBase() { + _super.apply(this, arguments); + } + TriangleMaterialBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + //get the projection coordinates + var position = (shaderObject.globalPosDependencies > 0) ? sharedRegisters.globalPositionVertex : sharedRegisters.localPosition; + //reserving vertex constants for projection matrix + var viewMatrixReg = registerCache.getFreeVertexConstant(); + registerCache.getFreeVertexConstant(); + registerCache.getFreeVertexConstant(); + registerCache.getFreeVertexConstant(); + shaderObject.viewMatrixIndex = viewMatrixReg.index * 4; + if (shaderObject.projectionDependencies > 0) { + sharedRegisters.projectionFragment = registerCache.getFreeVarying(); + var temp = registerCache.getFreeVertexVectorTemp(); + code += "m44 " + temp + ", " + position + ", " + viewMatrixReg + "\n" + "mov " + sharedRegisters.projectionFragment + ", " + temp + "\n" + "mov op, " + temp + "\n"; + } + else { + code += "m44 op, " + position + ", " + viewMatrixReg + "\n"; } - this._gl.viewport(0, 0, texture.width, texture.height); - }; - ContextWebGL.prototype.setRenderToBackBuffer = function () { - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); + return code; }; - ContextWebGL.prototype.updateBlendStatus = function () { - if (this._blendEnabled) { - this._gl.enable(this._gl.BLEND); - this._gl.blendEquation(this._gl.FUNC_ADD); - this._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor); + /** + * @inheritDoc + */ + TriangleMaterialBase.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { + _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); + var shaderObject = pass.shaderObject; + if (shaderObject.sceneMatrixIndex >= 0) { + renderable.sourceEntity.getRenderSceneTransform(camera).copyRawDataTo(shaderObject.vertexConstantData, shaderObject.sceneMatrixIndex, true); + viewProjection.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true); } else { - this._gl.disable(this._gl.BLEND); + var matrix3D = Matrix3DUtils.CALCULATION_MATRIX; + matrix3D.copyFrom(renderable.sourceEntity.getRenderSceneTransform(camera)); + matrix3D.append(viewProjection); + matrix3D.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true); } + var context = stage.context; + context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 0, shaderObject.vertexConstantData, shaderObject.numUsedVertexConstants); + context.setProgramConstantsFromArray(ContextGLProgramType.FRAGMENT, 0, shaderObject.fragmentConstantData, shaderObject.numUsedFragmentConstants); + context.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT); + context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); }; - ContextWebGL.MAX_SAMPLERS = 8; - ContextWebGL.modulo = 0; - return ContextWebGL; -})(ContextGLBase); -module.exports = ContextWebGL; + return TriangleMaterialBase; +})(StageGLMaterialBase); +module.exports = TriangleMaterialBase; + + +},{"awayjs-core/lib/geom/Matrix3DUtils":undefined,"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/base/ContextGLProgramType":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined}],"awayjs-stagegl/lib/materials/TriangleMaterialMode":[function(require,module,exports){ +var TriangleMaterialMode = (function () { + function TriangleMaterialMode() { + } + /** + * + */ + TriangleMaterialMode.SINGLE_PASS = "singlePass"; + /** + * + */ + TriangleMaterialMode.MULTI_PASS = "multiPass"; + return TriangleMaterialMode; +})(); +module.exports = TriangleMaterialMode; -},{"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/ByteArray":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBase":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL":undefined,"awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL":undefined,"awayjs-stagegl/lib/core/stagegl/ProgramWebGL":undefined,"awayjs-stagegl/lib/core/stagegl/SamplerState":undefined,"awayjs-stagegl/lib/core/stagegl/TextureWebGL":undefined,"awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL":undefined}],"awayjs-stagegl/lib/core/stagegl/CubeTextureFlash":[function(require,module,exports){ +},{}],"awayjs-stagegl/lib/materials/TriangleMethodMaterial":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var CubeTextureFlash = (function (_super) { - __extends(CubeTextureFlash, _super); - function CubeTextureFlash(context, size, format, forRTT, streaming) { - if (streaming === void 0) { streaming = false; } +var ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); +var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); +var BlendMode = require("awayjs-display/lib/base/BlendMode"); +var StaticLightPicker = require("awayjs-display/lib/materials/lightpickers/StaticLightPicker"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var AmbientBasicMethod = require("awayjs-stagegl/lib/materials/methods/AmbientBasicMethod"); +var DiffuseBasicMethod = require("awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod"); +var NormalBasicMethod = require("awayjs-stagegl/lib/materials/methods/NormalBasicMethod"); +var SpecularBasicMethod = require("awayjs-stagegl/lib/materials/methods/SpecularBasicMethod"); +var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); +var TriangleMethodPass = require("awayjs-stagegl/lib/materials/passes/TriangleMethodPass"); +var TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); +var TriangleMaterialMode = require("awayjs-stagegl/lib/materials/TriangleMaterialMode"); +/** + * TriangleMethodMaterial forms an abstract base class for the default shaded materials provided by Stage, + * using material methods to define their appearance. + */ +var TriangleMethodMaterial = (function (_super) { + __extends(TriangleMethodMaterial, _super); + function TriangleMethodMaterial(textureColor, smoothAlpha, repeat, mipmap) { + if (textureColor === void 0) { textureColor = null; } + if (smoothAlpha === void 0) { smoothAlpha = null; } + if (repeat === void 0) { repeat = false; } + if (mipmap === void 0) { mipmap = false; } _super.call(this); - this._context = context; - this._size = size; - this._context.addStream(String.fromCharCode(OpCodes.initCubeTexture, (forRTT ? OpCodes.trueValue : OpCodes.falseValue)) + size + "," + streaming + "," + format + "$"); - this._pId = this._context.execute(); - this._context._iAddResource(this); + this._alphaBlending = false; + this._alpha = 1; + this._ambientMethod = new AmbientBasicMethod(); + this._diffuseMethod = new DiffuseBasicMethod(); + this._normalMethod = new NormalBasicMethod(); + this._specularMethod = new SpecularBasicMethod(); + this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; + this._materialMode = TriangleMaterialMode.SINGLE_PASS; + if (textureColor instanceof Texture2DBase) { + this.texture = textureColor; + this.smooth = (smoothAlpha == null) ? true : false; + this.repeat = repeat; + this.mipmap = mipmap; + } + else { + this.color = (textureColor == null) ? 0xFFFFFF : Number(textureColor); + this.alpha = (smoothAlpha == null) ? 1 : Number(smoothAlpha); + } } - Object.defineProperty(CubeTextureFlash.prototype, "size", { + Object.defineProperty(TriangleMethodMaterial.prototype, "materialMode", { get: function () { - return this._size; + return this._materialMode; + }, + set: function (value) { + if (this._materialMode == value) + return; + this._materialMode = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - CubeTextureFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeCubeTexture) + this._pId.toString() + ","); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; - }; - CubeTextureFlash.prototype.uploadFromData = function (data, side, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) { - data = data.imageData.data; - } - else if (data instanceof HTMLImageElement) { - var can = document.createElement("canvas"); - var w = data.width; - var h = data.height; - can.width = w; - can.height = h; - var ctx = can.getContext("2d"); - ctx.drawImage(data, 0, 0); - data = ctx.getImageData(0, 0, w, h).data; - } - var pos = 0; - var bytes = ByteArrayBase.internalGetBase64String(data.length, function () { - return data[pos++]; - }, null); - this._context.addStream(String.fromCharCode(OpCodes.uploadBytesCubeTexture) + this._pId + "," + miplevel + "," + side + "," + (this.size >> miplevel) + "," + bytes + "%"); - this._context.execute(); - }; - CubeTextureFlash.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { - if (async === void 0) { async = false; } - }; - return CubeTextureFlash; -})(ResourceBaseFlash); -module.exports = CubeTextureFlash; - - -},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/utils/ByteArrayBase":undefined,"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); -var CubeTextureWebGL = (function (_super) { - __extends(CubeTextureWebGL, _super); - function CubeTextureWebGL(gl, size) { - _super.call(this, gl); - this._textureSelectorDictionary = new Array(6); - this.textureType = "textureCube"; - this._size = size; - this._texture = this._gl.createTexture(); - this._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X; - this._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X; - this._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y; - this._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y; - this._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z; - this._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z; - } - CubeTextureWebGL.prototype.dispose = function () { - this._gl.deleteTexture(this._texture); - }; - CubeTextureWebGL.prototype.uploadFromData = function (data, side, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) - data = data.imageData; - this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture); - this._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); - this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null); - }; - CubeTextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { - if (async === void 0) { async = false; } - }; - Object.defineProperty(CubeTextureWebGL.prototype, "size", { + Object.defineProperty(TriangleMethodMaterial.prototype, "depthCompareMode", { + /** + * The depth compare mode used to render the renderables using this material. + * + * @see away.stagegl.ContextGLCompareMode + */ get: function () { - return this._size; + return this._depthCompareMode; + }, + set: function (value) { + if (this._depthCompareMode == value) + return; + this._depthCompareMode = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - Object.defineProperty(CubeTextureWebGL.prototype, "glTexture", { + Object.defineProperty(TriangleMethodMaterial.prototype, "alpha", { + /** + * The alpha of the surface. + */ + get: function () { + return this._alpha; + }, + set: function (value) { + if (value > 1) + value = 1; + else if (value < 0) + value = 0; + if (this._alpha == value) + return; + this._alpha = value; + if (this._colorTransform == null) + this._colorTransform = new ColorTransform(); + this._colorTransform.alphaMultiplier = value; + this._pInvalidatePasses(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodMaterial.prototype, "colorTransform", { + /** + * The ColorTransform object to transform the colour of the material with. Defaults to null. + */ + get: function () { + return this._screenPass.colorTransform; + }, + set: function (value) { + this._screenPass.colorTransform = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseTexture", { + /** + * The texture object to use for the ambient colour. + */ + get: function () { + return this._diffuseMethod.texture; + }, + set: function (value) { + this._diffuseMethod.texture = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodMaterial.prototype, "ambientMethod", { + /** + * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod. + */ get: function () { - return this._texture; + return this._ambientMethod; + }, + set: function (value) { + if (this._ambientMethod == value) + return; + if (value && this._ambientMethod) + value.copyFrom(this._ambientMethod); + this._ambientMethod = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - return CubeTextureWebGL; -})(TextureBaseWebGL); -module.exports = CubeTextureWebGL; - - -},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL":undefined}],"awayjs-stagegl/lib/core/stagegl/IContextStageGL":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/ICubeTexture":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/IIndexBuffer":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/IProgram":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/ITextureBase":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/ITexture":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/IVertexBuffer":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/core/stagegl/IndexBufferFlash":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var IndexBufferFlash = (function (_super) { - __extends(IndexBufferFlash, _super); - function IndexBufferFlash(context, numIndices) { - _super.call(this); - this._context = context; - this._numIndices = numIndices; - this._context.addStream(String.fromCharCode(OpCodes.initIndexBuffer, numIndices + OpCodes.intMask)); - this._pId = this._context.execute(); - this._context._iAddResource(this); - } - IndexBufferFlash.prototype.uploadFromArray = function (data, startOffset, count) { - this._context.addStream(String.fromCharCode(OpCodes.uploadArrayIndexBuffer, this._pId + OpCodes.intMask) + data.join() + "#" + startOffset + "," + count + ","); - this._context.execute(); - }; - IndexBufferFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeIndexBuffer, this._pId + OpCodes.intMask)); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; - }; - Object.defineProperty(IndexBufferFlash.prototype, "numIndices", { + Object.defineProperty(TriangleMethodMaterial.prototype, "shadowMethod", { + /** + * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null. + */ get: function () { - return this._numIndices; + return this._shadowMethod; + }, + set: function (value) { + if (this._shadowMethod == value) + return; + if (value && this._shadowMethod) + value.copyFrom(this._shadowMethod); + this._shadowMethod = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - return IndexBufferFlash; -})(ResourceBaseFlash); -module.exports = IndexBufferFlash; - - -},{"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL":[function(require,module,exports){ -var IndexBufferWebGL = (function () { - function IndexBufferWebGL(gl, numIndices) { - this._gl = gl; - this._buffer = this._gl.createBuffer(); - this._numIndices = numIndices; - } - IndexBufferWebGL.prototype.uploadFromArray = function (data, startOffset, count) { - this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer); - // TODO add index offsets - this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW); - }; - IndexBufferWebGL.prototype.dispose = function () { - this._gl.deleteBuffer(this._buffer); - }; - Object.defineProperty(IndexBufferWebGL.prototype, "numIndices", { + Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseMethod", { + /** + * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod. + */ get: function () { - return this._numIndices; + return this._diffuseMethod; + }, + set: function (value) { + if (this._diffuseMethod == value) + return; + if (value && this._diffuseMethod) + value.copyFrom(this._diffuseMethod); + this._diffuseMethod = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - Object.defineProperty(IndexBufferWebGL.prototype, "glBuffer", { + Object.defineProperty(TriangleMethodMaterial.prototype, "specularMethod", { + /** + * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod. + */ get: function () { - return this._buffer; + return this._specularMethod; + }, + set: function (value) { + if (this._specularMethod == value) + return; + if (value && this._specularMethod) + value.copyFrom(this._specularMethod); + this._specularMethod = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true - }); - return IndexBufferWebGL; -})(); -module.exports = IndexBufferWebGL; - - -},{}],"awayjs-stagegl/lib/core/stagegl/OpCodes":[function(require,module,exports){ -var OpCodes = (function () { - function OpCodes() { - } - OpCodes.trueValue = 32; - OpCodes.falseValue = 33; - OpCodes.intMask = 63; - OpCodes.drawTriangles = 41; - OpCodes.setProgramConstant = 42; - OpCodes.setProgram = 43; - OpCodes.present = 44; - OpCodes.clear = 45; - OpCodes.initProgram = 46; - OpCodes.initVertexBuffer = 47; - OpCodes.initIndexBuffer = 48; - OpCodes.configureBackBuffer = 49; - OpCodes.uploadArrayIndexBuffer = 50; - OpCodes.uploadArrayVertexBuffer = 51; - OpCodes.uploadAGALBytesProgram = 52; - OpCodes.setVertexBufferAt = 53; - OpCodes.uploadBytesIndexBuffer = 54; - OpCodes.uploadBytesVertexBuffer = 55; - OpCodes.setColorMask = 56; - OpCodes.setDepthTest = 57; - OpCodes.disposeProgram = 58; - OpCodes.disposeContext = 59; - // must skip 60 '<' as it will invalidate xml being passed over the bridge - OpCodes.disposeVertexBuffer = 61; - // must skip 62 '>' as it will invalidate xml being passed over the bridge - OpCodes.disposeIndexBuffer = 63; - OpCodes.initTexture = 64; - OpCodes.setTextureAt = 65; - OpCodes.uploadBytesTexture = 66; - OpCodes.disposeTexture = 67; - OpCodes.setCulling = 68; - OpCodes.setScissorRect = 69; - OpCodes.clearScissorRect = 70; - OpCodes.setBlendFactors = 71; - OpCodes.setRenderToTexture = 72; - OpCodes.clearTextureAt = 73; - OpCodes.clearVertexBufferAt = 74; - OpCodes.setStencilActions = 75; - OpCodes.setStencilReferenceValue = 76; - OpCodes.initCubeTexture = 77; - OpCodes.disposeCubeTexture = 78; - OpCodes.uploadBytesCubeTexture = 79; - OpCodes.clearRenderToTexture = 80; - OpCodes.enableErrorChecking = 81; - return OpCodes; -})(); -module.exports = OpCodes; - - -},{}],"awayjs-stagegl/lib/core/stagegl/ProgramFlash":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var ProgramFlash = (function (_super) { - __extends(ProgramFlash, _super); - function ProgramFlash(context) { - _super.call(this); - this._context = context; - this._context.addStream(String.fromCharCode(OpCodes.initProgram)); - this._pId = this._context.execute(); - this._context._iAddResource(this); - } - ProgramFlash.prototype.upload = function (vertexProgram, fragmentProgram) { - this._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + "%" + fragmentProgram.readBase64String(fragmentProgram.length) + "%"); - if (ContextStage3D.debug) - this._context.execute(); - }; - ProgramFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask)); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; - }; - return ProgramFlash; -})(ResourceBaseFlash); -module.exports = ProgramFlash; - - -},{"awayjs-stagegl/lib/core/stagegl/ContextStage3D":undefined,"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/core/stagegl/ProgramWebGL":[function(require,module,exports){ -var AGALTokenizer = require("awayjs-stagegl/lib/aglsl/AGALTokenizer"); -var AGLSLParser = require("awayjs-stagegl/lib/aglsl/AGLSLParser"); -var ProgramWebGL = (function () { - function ProgramWebGL(gl) { - this._gl = gl; - this._program = this._gl.createProgram(); - } - ProgramWebGL.prototype.upload = function (vertexProgram, fragmentProgram) { - var vertexString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram)); - var fragmentString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram)); - this._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER); - this._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER); - this._gl.shaderSource(this._vertexShader, vertexString); - this._gl.compileShader(this._vertexShader); - if (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) { - throw new Error(this._gl.getShaderInfoLog(this._vertexShader)); - return; - } - this._gl.shaderSource(this._fragmentShader, fragmentString); - this._gl.compileShader(this._fragmentShader); - if (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) { - throw new Error(this._gl.getShaderInfoLog(this._fragmentShader)); - return; - } - this._gl.attachShader(this._program, this._vertexShader); - this._gl.attachShader(this._program, this._fragmentShader); - this._gl.linkProgram(this._program); - if (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) { - throw new Error(this._gl.getProgramInfoLog(this._program)); - } - }; - ProgramWebGL.prototype.dispose = function () { - this._gl.deleteProgram(this._program); - }; - ProgramWebGL.prototype.focusProgram = function () { - this._gl.useProgram(this._program); - }; - Object.defineProperty(ProgramWebGL.prototype, "glProgram", { + }); + Object.defineProperty(TriangleMethodMaterial.prototype, "normalMethod", { + /** + * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod. + */ get: function () { - return this._program; + return this._normalMethod; + }, + set: function (value) { + if (this._normalMethod == value) + return; + if (value && this._normalMethod) + value.copyFrom(this._normalMethod); + this._normalMethod = value; + this._pInvalidateScreenPasses(); }, enumerable: true, configurable: true }); - ProgramWebGL._tokenizer = new AGALTokenizer(); - ProgramWebGL._aglslParser = new AGLSLParser(); - return ProgramWebGL; -})(); -module.exports = ProgramWebGL; - - -},{"awayjs-stagegl/lib/aglsl/AGALTokenizer":undefined,"awayjs-stagegl/lib/aglsl/AGLSLParser":undefined}],"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":[function(require,module,exports){ -var ResourceBaseFlash = (function () { - function ResourceBaseFlash() { - } - Object.defineProperty(ResourceBaseFlash.prototype, "id", { + /** + * Appends an "effect" shading method to the shader. Effect methods are those that do not influence the lighting + * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the + * methods added prior. + */ + TriangleMethodMaterial.prototype.addEffectMethod = function (method) { + if (this._screenPass == null) + this._screenPass = new TriangleMethodPass(); + this._screenPass.addEffectMethod(method); + this._pInvalidateScreenPasses(); + }; + Object.defineProperty(TriangleMethodMaterial.prototype, "numEffectMethods", { + /** + * The number of "effect" methods added to the material. + */ get: function () { - return this._pId; + return this._screenPass ? this._screenPass.numEffectMethods : 0; }, enumerable: true, configurable: true }); - ResourceBaseFlash.prototype.dispose = function () { + /** + * Queries whether a given effect method was added to the material. + * + * @param method The method to be queried. + * @return true if the method was added to the material, false otherwise. + */ + TriangleMethodMaterial.prototype.hasEffectMethod = function (method) { + return this._screenPass ? this._screenPass.hasEffectMethod(method) : false; }; - return ResourceBaseFlash; -})(); -module.exports = ResourceBaseFlash; - - -},{}],"awayjs-stagegl/lib/core/stagegl/SamplerState":[function(require,module,exports){ -var SamplerState = (function () { - function SamplerState() { - } - return SamplerState; -})(); -module.exports = SamplerState; - - -},{}],"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL":[function(require,module,exports){ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var TextureBaseWebGL = (function () { - function TextureBaseWebGL(gl) { - this.textureType = ""; - this._gl = gl; - } - TextureBaseWebGL.prototype.dispose = function () { - throw "Abstract method must be overridden."; + /** + * Returns the method added at the given index. + * @param index The index of the method to retrieve. + * @return The method at the given index. + */ + TriangleMethodMaterial.prototype.getEffectMethodAt = function (index) { + if (this._screenPass == null) + return null; + return this._screenPass.getEffectMethodAt(index); }; - Object.defineProperty(TextureBaseWebGL.prototype, "glTexture", { + /** + * Adds an effect method at the specified index amongst the methods already added to the material. Effect + * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines, + * etc. The method will be applied to the result of the methods with a lower index. + */ + TriangleMethodMaterial.prototype.addEffectMethodAt = function (method, index) { + if (this._screenPass == null) + this._screenPass = new TriangleMethodPass(); + this._screenPass.addEffectMethodAt(method, index); + this._pInvalidatePasses(); + }; + /** + * Removes an effect method from the material. + * @param method The method to be removed. + */ + TriangleMethodMaterial.prototype.removeEffectMethod = function (method) { + if (this._screenPass == null) + return; + this._screenPass.removeEffectMethod(method); + // reconsider + if (this._screenPass.numEffectMethods == 0) + this._pInvalidatePasses(); + }; + Object.defineProperty(TriangleMethodMaterial.prototype, "normalMap", { + /** + * The normal map to modulate the direction of the surface for each texel. The default normal method expects + * tangent-space normal maps, but others could expect object-space maps. + */ get: function () { - throw new AbstractMethodError(); + return this._normalMethod.normalMap; + }, + set: function (value) { + this._normalMethod.normalMap = value; }, enumerable: true, configurable: true }); - return TextureBaseWebGL; -})(); -module.exports = TextureBaseWebGL; - - -},{"awayjs-core/lib/errors/AbstractMethodError":undefined}],"awayjs-stagegl/lib/core/stagegl/TextureFlash":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var TextureFlash = (function (_super) { - __extends(TextureFlash, _super); - function TextureFlash(context, width, height, format, forRTT, streaming) { - if (streaming === void 0) { streaming = false; } - _super.call(this); - this._context = context; - this._width = width; - this._height = height; - this._context.addStream(String.fromCharCode(OpCodes.initTexture, (forRTT ? OpCodes.trueValue : OpCodes.falseValue)) + width + "," + height + "," + streaming + "," + format + "$"); - this._pId = this._context.execute(); - this._context._iAddResource(this); - } - Object.defineProperty(TextureFlash.prototype, "width", { + Object.defineProperty(TriangleMethodMaterial.prototype, "specularMap", { + /** + * A specular map that defines the strength of specular reflections for each texel in the red channel, + * and the gloss factor in the green channel. You can use SpecularBitmapTexture if you want to easily set + * specular and gloss maps from grayscale images, but correctly authored images are preferred. + */ get: function () { - return this._width; + return this._specularMethod.texture; + }, + set: function (value) { + this._specularMethod.texture = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TextureFlash.prototype, "height", { + Object.defineProperty(TriangleMethodMaterial.prototype, "gloss", { + /** + * The glossiness of the material (sharpness of the specular highlight). + */ get: function () { - return this._height; + return this._specularMethod.gloss; + }, + set: function (value) { + this._specularMethod.gloss = value; }, enumerable: true, configurable: true }); - TextureFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeTexture) + this._pId.toString() + ","); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; - }; - TextureFlash.prototype.uploadFromData = function (data, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) { - data = data.imageData.data; - } - else if (data instanceof HTMLImageElement) { - var can = document.createElement("canvas"); - var w = data.width; - var h = data.height; - can.width = w; - can.height = h; - var ctx = can.getContext("2d"); - ctx.drawImage(data, 0, 0); - data = ctx.getImageData(0, 0, w, h).data; - } - var pos = 0; - var bytes = ByteArrayBase.internalGetBase64String(data.length, function () { - return data[pos++]; - }, null); - this._context.addStream(String.fromCharCode(OpCodes.uploadBytesTexture) + this._pId + "," + miplevel + "," + (this._width >> miplevel) + "," + (this._height >> miplevel) + "," + bytes + "%"); - this._context.execute(); - }; - return TextureFlash; -})(ResourceBaseFlash); -module.exports = TextureFlash; - - -},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/utils/ByteArrayBase":undefined,"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/core/stagegl/TextureWebGL":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); -var TextureWebGL = (function (_super) { - __extends(TextureWebGL, _super); - function TextureWebGL(gl, width, height) { - _super.call(this, gl); - this.textureType = "texture2d"; - this._width = width; - this._height = height; - this._glTexture = this._gl.createTexture(); - } - TextureWebGL.prototype.dispose = function () { - this._gl.deleteTexture(this._glTexture); - }; - Object.defineProperty(TextureWebGL.prototype, "width", { + Object.defineProperty(TriangleMethodMaterial.prototype, "ambient", { + /** + * The strength of the ambient reflection. + */ get: function () { - return this._width; + return this._ambientMethod.ambient; + }, + set: function (value) { + this._ambientMethod.ambient = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TextureWebGL.prototype, "height", { + Object.defineProperty(TriangleMethodMaterial.prototype, "specular", { + /** + * The overall strength of the specular reflection. + */ get: function () { - return this._height; + return this._specularMethod.specular; + }, + set: function (value) { + this._specularMethod.specular = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TextureWebGL.prototype, "frameBuffer", { - get: function () { - if (!this._frameBuffer) { - this._frameBuffer = this._gl.createFramebuffer(); - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer); - this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); - this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null); - var renderBuffer = this._gl.createRenderbuffer(); - this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer); - this._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height); - this._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0); - this._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer); - this._gl.bindTexture(this._gl.TEXTURE_2D, null); - this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null); - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); - } - return this._frameBuffer; + Object.defineProperty(TriangleMethodMaterial.prototype, "ambientColor", { + /** + * The colour of the ambient reflection. + */ + get: function () { + return this._diffuseMethod.ambientColor; + }, + set: function (value) { + this._diffuseMethod.ambientColor = value; }, enumerable: true, configurable: true }); - TextureWebGL.prototype.uploadFromData = function (data, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) - data = data.imageData; - this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); - this._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); - this._gl.bindTexture(this._gl.TEXTURE_2D, null); - }; - TextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { - if (async === void 0) { async = false; } - var ext = this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); - //this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this) - }; - Object.defineProperty(TextureWebGL.prototype, "glTexture", { + Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseColor", { + /** + * The colour of the diffuse reflection. + */ get: function () { - return this._glTexture; + return this._diffuseMethod.diffuseColor; + }, + set: function (value) { + this._diffuseMethod.diffuseColor = value; }, enumerable: true, configurable: true }); - TextureWebGL.prototype.generateMipmaps = function () { - //TODO: implement generating mipmaps - //this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture ); - //this._gl.generateMipmap(this._gl.TEXTURE_2D); - //this._gl.bindTexture( this._gl.TEXTURE_2D, null ); - }; - return TextureWebGL; -})(TextureBaseWebGL); -module.exports = TextureWebGL; - - -},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL":undefined}],"awayjs-stagegl/lib/core/stagegl/VertexBufferFlash":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var VertexBufferFlash = (function (_super) { - __extends(VertexBufferFlash, _super); - function VertexBufferFlash(context, numVertices, data32PerVertex) { - _super.call(this); - this._context = context; - this._numVertices = numVertices; - this._data32PerVertex = data32PerVertex; - this._context.addStream(String.fromCharCode(OpCodes.initVertexBuffer, data32PerVertex + OpCodes.intMask) + numVertices.toString() + ","); - this._pId = this._context.execute(); - this._context._iAddResource(this); - } - VertexBufferFlash.prototype.uploadFromArray = function (data, startVertex, numVertices) { - this._context.addStream(String.fromCharCode(OpCodes.uploadArrayVertexBuffer, this._pId + OpCodes.intMask) + data.join() + "#" + [startVertex, numVertices].join() + ","); - this._context.execute(); - }; - Object.defineProperty(VertexBufferFlash.prototype, "numVertices", { + Object.defineProperty(TriangleMethodMaterial.prototype, "specularColor", { + /** + * The colour of the specular reflection. + */ get: function () { - return this._numVertices; + return this._specularMethod.specularColor; + }, + set: function (value) { + this._specularMethod.specularColor = value; }, enumerable: true, configurable: true }); - Object.defineProperty(VertexBufferFlash.prototype, "data32PerVertex", { + Object.defineProperty(TriangleMethodMaterial.prototype, "alphaBlending", { + /** + * Indicates whether or not the material has transparency. If binary transparency is sufficient, for + * example when using textures of foliage, consider using alphaThreshold instead. + */ get: function () { - return this._data32PerVertex; + return this._alphaBlending; + }, + set: function (value) { + if (this._alphaBlending == value) + return; + this._alphaBlending = value; + this._pInvalidatePasses(); }, enumerable: true, configurable: true }); - VertexBufferFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeVertexBuffer, this._pId + OpCodes.intMask)); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; + /** + * @inheritDoc + */ + TriangleMethodMaterial.prototype._iUpdateMaterial = function () { + if (this._pScreenPassesInvalid) { + //Updates screen passes when they were found to be invalid. + this._pScreenPassesInvalid = false; + this.initPasses(); + this.setBlendAndCompareModes(); + this._pClearScreenPasses(); + if (this._materialMode == TriangleMaterialMode.MULTI_PASS) { + if (this._casterLightPass) + this._pAddScreenPass(this._casterLightPass); + if (this._nonCasterLightPasses) + for (var i = 0; i < this._nonCasterLightPasses.length; ++i) + this._pAddScreenPass(this._nonCasterLightPasses[i]); + } + if (this._screenPass) + this._pAddScreenPass(this._screenPass); + } }; - return VertexBufferFlash; -})(ResourceBaseFlash); -module.exports = VertexBufferFlash; - - -},{"awayjs-stagegl/lib/core/stagegl/OpCodes":undefined,"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash":undefined}],"awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL":[function(require,module,exports){ -var VertexBufferWebGL = (function () { - function VertexBufferWebGL(gl, numVertices, data32PerVertex) { - this._gl = gl; - this._buffer = this._gl.createBuffer(); - this._numVertices = numVertices; - this._data32PerVertex = data32PerVertex; - } - VertexBufferWebGL.prototype.uploadFromArray = function (vertices, startVertex, numVertices) { - this._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer); - //console.log( "** WARNING upload not fully implemented, startVertex & numVertices not considered." ); - // TODO add offsets , startVertex, numVertices * this._data32PerVertex - this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW); + /** + * Initializes all the passes and their dependent passes. + */ + TriangleMethodMaterial.prototype.initPasses = function () { + // let the effects pass handle everything if there are no lights, when there are effect methods applied + // after shading, or when the material mode is single pass. + if (this.numLights == 0 || this.numEffectMethods > 0 || this._materialMode == TriangleMaterialMode.SINGLE_PASS) + this.initEffectPass(); + else if (this._screenPass) + this.removeEffectPass(); + // only use a caster light pass if shadows need to be rendered + if (this._shadowMethod && this._materialMode == TriangleMaterialMode.MULTI_PASS) + this.initCasterLightPass(); + else if (this._casterLightPass) + this.removeCasterLightPass(); + // only use non caster light passes if there are lights that don't cast + if (this.numNonCasters > 0 && this._materialMode == TriangleMaterialMode.MULTI_PASS) + this.initNonCasterLightPasses(); + else if (this._nonCasterLightPasses) + this.removeNonCasterLightPasses(); + }; + /** + * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes. + */ + TriangleMethodMaterial.prototype.setBlendAndCompareModes = function () { + var forceSeparateMVP = Boolean(this._casterLightPass || this._screenPass); + // caster light pass is always first if it exists, hence it uses normal blending + if (this._casterLightPass) { + this._casterLightPass.forceSeparateMVP = forceSeparateMVP; + this._casterLightPass.setBlendMode(BlendMode.NORMAL); + this._casterLightPass.depthCompareMode = this._depthCompareMode; + } + if (this._nonCasterLightPasses) { + var firstAdditiveIndex = 0; + // if there's no caster light pass, the first non caster light pass will be the first + // and should use normal blending + if (!this._casterLightPass) { + this._nonCasterLightPasses[0].forceSeparateMVP = forceSeparateMVP; + this._nonCasterLightPasses[0].setBlendMode(BlendMode.NORMAL); + this._nonCasterLightPasses[0].depthCompareMode = this._depthCompareMode; + firstAdditiveIndex = 1; + } + for (var i = firstAdditiveIndex; i < this._nonCasterLightPasses.length; ++i) { + this._nonCasterLightPasses[i].forceSeparateMVP = forceSeparateMVP; + this._nonCasterLightPasses[i].setBlendMode(BlendMode.ADD); + this._nonCasterLightPasses[i].depthCompareMode = ContextGLCompareMode.LESS_EQUAL; + } + } + if (this._casterLightPass || this._nonCasterLightPasses) { + //cannot be blended by blendmode property if multipass enabled + this._pRequiresBlending = false; + // there are light passes, so this should be blended in + if (this._screenPass) { + this._screenPass.passMode = MaterialPassMode.EFFECTS; + this._screenPass.depthCompareMode = ContextGLCompareMode.LESS_EQUAL; + this._screenPass.setBlendMode(BlendMode.LAYER); + this._screenPass.forceSeparateMVP = forceSeparateMVP; + } + } + else if (this._screenPass) { + this._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || (this._colorTransform && this._colorTransform.alphaMultiplier < 1)); + // effects pass is the only pass, so it should just blend normally + this._screenPass.passMode = MaterialPassMode.SUPER_SHADER; + this._screenPass.depthCompareMode = this._depthCompareMode; + this._screenPass.preserveAlpha = this._pRequiresBlending; + this._screenPass.colorTransform = this._colorTransform; + this._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending) ? BlendMode.LAYER : this._pBlendMode); + this._screenPass.forceSeparateMVP = false; + } + }; + TriangleMethodMaterial.prototype.initCasterLightPass = function () { + if (this._casterLightPass == null) + this._casterLightPass = new TriangleMethodPass(MaterialPassMode.LIGHTING); + this._casterLightPass.lightPicker = new StaticLightPicker([this._shadowMethod.castingLight]); + this._casterLightPass.shadowMethod = this._shadowMethod; + this._casterLightPass.diffuseMethod = this._diffuseMethod; + this._casterLightPass.ambientMethod = this._ambientMethod; + this._casterLightPass.normalMethod = this._normalMethod; + this._casterLightPass.specularMethod = this._specularMethod; + }; + TriangleMethodMaterial.prototype.removeCasterLightPass = function () { + this._casterLightPass.dispose(); + this._pRemoveScreenPass(this._casterLightPass); + this._casterLightPass = null; + }; + TriangleMethodMaterial.prototype.initNonCasterLightPasses = function () { + this.removeNonCasterLightPasses(); + var pass; + var numDirLights = this._pLightPicker.numDirectionalLights; + var numPointLights = this._pLightPicker.numPointLights; + var numLightProbes = this._pLightPicker.numLightProbes; + var dirLightOffset = 0; + var pointLightOffset = 0; + var probeOffset = 0; + if (!this._casterLightPass) { + numDirLights += this._pLightPicker.numCastingDirectionalLights; + numPointLights += this._pLightPicker.numCastingPointLights; + } + this._nonCasterLightPasses = new Array(); + while (dirLightOffset < numDirLights || pointLightOffset < numPointLights || probeOffset < numLightProbes) { + pass = new TriangleMethodPass(MaterialPassMode.LIGHTING); + pass.includeCasters = this._shadowMethod == null; + pass.directionalLightsOffset = dirLightOffset; + pass.pointLightsOffset = pointLightOffset; + pass.lightProbesOffset = probeOffset; + pass.lightPicker = this._pLightPicker; + pass.diffuseMethod = this._diffuseMethod; + pass.ambientMethod = this._ambientMethod; + pass.normalMethod = this._normalMethod; + pass.specularMethod = this._specularMethod; + this._nonCasterLightPasses.push(pass); + dirLightOffset += pass.iNumDirectionalLights; + pointLightOffset += pass.iNumPointLights; + probeOffset += pass.iNumLightProbes; + } + }; + TriangleMethodMaterial.prototype.removeNonCasterLightPasses = function () { + if (!this._nonCasterLightPasses) + return; + for (var i = 0; i < this._nonCasterLightPasses.length; ++i) + this._pRemoveScreenPass(this._nonCasterLightPasses[i]); + this._nonCasterLightPasses = null; + }; + TriangleMethodMaterial.prototype.removeEffectPass = function () { + if (this._screenPass.ambientMethod != this._ambientMethod) + this._screenPass.ambientMethod.dispose(); + if (this._screenPass.diffuseMethod != this._diffuseMethod) + this._screenPass.diffuseMethod.dispose(); + if (this._screenPass.specularMethod != this._specularMethod) + this._screenPass.specularMethod.dispose(); + if (this._screenPass.normalMethod != this._normalMethod) + this._screenPass.normalMethod.dispose(); + this._pRemoveScreenPass(this._screenPass); + this._screenPass = null; }; - Object.defineProperty(VertexBufferWebGL.prototype, "numVertices", { - get: function () { - return this._numVertices; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(VertexBufferWebGL.prototype, "data32PerVertex", { + TriangleMethodMaterial.prototype.initEffectPass = function () { + if (this._screenPass == null) + this._screenPass = new TriangleMethodPass(); + if (this._materialMode == TriangleMaterialMode.SINGLE_PASS) { + this._screenPass.ambientMethod = this._ambientMethod; + this._screenPass.diffuseMethod = this._diffuseMethod; + this._screenPass.specularMethod = this._specularMethod; + this._screenPass.normalMethod = this._normalMethod; + this._screenPass.shadowMethod = this._shadowMethod; + } + else if (this._materialMode == TriangleMaterialMode.MULTI_PASS) { + if (this.numLights == 0) { + this._screenPass.ambientMethod = this._ambientMethod; + } + else { + this._screenPass.ambientMethod = null; + } + this._screenPass.preserveAlpha = false; + this._screenPass.normalMethod = this._normalMethod; + } + }; + Object.defineProperty(TriangleMethodMaterial.prototype, "numLights", { + /** + * The maximum total number of lights provided by the light picker. + */ get: function () { - return this._data32PerVertex; + return this._pLightPicker ? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights + this._pLightPicker.numCastingDirectionalLights + this._pLightPicker.numCastingPointLights : 0; }, enumerable: true, configurable: true }); - Object.defineProperty(VertexBufferWebGL.prototype, "glBuffer", { + Object.defineProperty(TriangleMethodMaterial.prototype, "numNonCasters", { + /** + * The amount of lights that don't cast shadows. + */ get: function () { - return this._buffer; + return this._pLightPicker ? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights : 0; }, enumerable: true, configurable: true }); - VertexBufferWebGL.prototype.dispose = function () { - this._gl.deleteBuffer(this._buffer); - }; - return VertexBufferWebGL; -})(); -module.exports = VertexBufferWebGL; + return TriangleMethodMaterial; +})(TriangleMaterialBase); +module.exports = TriangleMethodMaterial; -},{}],"awayjs-stagegl/lib/errors/AnimationSetError":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Error = require("awayjs-core/lib/errors/Error"); -var AnimationSetError = (function (_super) { - __extends(AnimationSetError, _super); - function AnimationSetError(message) { - _super.call(this, message); +},{"awayjs-core/lib/geom/ColorTransform":undefined,"awayjs-core/lib/textures/Texture2DBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-display/lib/materials/lightpickers/StaticLightPicker":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialBase":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialMode":undefined,"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/NormalBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined,"awayjs-stagegl/lib/materials/passes/TriangleMethodPass":undefined}],"awayjs-stagegl/lib/materials/compilation/MethodVO":[function(require,module,exports){ +/** + * MethodVO contains data for a given shader object for the use within a single material. + * This allows shader methods to be shared across materials while their non-public state differs. + */ +var MethodVO = (function () { + /** + * Creates a new MethodVO object. + */ + function MethodVO(method) { + this.useMethod = true; + this.method = method; } - return AnimationSetError; -})(Error); -module.exports = AnimationSetError; + /** + * Resets the values of the value object to their "unused" state. + */ + MethodVO.prototype.reset = function () { + this.method.iReset(); + this.texturesIndex = -1; + this.vertexConstantsIndex = -1; + this.fragmentConstantsIndex = -1; + this.needsProjection = false; + this.needsView = false; + this.needsNormals = false; + this.needsTangents = false; + this.needsUV = false; + this.needsSecondaryUV = false; + this.needsGlobalVertexPos = false; + this.needsGlobalFragmentPos = false; + }; + return MethodVO; +})(); +module.exports = MethodVO; -},{"awayjs-core/lib/errors/Error":undefined}],"awayjs-stagegl/lib/events/AnimatorEvent":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Event = require("awayjs-core/lib/events/Event"); +},{}],"awayjs-stagegl/lib/materials/compilation/RegisterPool":[function(require,module,exports){ +var ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); /** - * Dispatched to notify changes in an animator's state. + * RegisterPool is used by the shader compilation process to keep track of which registers of a certain type are + * currently used and should not be allowed to be written to. Either entire registers can be requested and locked, + * or single components (x, y, z, w) of a single register. + * It is used by ShaderRegisterCache to track usages of individual register types. + * + * @see away.materials.ShaderRegisterCache */ -var AnimatorEvent = (function (_super) { - __extends(AnimatorEvent, _super); +var RegisterPool = (function () { /** - * Create a new AnimatorEvent object. - * - * @param type The event type. - * @param animator The animator object that is the subject of this event. + * Creates a new RegisterPool object. + * @param regName The base name of the register type ("ft" for fragment temporaries, "vc" for vertex constants, etc) + * @param regCount The amount of available registers of this type. + * @param persistent Whether or not registers, once reserved, can be freed again. For example, temporaries are not persistent, but constants are. */ - function AnimatorEvent(type, animator) { - _super.call(this, type); - this._animator = animator; + function RegisterPool(regName, regCount, persistent) { + if (persistent === void 0) { persistent = true; } + this._regName = regName; + this._regCount = regCount; + this._persistent = persistent; + this.initRegisters(regName, regCount); } - Object.defineProperty(AnimatorEvent.prototype, "animator", { - get: function () { - return this._animator; - }, - enumerable: true, - configurable: true - }); /** - * Clones the event. - * - * @return An exact duplicate of the current event object. + * Retrieve an entire vector register that's still available. */ - AnimatorEvent.prototype.clone = function () { - return new AnimatorEvent(this.type, this._animator); + RegisterPool.prototype.requestFreeVectorReg = function () { + for (var i = 0; i < this._regCount; ++i) { + if (!this.isRegisterUsed(i)) { + if (this._persistent) + this._usedVectorCount[i]++; + return this._vectorRegisters[i]; + } + } + throw new Error("Register overflow!"); }; /** - * Defines the value of the type property of a start event object. + * Retrieve a single vector component that's still available. */ - AnimatorEvent.START = "start"; + RegisterPool.prototype.requestFreeRegComponent = function () { + for (var i = 0; i < this._regCount; ++i) { + if (this._usedVectorCount[i] > 0) + continue; + for (var j = 0; j < 4; ++j) { + if (this._usedSingleCount[j][i] == 0) { + if (this._persistent) + this._usedSingleCount[j][i]++; + return this._registerComponents[j][i]; + } + } + } + throw new Error("Register overflow!"); + }; /** - * Defines the value of the type property of a stop event object. + * Marks a register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage + * has been called usageCount times again. + * @param register The register to mark as used. + * @param usageCount The amount of usages to add. */ - AnimatorEvent.STOP = "stop"; + RegisterPool.prototype.addUsage = function (register, usageCount) { + if (register._component > -1) + this._usedSingleCount[register._component][register.index] += usageCount; + else + this._usedVectorCount[register.index] += usageCount; + }; /** - * Defines the value of the type property of a cycle complete event object. + * Removes a usage from a register. When usages reach 0, the register is freed again. + * @param register The register for which to remove a usage. */ - AnimatorEvent.CYCLE_COMPLETE = "cycle_complete"; - return AnimatorEvent; -})(Event); -module.exports = AnimatorEvent; - - -},{"awayjs-core/lib/events/Event":undefined}],"awayjs-stagegl/lib/events/ShadingMethodEvent":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Event = require("awayjs-core/lib/events/Event"); -var ShadingMethodEvent = (function (_super) { - __extends(ShadingMethodEvent, _super); - function ShadingMethodEvent(type) { - _super.call(this, type); - } - ShadingMethodEvent.SHADER_INVALIDATED = "ShaderInvalidated"; - return ShadingMethodEvent; -})(Event); -module.exports = ShadingMethodEvent; - - -},{"awayjs-core/lib/events/Event":undefined}],"awayjs-stagegl/lib/filters/Filter3DBase":[function(require,module,exports){ -var Filter3DBase = (function () { - function Filter3DBase() { - this._tasks = new Array(); - } - Object.defineProperty(Filter3DBase.prototype, "requireDepthRender", { - get: function () { - return this._requireDepthRender; - }, - enumerable: true, - configurable: true - }); - Filter3DBase.prototype.pAddTask = function (filter) { - this._tasks.push(filter); - if (this._requireDepthRender == null) - this._requireDepthRender = filter.requireDepthRender; + RegisterPool.prototype.removeUsage = function (register) { + if (register._component > -1) { + if (--this._usedSingleCount[register._component][register.index] < 0) + throw new Error("More usages removed than exist!"); + } + else { + if (--this._usedVectorCount[register.index] < 0) + throw new Error("More usages removed than exist!"); + } + }; + /** + * Disposes any resources used by the current RegisterPool object. + */ + RegisterPool.prototype.dispose = function () { + this._vectorRegisters = null; + this._registerComponents = null; + this._usedSingleCount = null; + this._usedVectorCount = null; + }; + /** + * Indicates whether or not any registers are in use. + */ + RegisterPool.prototype.hasRegisteredRegs = function () { + for (var i = 0; i < this._regCount; ++i) + if (this.isRegisterUsed(i)) + return true; + return false; }; - Object.defineProperty(Filter3DBase.prototype, "tasks", { - get: function () { - return this._tasks; - }, - enumerable: true, - configurable: true - }); - Filter3DBase.prototype.getMainInputTexture = function (stage) { - return this._tasks[0].getMainInputTexture(stage); + /** + * Initializes all registers. + */ + RegisterPool.prototype.initRegisters = function (regName, regCount) { + var hash = RegisterPool._initPool(regName, regCount); + this._vectorRegisters = RegisterPool._regPool[hash]; + this._registerComponents = RegisterPool._regCompsPool[hash]; + this._usedVectorCount = this._initArray(Array(regCount), 0); + this._usedSingleCount = new Array(4); + this._usedSingleCount[0] = this._initArray(new Array(regCount), 0); + this._usedSingleCount[1] = this._initArray(new Array(regCount), 0); + this._usedSingleCount[2] = this._initArray(new Array(regCount), 0); + this._usedSingleCount[3] = this._initArray(new Array(regCount), 0); }; - Object.defineProperty(Filter3DBase.prototype, "textureWidth", { - get: function () { - return this._textureWidth; - }, - set: function (value) { - this._textureWidth = value; - for (var i = 0; i < this._tasks.length; ++i) - this._tasks[i].textureWidth = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Filter3DBase.prototype, "textureHeight", { - get: function () { - return this._textureHeight; - }, - set: function (value) { - this._textureHeight = value; - for (var i = 0; i < this._tasks.length; ++i) - this._tasks[i].textureHeight = value; - }, - enumerable: true, - configurable: true - }); - // link up the filters correctly with the next filter - Filter3DBase.prototype.setRenderTargets = function (mainTarget, stage) { - this._tasks[this._tasks.length - 1].target = mainTarget; + RegisterPool._initPool = function (regName, regCount) { + var hash = regName + regCount; + if (RegisterPool._regPool[hash] != undefined) + return hash; + var vectorRegisters = new Array(regCount); + RegisterPool._regPool[hash] = vectorRegisters; + var registerComponents = [ + [], + [], + [], + [] + ]; + RegisterPool._regCompsPool[hash] = registerComponents; + for (var i = 0; i < regCount; ++i) { + vectorRegisters[i] = new ShaderRegisterElement(regName, i); + for (var j = 0; j < 4; ++j) + registerComponents[j][i] = new ShaderRegisterElement(regName, i, j); + } + return hash; }; - Filter3DBase.prototype.dispose = function () { - for (var i = 0; i < this._tasks.length; ++i) - this._tasks[i].dispose(); + /** + * Check if the temp register is either used for single or vector use + */ + RegisterPool.prototype.isRegisterUsed = function (index) { + if (this._usedVectorCount[index] > 0) + return true; + for (var i = 0; i < 4; ++i) + if (this._usedSingleCount[i][index] > 0) + return true; + return false; }; - Filter3DBase.prototype.update = function (stage, camera) { + RegisterPool.prototype._initArray = function (a, val) { + var l = a.length; + for (var c = 0; c < l; c++) + a[c] = val; + return a; }; - return Filter3DBase; + RegisterPool._regPool = new Object(); + RegisterPool._regCompsPool = new Object(); + return RegisterPool; })(); -module.exports = Filter3DBase; +module.exports = RegisterPool; -},{}],"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase":[function(require,module,exports){ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -var Filter3DTaskBase = (function () { - function Filter3DTaskBase(requireDepthRender) { - if (requireDepthRender === void 0) { requireDepthRender = false; } - this._scaledTextureWidth = -1; - this._scaledTextureHeight = -1; - this._textureWidth = -1; - this._textureHeight = -1; - this._textureDimensionsInvalid = true; - this._program3DInvalid = true; - this._textureScale = 0; - this._requireDepthRender = requireDepthRender; +},{"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":[function(require,module,exports){ +var ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); +var ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); +var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); +/** + * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a + * material. Concrete subclasses are used by the default materials. + * + * @see away.materials.ShadingMethodBase + */ +var ShaderCompilerBase = (function () { + /** + * Creates a new ShaderCompilerBase object. + * @param profile The compatibility profile of the renderer. + */ + function ShaderCompilerBase(material, materialPass, shaderObject) { + this._pVertexCode = ''; // Changed to emtpy string- AwayTS + this._pFragmentCode = ''; // Changed to emtpy string - AwayTS + this._pPostAnimationFragmentCode = ''; // Changed to emtpy string - AwayTS + this._pMaterial = material; + this._pMaterialPass = materialPass; + this._pShaderObject = shaderObject; + this._pProfile = shaderObject.profile; + this._pSharedRegisters = new ShaderRegisterData(); + this._pRegisterCache = new ShaderRegisterCache(this._pProfile); + this._pRegisterCache.vertexAttributesOffset = 1; + this._pRegisterCache.reset(); } - Object.defineProperty(Filter3DTaskBase.prototype, "textureScale", { - /** - * The texture scale for the input of this texture. This will define the output of the previous entry in the chain - */ - get: function () { - return this._textureScale; - }, - set: function (value) { - if (this._textureScale == value) - return; - this._textureScale = value; - this._scaledTextureWidth = this._textureWidth >> this._textureScale; - this._scaledTextureHeight = this._textureHeight >> this._textureScale; - this._textureDimensionsInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Filter3DTaskBase.prototype, "target", { - get: function () { - return this._target; - }, - set: function (value) { - this._target = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Filter3DTaskBase.prototype, "textureWidth", { - get: function () { - return this._textureWidth; - }, - set: function (value) { - if (this._textureWidth == value) - return; - this._textureWidth = value; - this._scaledTextureWidth = this._textureWidth >> this._textureScale; - this._textureDimensionsInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Filter3DTaskBase.prototype, "textureHeight", { - get: function () { - return this._textureHeight; - }, - set: function (value) { - if (this._textureHeight == value) - return; - this._textureHeight = value; - this._scaledTextureHeight = this._textureHeight >> this._textureScale; - this._textureDimensionsInvalid = true; - }, - enumerable: true, - configurable: true - }); - Filter3DTaskBase.prototype.getMainInputTexture = function (stage) { - if (this._textureDimensionsInvalid) - this.pUpdateTextures(stage); - return this._mainInputTexture; - }; - Filter3DTaskBase.prototype.dispose = function () { - if (this._mainInputTexture) - this._mainInputTexture.dispose(); - if (this._program3D) - this._program3D.dispose(); - }; - Filter3DTaskBase.prototype.pInvalidateProgram = function () { - this._program3DInvalid = true; - }; - Filter3DTaskBase.prototype.pUpdateProgram = function (stage) { - if (this._program3D) - this._program3D.dispose(); - this._program3D = stage.context.createProgram(); - var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + this.pGetVertexCode() + "endpart"))['vertex'].data; - var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + this.pGetFragmentCode() + "endpart"))['fragment'].data; - this._program3D.upload(vertexByteCode, fragmentByteCode); - this._program3DInvalid = false; - }; - Filter3DTaskBase.prototype.pGetVertexCode = function () { - // TODO: imeplement AGAL <> GLSL - return "mov op, va0\n" + "mov v0, va1\n"; - }; - Filter3DTaskBase.prototype.pGetFragmentCode = function () { - throw new AbstractMethodError(); - return null; + /** + * Compiles the code after all setup on the compiler has finished. + */ + ShaderCompilerBase.prototype.compile = function () { + this._pShaderObject.reset(); + this.pCalculateDependencies(); + this.pInitRegisterIndices(); + this.pCompileDependencies(); + //compile custom vertex & fragment codes + this._pVertexCode += this._pMaterialPass._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + this._pPostAnimationFragmentCode += this._pMaterialPass._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + //assign the final output color to the output register + this._pPostAnimationFragmentCode += "mov " + this._pRegisterCache.fragmentOutputRegister + ", " + this._pSharedRegisters.shadedTarget + "\n"; + this._pRegisterCache.removeFragmentTempUsage(this._pSharedRegisters.shadedTarget); + //initialise the required shader constants + this._pShaderObject.initConstantData(this._pRegisterCache, this._pAnimatableAttributes, this._pAnimationTargetRegisters, this._uvSource, this._uvTarget); + this._pMaterialPass._iInitConstantData(this._pShaderObject); }; - Filter3DTaskBase.prototype.pUpdateTextures = function (stage) { - if (this._mainInputTexture) - this._mainInputTexture.dispose(); - this._mainInputTexture = stage.context.createTexture(this._scaledTextureWidth, this._scaledTextureHeight, ContextGLTextureFormat.BGRA, true); - this._textureDimensionsInvalid = false; + /** + * Compile the code for the methods. + */ + ShaderCompilerBase.prototype.pCompileDependencies = function () { + this._pSharedRegisters.shadedTarget = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadedTarget, 1); + //compile the world-space position if required + if (this._pShaderObject.globalPosDependencies > 0) + this.compileGlobalPositionCode(); + //Calculate the (possibly animated) UV coordinates. + if (this._pShaderObject.uvDependencies > 0) + this.compileUVCode(); + if (this._pShaderObject.secondaryUVDependencies > 0) + this.compileSecondaryUVCode(); + if (this._pShaderObject.normalDependencies > 0) + this.compileNormalCode(); + if (this._pShaderObject.viewDirDependencies > 0) + this.compileViewDirCode(); + //collect code from material + this._pVertexCode += this._pMaterial._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + this._pFragmentCode += this._pMaterial._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + //collect code from pass + this._pVertexCode += this._pMaterialPass._iGetPreLightingVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + this._pFragmentCode += this._pMaterialPass._iGetPreLightingFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); }; - Filter3DTaskBase.prototype.getProgram = function (stage) { - if (this._program3DInvalid) - this.pUpdateProgram(stage); - return this._program3D; + ShaderCompilerBase.prototype.compileGlobalPositionCode = function () { + this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.globalPositionVertex = this._pRegisterCache.getFreeVertexVectorTemp(), this._pShaderObject.globalPosDependencies); + var sceneMatrixReg = this._pRegisterCache.getFreeVertexConstant(); + this._pRegisterCache.getFreeVertexConstant(); + this._pRegisterCache.getFreeVertexConstant(); + this._pRegisterCache.getFreeVertexConstant(); + this._pShaderObject.sceneMatrixIndex = sceneMatrixReg.index * 4; + this._pVertexCode += "m44 " + this._pSharedRegisters.globalPositionVertex + ", " + this._pSharedRegisters.localPosition + ", " + sceneMatrixReg + "\n"; + if (this._pShaderObject.usesGlobalPosFragment) { + this._pSharedRegisters.globalPositionVarying = this._pRegisterCache.getFreeVarying(); + this._pVertexCode += "mov " + this._pSharedRegisters.globalPositionVarying + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; + } }; - Filter3DTaskBase.prototype.activate = function (stage, camera, depthTexture) { + /** + * Calculate the (possibly animated) UV coordinates. + */ + ShaderCompilerBase.prototype.compileUVCode = function () { + var uvAttributeReg = this._pRegisterCache.getFreeVertexAttribute(); + this._pShaderObject.uvBufferIndex = uvAttributeReg.index; + var varying = this._pRegisterCache.getFreeVarying(); + this._pSharedRegisters.uvVarying = varying; + if (this._pShaderObject.usesUVTransform) { + // a, b, 0, tx + // c, d, 0, ty + var uvTransform1 = this._pRegisterCache.getFreeVertexConstant(); + var uvTransform2 = this._pRegisterCache.getFreeVertexConstant(); + this._pShaderObject.uvTransformIndex = uvTransform1.index * 4; + this._pVertexCode += "dp4 " + varying + ".x, " + uvAttributeReg + ", " + uvTransform1 + "\n" + "dp4 " + varying + ".y, " + uvAttributeReg + ", " + uvTransform2 + "\n" + "mov " + varying + ".zw, " + uvAttributeReg + ".zw \n"; + } + else { + this._pShaderObject.uvTransformIndex = -1; + this._uvTarget = varying.toString(); + this._uvSource = uvAttributeReg.toString(); + } }; - Filter3DTaskBase.prototype.deactivate = function (stage) { + /** + * Provide the secondary UV coordinates. + */ + ShaderCompilerBase.prototype.compileSecondaryUVCode = function () { + var uvAttributeReg = this._pRegisterCache.getFreeVertexAttribute(); + this._pShaderObject.secondaryUVBufferIndex = uvAttributeReg.index; + this._pSharedRegisters.secondaryUVVarying = this._pRegisterCache.getFreeVarying(); + this._pVertexCode += "mov " + this._pSharedRegisters.secondaryUVVarying + ", " + uvAttributeReg + "\n"; }; - Object.defineProperty(Filter3DTaskBase.prototype, "requireDepthRender", { - get: function () { - return this._requireDepthRender; - }, - enumerable: true, - configurable: true - }); - return Filter3DTaskBase; -})(); -module.exports = Filter3DTaskBase; - - -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat":undefined}],"awayjs-stagegl/lib/managers/RTTBufferManager":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var Event = require("awayjs-core/lib/events/Event"); -var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var TextureUtils = require("awayjs-core/lib/utils/TextureUtils"); -var RTTBufferManager = (function (_super) { - __extends(RTTBufferManager, _super); - function RTTBufferManager(stage) { - _super.call(this); - this._viewWidth = -1; - this._viewHeight = -1; - this._textureWidth = -1; - this._textureHeight = -1; - this._buffersInvalid = true; - this._renderToTextureRect = new Rectangle(); - this._stage = stage; - } - RTTBufferManager.getInstance = function (stage) { - if (!stage) - throw new Error("stage key cannot be null!"); - if (RTTBufferManager._instances == null) - RTTBufferManager._instances = new Array(); - var rttBufferManager = RTTBufferManager.getRTTBufferManagerFromStage(stage); - if (rttBufferManager == null) { - rttBufferManager = new RTTBufferManager(stage); - var vo = new RTTBufferManagerVO(); - vo.stage3d = stage; - vo.rttbfm = rttBufferManager; - RTTBufferManager._instances.push(vo); + /** + * Calculate the view direction. + */ + ShaderCompilerBase.prototype.compileViewDirCode = function () { + var cameraPositionReg = this._pRegisterCache.getFreeVertexConstant(); + this._pSharedRegisters.viewDirVarying = this._pRegisterCache.getFreeVarying(); + this._pSharedRegisters.viewDirFragment = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.viewDirFragment, this._pShaderObject.viewDirDependencies); + this._pShaderObject.cameraPositionIndex = cameraPositionReg.index * 4; + if (this._pShaderObject.usesTangentSpace) { + var temp = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pVertexCode += "sub " + temp + ", " + cameraPositionReg + ", " + this._pSharedRegisters.localPosition + "\n" + "m33 " + this._pSharedRegisters.viewDirVarying + ".xyz, " + temp + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + this._pSharedRegisters.viewDirVarying + ".w, " + this._pSharedRegisters.localPosition + ".w\n"; } - return rttBufferManager; + else { + this._pVertexCode += "sub " + this._pSharedRegisters.viewDirVarying + ", " + cameraPositionReg + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; + this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.globalPositionVertex); + } + //TODO is this required in all cases? (re: distancemappass) + this._pFragmentCode += "nrm " + this._pSharedRegisters.viewDirFragment + ".xyz, " + this._pSharedRegisters.viewDirVarying + "\n" + "mov " + this._pSharedRegisters.viewDirFragment + ".w, " + this._pSharedRegisters.viewDirVarying + ".w\n"; }; - RTTBufferManager.getRTTBufferManagerFromStage = function (stage) { - var l = RTTBufferManager._instances.length; - var r; - for (var c = 0; c < l; c++) { - r = RTTBufferManager._instances[c]; - if (r.stage3d === stage) - return r.rttbfm; + /** + * Calculate the normal. + */ + ShaderCompilerBase.prototype.compileNormalCode = function () { + this._pSharedRegisters.normalFragment = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.normalFragment, this._pShaderObject.normalDependencies); + //simple normal aquisition if no tangent space is being used + if (this._pShaderObject.outputsNormals && !this._pShaderObject.outputsTangentNormals) { + this._pVertexCode += this._pMaterialPass._iGetNormalVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + return; } - return null; + var normalMatrix; + if (!this._pShaderObject.outputsNormals || !this._pShaderObject.usesTangentSpace) { + normalMatrix = new Array(3); + normalMatrix[0] = this._pRegisterCache.getFreeVertexConstant(); + normalMatrix[1] = this._pRegisterCache.getFreeVertexConstant(); + normalMatrix[2] = this._pRegisterCache.getFreeVertexConstant(); + this._pRegisterCache.getFreeVertexConstant(); + this._pShaderObject.sceneNormalMatrixIndex = normalMatrix[0].index * 4; + this._pSharedRegisters.normalVarying = this._pRegisterCache.getFreeVarying(); + } + if (this._pShaderObject.outputsNormals) { + if (this._pShaderObject.usesTangentSpace) { + // normalize normal + tangent vector and generate (approximated) bitangent used in m33 operation for view + this._pVertexCode += "nrm " + this._pSharedRegisters.animatedNormal + ".xyz, " + this._pSharedRegisters.animatedNormal + "\n" + "nrm " + this._pSharedRegisters.animatedTangent + ".xyz, " + this._pSharedRegisters.animatedTangent + "\n" + "crs " + this._pSharedRegisters.bitangent + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + this._pSharedRegisters.animatedTangent + "\n"; + this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + } + else { + //Compiles the vertex shader code for tangent-space normal maps. + this._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying(); + this._pSharedRegisters.bitangentVarying = this._pRegisterCache.getFreeVarying(); + var temp = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pVertexCode += "m33 " + temp + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + normalMatrix[0] + "\n" + "nrm " + this._pSharedRegisters.animatedNormal + ".xyz, " + temp + "\n" + "m33 " + temp + ".xyz, " + this._pSharedRegisters.animatedTangent + ", " + normalMatrix[0] + "\n" + "nrm " + this._pSharedRegisters.animatedTangent + ".xyz, " + temp + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".x \n" + "mov " + this._pSharedRegisters.tangentVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".x \n" + "mov " + this._pSharedRegisters.tangentVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".y \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".y \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "mov " + this._pSharedRegisters.normalVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".z \n" + "mov " + this._pSharedRegisters.normalVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".z \n" + "mov " + this._pSharedRegisters.normalVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "crs " + temp + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".y, " + temp + ".x \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".y, " + temp + ".y \n" + "mov " + this._pSharedRegisters.normalVarying + ".y, " + temp + ".z \n"; + this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedTangent); + //Compiles the fragment shader code for tangent-space normal maps. + var t; + var b; + var n; + t = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(t, 1); + b = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(b, 1); + n = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(n, 1); + this._pFragmentCode += "nrm " + t + ".xyz, " + this._pSharedRegisters.tangentVarying + "\n" + "mov " + t + ".w, " + this._pSharedRegisters.tangentVarying + ".w \n" + "nrm " + b + ".xyz, " + this._pSharedRegisters.bitangentVarying + "\n" + "nrm " + n + ".xyz, " + this._pSharedRegisters.normalVarying + "\n"; + //compile custom fragment code for normal calcs + this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters) + "m33 " + this._pSharedRegisters.normalFragment + ".xyz, " + this._pSharedRegisters.normalFragment + ", " + t + "\n" + "mov " + this._pSharedRegisters.normalFragment + ".w, " + this._pSharedRegisters.normalVarying + ".w\n"; + this._pRegisterCache.removeFragmentTempUsage(b); + this._pRegisterCache.removeFragmentTempUsage(t); + this._pRegisterCache.removeFragmentTempUsage(n); + } + } + else { + // no output, world space is enough + this._pVertexCode += "m33 " + this._pSharedRegisters.normalVarying + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + normalMatrix[0] + "\n" + "mov " + this._pSharedRegisters.normalVarying + ".w, " + this._pSharedRegisters.animatedNormal + ".w\n"; + this._pFragmentCode += "nrm " + this._pSharedRegisters.normalFragment + ".xyz, " + this._pSharedRegisters.normalVarying + "\n" + "mov " + this._pSharedRegisters.normalFragment + ".w, " + this._pSharedRegisters.normalVarying + ".w\n"; + if (this._pShaderObject.tangentDependencies > 0) { + this._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying(); + this._pVertexCode += "m33 " + this._pSharedRegisters.tangentVarying + ".xyz, " + this._pSharedRegisters.animatedTangent + ", " + normalMatrix[0] + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".w, " + this._pSharedRegisters.animatedTangent + ".w\n"; + } + } + if (!this._pShaderObject.usesTangentSpace) + this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedNormal); }; - RTTBufferManager.deleteRTTBufferManager = function (stage) { - var l = RTTBufferManager._instances.length; - var r; - for (var c = 0; c < l; c++) { - r = RTTBufferManager._instances[c]; - if (r.stage3d === stage) { - RTTBufferManager._instances.splice(c, 1); - return; + /** + * Reset all the indices to "unused". + */ + ShaderCompilerBase.prototype.pInitRegisterIndices = function () { + this._pShaderObject.pInitRegisterIndices(); + this._pAnimatableAttributes = new Array("va0"); + this._pAnimationTargetRegisters = new Array("vt0"); + this._pVertexCode = ""; + this._pFragmentCode = ""; + this._pPostAnimationFragmentCode = ""; + this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.localPosition = this._pRegisterCache.getFreeVertexVectorTemp(), 1); + //create commonly shared constant registers + this._pSharedRegisters.commons = this._pRegisterCache.getFreeFragmentConstant(); + this._pShaderObject.commonsDataIndex = this._pSharedRegisters.commons.index * 4; + //Creates the registers to contain the tangent data. + // need to be created FIRST and in this order (for when using tangent space) + if (this._pShaderObject.tangentDependencies > 0 || this._pShaderObject.outputsNormals) { + this._pSharedRegisters.tangentInput = this._pRegisterCache.getFreeVertexAttribute(); + this._pShaderObject.tangentBufferIndex = this._pSharedRegisters.tangentInput.index; + this._pSharedRegisters.animatedTangent = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedTangent, 1); + if (this._pShaderObject.usesTangentSpace) { + this._pSharedRegisters.bitangent = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.bitangent, 1); } + this._pAnimatableAttributes.push(this._pSharedRegisters.tangentInput.toString()); + this._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedTangent.toString()); + } + if (this._pShaderObject.normalDependencies > 0) { + this._pSharedRegisters.normalInput = this._pRegisterCache.getFreeVertexAttribute(); + this._pShaderObject.normalBufferIndex = this._pSharedRegisters.normalInput.index; + this._pSharedRegisters.animatedNormal = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedNormal, 1); + this._pAnimatableAttributes.push(this._pSharedRegisters.normalInput.toString()); + this._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedNormal.toString()); } }; - Object.defineProperty(RTTBufferManager.prototype, "textureRatioX", { + /** + * Figure out which named registers are required, and how often. + */ + ShaderCompilerBase.prototype.pCalculateDependencies = function () { + this._pShaderObject.useAlphaPremultiplied = this._pMaterial.alphaPremultiplied; + this._pShaderObject.useBothSides = this._pMaterial.bothSides; + this._pShaderObject.useMipmapping = this._pMaterial.mipmap; + this._pShaderObject.useSmoothTextures = this._pMaterial.smooth; + this._pShaderObject.repeatTextures = this._pMaterial.repeat; + this._pShaderObject.usesUVTransform = this._pMaterial.animateUVs; + this._pShaderObject.alphaThreshold = this._pMaterial.alphaThreshold; + this._pShaderObject.texture = this._pMaterial.texture; + this._pShaderObject.color = this._pMaterial.color; + //TODO: fragment animtion should be compatible with lighting pass + this._pShaderObject.usesFragmentAnimation = Boolean(this._pMaterialPass.passMode == MaterialPassMode.SUPER_SHADER); + this._pMaterialPass._iIncludeDependencies(this._pShaderObject); + }; + /** + * Disposes all resources used by the compiler. + */ + ShaderCompilerBase.prototype.dispose = function () { + this._pRegisterCache.dispose(); + this._pRegisterCache = null; + this._pSharedRegisters = null; + }; + Object.defineProperty(ShaderCompilerBase.prototype, "vertexCode", { + /** + * The generated vertex code. + */ get: function () { - if (this._buffersInvalid) - this.updateRTTBuffers(); - return this._textureRatioX; + return this._pVertexCode; }, enumerable: true, configurable: true }); - Object.defineProperty(RTTBufferManager.prototype, "textureRatioY", { + Object.defineProperty(ShaderCompilerBase.prototype, "fragmentCode", { + /** + * The generated fragment code. + */ get: function () { - if (this._buffersInvalid) - this.updateRTTBuffers(); - return this._textureRatioY; + return this._pFragmentCode; }, enumerable: true, configurable: true }); - Object.defineProperty(RTTBufferManager.prototype, "viewWidth", { + Object.defineProperty(ShaderCompilerBase.prototype, "postAnimationFragmentCode", { + /** + * The generated fragment code. + */ get: function () { - return this._viewWidth; - }, - set: function (value) { - if (value == this._viewWidth) - return; - this._viewWidth = value; - this._buffersInvalid = true; - this._textureWidth = TextureUtils.getBestPowerOf2(this._viewWidth); - if (this._textureWidth > this._viewWidth) { - this._renderToTextureRect.x = Math.floor((this._textureWidth - this._viewWidth) * .5); - this._renderToTextureRect.width = this._viewWidth; - } - else { - this._renderToTextureRect.x = 0; - this._renderToTextureRect.width = this._textureWidth; - } - this.dispatchEvent(new Event(Event.RESIZE)); + return this._pPostAnimationFragmentCode; }, enumerable: true, configurable: true }); - Object.defineProperty(RTTBufferManager.prototype, "viewHeight", { + Object.defineProperty(ShaderCompilerBase.prototype, "shadedTarget", { + /** + * The register name containing the final shaded colour. + */ get: function () { - return this._viewHeight; + return this._pSharedRegisters.shadedTarget.toString(); }, - set: function (value) { - if (value == this._viewHeight) - return; - this._viewHeight = value; - this._buffersInvalid = true; - this._textureHeight = TextureUtils.getBestPowerOf2(this._viewHeight); - if (this._textureHeight > this._viewHeight) { - this._renderToTextureRect.y = Math.floor((this._textureHeight - this._viewHeight) * .5); - this._renderToTextureRect.height = this._viewHeight; + enumerable: true, + configurable: true + }); + return ShaderCompilerBase; +})(); +module.exports = ShaderCompilerBase; + + +},{"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var LightSources = require("awayjs-display/lib/materials/LightSources"); +var ContextGLProfile = require("awayjs-stagegl/lib/base/ContextGLProfile"); +var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); +/** + * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a + * material. Concrete subclasses are used by the default materials. + * + * @see away.materials.ShadingMethodBase + */ +var ShaderLightingCompiler = (function (_super) { + __extends(ShaderLightingCompiler, _super); + /** + * Creates a new ShaderCompilerBase object. + * @param profile The compatibility profile of the renderer. + */ + function ShaderLightingCompiler(material, materialPass, shaderObject) { + _super.call(this, material, materialPass, shaderObject); + this._materialLightingPass = materialPass; + this._shaderLightingObject = shaderObject; + } + /** + * Compile the code for the methods. + */ + ShaderLightingCompiler.prototype.pCompileDependencies = function () { + _super.prototype.pCompileDependencies.call(this); + //compile the lighting code + if (this._shaderLightingObject.usesShadows) + this.pCompileShadowCode(); + if (this._shaderLightingObject.usesLights) { + this.initLightRegisters(); + this.compileLightCode(); + } + if (this._shaderLightingObject.usesProbes) + this.compileLightProbeCode(); + this._pVertexCode += this._materialLightingPass._iGetPostLightingVertexCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters); + this._pFragmentCode += this._materialLightingPass._iGetPostLightingFragmentCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters); + }; + /** + * Provides the code to provide shadow mapping. + */ + ShaderLightingCompiler.prototype.pCompileShadowCode = function () { + if (this._shaderLightingObject.normalDependencies > 0) { + this._pSharedRegisters.shadowTarget = this._pSharedRegisters.normalFragment; + } + else { + this._pSharedRegisters.shadowTarget = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadowTarget, 1); + } + }; + /** + * Initializes constant registers to contain light data. + */ + ShaderLightingCompiler.prototype.initLightRegisters = function () { + // init these first so we're sure they're in sequence + var i, len; + if (this._dirLightVertexConstants) { + len = this._dirLightVertexConstants.length; + for (i = 0; i < len; ++i) { + this._dirLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant(); + if (this._shaderLightingObject.lightVertexConstantIndex == -1) + this._shaderLightingObject.lightVertexConstantIndex = this._dirLightVertexConstants[i].index * 4; + } + } + if (this._pointLightVertexConstants) { + len = this._pointLightVertexConstants.length; + for (i = 0; i < len; ++i) { + this._pointLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant(); + if (this._shaderLightingObject.lightVertexConstantIndex == -1) + this._shaderLightingObject.lightVertexConstantIndex = this._pointLightVertexConstants[i].index * 4; + } + } + len = this._dirLightFragmentConstants.length; + for (i = 0; i < len; ++i) { + this._dirLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant(); + if (this._shaderLightingObject.lightFragmentConstantIndex == -1) + this._shaderLightingObject.lightFragmentConstantIndex = this._dirLightFragmentConstants[i].index * 4; + } + len = this._pointLightFragmentConstants.length; + for (i = 0; i < len; ++i) { + this._pointLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant(); + if (this._shaderLightingObject.lightFragmentConstantIndex == -1) + this._shaderLightingObject.lightFragmentConstantIndex = this._pointLightFragmentConstants[i].index * 4; + } + }; + /** + * Compiles the shading code for directional and point lights. + */ + ShaderLightingCompiler.prototype.compileLightCode = function () { + var diffuseColorReg; + var specularColorReg; + var lightPosReg; + var lightDirReg; + var vertexRegIndex = 0; + var fragmentRegIndex = 0; + var addSpec = this._shaderLightingObject.usesLightsForSpecular; + var addDiff = this._shaderLightingObject.usesLightsForDiffuse; + for (var i = 0; i < this._materialLightingPass.iNumDirectionalLights; ++i) { + if (this._shaderLightingObject.usesTangentSpace) { + lightDirReg = this._dirLightVertexConstants[vertexRegIndex++]; + var lightVarying = this._pRegisterCache.getFreeVarying(); + this._pVertexCode += "m33 " + lightVarying + ".xyz, " + lightDirReg + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + lightVarying + ".w, " + lightDirReg + ".w\n"; + lightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addVertexTempUsages(lightDirReg, 1); + this._pFragmentCode += "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n" + "mov " + lightDirReg + ".w, " + lightVarying + ".w\n"; + } + else { + lightDirReg = this._dirLightFragmentConstants[fragmentRegIndex++]; + } + diffuseColorReg = this._dirLightFragmentConstants[fragmentRegIndex++]; + specularColorReg = this._dirLightFragmentConstants[fragmentRegIndex++]; + if (addDiff) + this._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters); + if (addSpec) + this._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters); + if (this._shaderLightingObject.usesTangentSpace) + this._pRegisterCache.removeVertexTempUsage(lightDirReg); + } + vertexRegIndex = 0; + fragmentRegIndex = 0; + for (var i = 0; i < this._materialLightingPass.iNumPointLights; ++i) { + if (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) + lightPosReg = this._pointLightVertexConstants[vertexRegIndex++]; + else + lightPosReg = this._pointLightFragmentConstants[fragmentRegIndex++]; + diffuseColorReg = this._pointLightFragmentConstants[fragmentRegIndex++]; + specularColorReg = this._pointLightFragmentConstants[fragmentRegIndex++]; + lightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp(); + this._pRegisterCache.addFragmentTempUsages(lightDirReg, 1); + var lightVarying; + if (this._shaderLightingObject.usesTangentSpace) { + lightVarying = this._pRegisterCache.getFreeVarying(); + var temp = this._pRegisterCache.getFreeVertexVectorTemp(); + this._pVertexCode += "sub " + temp + ", " + lightPosReg + ", " + this._pSharedRegisters.localPosition + "\n" + "m33 " + lightVarying + ".xyz, " + temp + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + lightVarying + ".w, " + this._pSharedRegisters.localPosition + ".w\n"; + } + else if (!this._shaderLightingObject.usesGlobalPosFragment) { + lightVarying = this._pRegisterCache.getFreeVarying(); + this._pVertexCode += "sub " + lightVarying + ", " + lightPosReg + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; + } + else { + lightVarying = lightDirReg; + this._pFragmentCode += "sub " + lightDirReg + ", " + lightPosReg + ", " + this._pSharedRegisters.globalPositionVarying + "\n"; + } + if (this._shaderLightingObject.usesLightFallOff) { + // calculate attenuation + this._pFragmentCode += "dp3 " + lightDirReg + ".w, " + lightVarying + ", " + lightVarying + "\n" + "sub " + lightDirReg + ".w, " + lightDirReg + ".w, " + diffuseColorReg + ".w\n" + "mul " + lightDirReg + ".w, " + lightDirReg + ".w, " + specularColorReg + ".w\n" + "sat " + lightDirReg + ".w, " + lightDirReg + ".w\n" + "sub " + lightDirReg + ".w, " + this._pSharedRegisters.commons + ".w, " + lightDirReg + ".w\n" + "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n"; + } + else { + this._pFragmentCode += "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n" + "mov " + lightDirReg + ".w, " + lightVarying + ".w\n"; + } + if (this._shaderLightingObject.lightFragmentConstantIndex == -1) + this._shaderLightingObject.lightFragmentConstantIndex = lightPosReg.index * 4; + if (addDiff) + this._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters); + if (addSpec) + this._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters); + this._pRegisterCache.removeFragmentTempUsage(lightDirReg); + } + }; + /** + * Compiles shading code for light probes. + */ + ShaderLightingCompiler.prototype.compileLightProbeCode = function () { + var weightReg; + var weightComponents = [".x", ".y", ".z", ".w"]; + var weightRegisters = new Array(); + var i; + var texReg; + var addSpec = this._shaderLightingObject.usesProbesForSpecular; + var addDiff = this._shaderLightingObject.usesProbesForDiffuse; + if (addDiff) + this._shaderLightingObject.lightProbeDiffuseIndices = new Array(); + if (addSpec) + this._shaderLightingObject.lightProbeSpecularIndices = new Array(); + for (i = 0; i < this._pNumProbeRegisters; ++i) { + weightRegisters[i] = this._pRegisterCache.getFreeFragmentConstant(); + if (i == 0) + this._shaderLightingObject.probeWeightsIndex = weightRegisters[i].index * 4; + } + for (i = 0; i < this._materialLightingPass.iNumLightProbes; ++i) { + weightReg = weightRegisters[Math.floor(i / 4)].toString() + weightComponents[i % 4]; + if (addDiff) { + texReg = this._pRegisterCache.getFreeTextureReg(); + this._shaderLightingObject.lightProbeDiffuseIndices[i] = texReg.index; + this._pFragmentCode += this._materialLightingPass._iGetPerProbeDiffuseFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters); } - else { - this._renderToTextureRect.y = 0; - this._renderToTextureRect.height = this._textureHeight; + if (addSpec) { + texReg = this._pRegisterCache.getFreeTextureReg(); + this._shaderLightingObject.lightProbeSpecularIndices[i] = texReg.index; + this._pFragmentCode += this._materialLightingPass._iGetPerProbeSpecularFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters); } - this.dispatchEvent(new Event(Event.RESIZE)); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "renderToTextureVertexBuffer", { - get: function () { - if (this._buffersInvalid) - this.updateRTTBuffers(); - return this._renderToTextureVertexBuffer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "renderToScreenVertexBuffer", { - get: function () { - if (this._buffersInvalid) - this.updateRTTBuffers(); - return this._renderToScreenVertexBuffer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "indexBuffer", { - get: function () { - return this._indexBuffer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "renderToTextureRect", { - get: function () { - if (this._buffersInvalid) - this.updateRTTBuffers(); - return this._renderToTextureRect; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "textureWidth", { - get: function () { - return this._textureWidth; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RTTBufferManager.prototype, "textureHeight", { - get: function () { - return this._textureHeight; - }, - enumerable: true, - configurable: true - }); - RTTBufferManager.prototype.dispose = function () { - RTTBufferManager.deleteRTTBufferManager(this._stage); - if (this._indexBuffer) { - this._indexBuffer.dispose(); - this._renderToScreenVertexBuffer.dispose(); - this._renderToTextureVertexBuffer.dispose(); - this._renderToScreenVertexBuffer = null; - this._renderToTextureVertexBuffer = null; - this._indexBuffer = null; } }; - // todo: place all this in a separate model, since it's used all over the place - // maybe it even has a place in the core (together with screenRect etc)? - // needs to be stored per view of course - RTTBufferManager.prototype.updateRTTBuffers = function () { - var context = this._stage.context; - var textureVerts; - var screenVerts; - var x; - var y; - if (this._renderToTextureVertexBuffer == null) - this._renderToTextureVertexBuffer = context.createVertexBuffer(4, 5); - if (this._renderToScreenVertexBuffer == null) - this._renderToScreenVertexBuffer = context.createVertexBuffer(4, 5); - if (!this._indexBuffer) { - this._indexBuffer = context.createIndexBuffer(6); - this._indexBuffer.uploadFromArray([2, 1, 0, 3, 2, 0], 0, 6); + /** + * Reset all the indices to "unused". + */ + ShaderLightingCompiler.prototype.pInitRegisterIndices = function () { + _super.prototype.pInitRegisterIndices.call(this); + this._shaderLightingObject.lightVertexConstantIndex = -1; + this._shaderLightingObject.lightFragmentConstantIndex = -1; + this._shaderLightingObject.probeWeightsIndex = -1; + this._pNumProbeRegisters = Math.ceil(this._materialLightingPass.iNumLightProbes / 4); + //init light data + if (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) { + this._pointLightVertexConstants = new Array(this._materialLightingPass.iNumPointLights); + this._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights * 2); + } + else { + this._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights * 3); + } + if (this._shaderLightingObject.usesTangentSpace) { + this._dirLightVertexConstants = new Array(this._materialLightingPass.iNumDirectionalLights); + this._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights * 2); + } + else { + this._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights * 3); } - this._textureRatioX = x = Math.min(this._viewWidth / this._textureWidth, 1); - this._textureRatioY = y = Math.min(this._viewHeight / this._textureHeight, 1); - var u1 = (1 - x) * .5; - var u2 = (x + 1) * .5; - var v1 = (y + 1) * .5; - var v2 = (1 - y) * .5; - // last element contains indices for data per vertex that can be passed to the vertex shader if necessary (ie: frustum corners for deferred rendering) - textureVerts = [-x, -y, u1, v1, 0, x, -y, u2, v1, 1, x, y, u2, v2, 2, -x, y, u1, v2, 3]; - screenVerts = [-1, -1, u1, v1, 0, 1, -1, u2, v1, 1, 1, 1, u2, v2, 2, -1, 1, u1, v2, 3]; - this._renderToTextureVertexBuffer.uploadFromArray(textureVerts, 0, 4); - this._renderToScreenVertexBuffer.uploadFromArray(screenVerts, 0, 4); - this._buffersInvalid = false; }; - return RTTBufferManager; -})(EventDispatcher); -var RTTBufferManagerVO = (function () { - function RTTBufferManagerVO() { - } - return RTTBufferManagerVO; -})(); -module.exports = RTTBufferManager; + /** + * Figure out which named registers are required, and how often. + */ + ShaderLightingCompiler.prototype.pCalculateDependencies = function () { + var numAllLights = this._materialLightingPass.iNumPointLights + this._materialLightingPass.iNumDirectionalLights; + var numLightProbes = this._materialLightingPass.iNumLightProbes; + var diffuseLightSources = this._pMaterial.diffuseLightSources; + var specularLightSources = this._materialLightingPass._iUsesSpecular() ? this._pMaterial.specularLightSources : 0x00; + var combinedLightSources = diffuseLightSources | specularLightSources; + this._shaderLightingObject.usesLightFallOff = this._pMaterial.enableLightFallOff && this._shaderLightingObject.profile != ContextGLProfile.BASELINE_CONSTRAINED; + this._shaderLightingObject.numLights = numAllLights + numLightProbes; + this._shaderLightingObject.numPointLights = this._materialLightingPass.iNumPointLights; + this._shaderLightingObject.numDirectionalLights = this._materialLightingPass.iNumDirectionalLights; + this._shaderLightingObject.numLightProbes = numLightProbes; + this._shaderLightingObject.pointLightsOffset = this._materialLightingPass.pointLightsOffset; + this._shaderLightingObject.directionalLightsOffset = this._materialLightingPass.directionalLightsOffset; + this._shaderLightingObject.lightProbesOffset = this._materialLightingPass.lightProbesOffset; + this._shaderLightingObject.lightPicker = this._materialLightingPass.lightPicker; + this._shaderLightingObject.usesLights = numAllLights > 0 && (combinedLightSources & LightSources.LIGHTS) != 0; + this._shaderLightingObject.usesProbes = numLightProbes > 0 && (combinedLightSources & LightSources.PROBES) != 0; + this._shaderLightingObject.usesLightsForSpecular = numAllLights > 0 && (specularLightSources & LightSources.LIGHTS) != 0; + this._shaderLightingObject.usesProbesForSpecular = numLightProbes > 0 && (specularLightSources & LightSources.PROBES) != 0; + this._shaderLightingObject.usesLightsForDiffuse = numAllLights > 0 && (diffuseLightSources & LightSources.LIGHTS) != 0; + this._shaderLightingObject.usesProbesForDiffuse = numLightProbes > 0 && (diffuseLightSources & LightSources.PROBES) != 0; + this._shaderLightingObject.usesShadows = this._materialLightingPass._iUsesShadows(); + _super.prototype.pCalculateDependencies.call(this); + }; + return ShaderLightingCompiler; +})(ShaderCompilerBase); +module.exports = ShaderLightingCompiler; -},{"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-core/lib/utils/TextureUtils":undefined}],"awayjs-stagegl/lib/managers/StageManager":[function(require,module,exports){ +},{"awayjs-display/lib/materials/LightSources":undefined,"awayjs-stagegl/lib/base/ContextGLProfile":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); -var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var Stage = require("awayjs-stagegl/lib/core/base/Stage"); +var ShaderLightingCompiler = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler"); +var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); /** - * The StageManager class provides a multiton object that handles management for Stage objects. + * ShaderObjectBase keeps track of the number of dependencies for "named registers" used across a pass. + * Named registers are that are not necessarily limited to a single method. They are created by the compiler and + * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed + * each time a method has been compiled into the shader. * - * @see away.base.Stage + * @see RegisterPool.addUsage */ -var StageManager = (function (_super) { - __extends(StageManager, _super); +var ShaderLightingObject = (function (_super) { + __extends(ShaderLightingObject, _super); /** - * Creates a new StageManager class. - * @param stage The Stage object that contains the Stage objects to be managed. - * @private + * Creates a new MethodCompilerVO object. */ - function StageManager() { - var _this = this; - _super.call(this); - this._stages = new Array(StageManager.STAGE_MAX_QUANTITY); - this._onContextCreatedDelegate = function (event) { return _this.onContextCreated(event); }; + function ShaderLightingObject(profile) { + _super.call(this, profile); } /** - * Gets a StageManager instance for the given Stage object. - * @param stage The Stage object that contains the Stage objects to be managed. - * @return The StageManager instance for the given Stage object. + * Factory method to create a concrete compiler object for this object + * + * @param materialPassVO + * @returns {away.materials.ShaderLightingCompiler} */ - StageManager.getInstance = function () { - if (this._instance == null) - this._instance = new StageManager(); - return this._instance; + ShaderLightingObject.prototype.createCompiler = function (material, materialPass) { + return new ShaderLightingCompiler(material, materialPass, this); }; /** - * Requests the Stage for the given index. - * - * @param index The index of the requested Stage. - * @param forceSoftware Whether to force software mode even if hardware acceleration is available. - * @param profile The compatibility profile, an enumeration of ContextProfile - * @return The Stage for the given index. + * Clears dependency counts for all registers. Called when recompiling a pass. */ - StageManager.prototype.getStageAt = function (index, forceSoftware, profile, mode) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - if (index < 0 || index >= StageManager.STAGE_MAX_QUANTITY) - throw new ArgumentError("Index is out of bounds [0.." + StageManager.STAGE_MAX_QUANTITY + "]"); - if (!this._stages[index]) { - StageManager._numStages++; - var canvas = document.createElement("canvas"); - canvas.id = "stage" + index; - document.body.appendChild(canvas); - var stage = this._stages[index] = new Stage(canvas, index, this, forceSoftware, profile); - stage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate); - stage.requestContext(forceSoftware, profile, mode); + ShaderLightingObject.prototype.reset = function () { + _super.prototype.reset.call(this); + this.numLights = 0; + this.usesLightFallOff = true; + }; + /** + * Adds any external world space dependencies, used to force world space calculations. + */ + ShaderLightingObject.prototype.addWorldSpaceDependencies = function (fragmentLights) { + _super.prototype.addWorldSpaceDependencies.call(this, fragmentLights); + if (this.numPointLights > 0 && this.usesLights) { + ++this.globalPosDependencies; + if (fragmentLights) + this.usesGlobalPosFragment = true; } - return stage; }; /** - * Removes a Stage from the manager. - * @param stage - * @private + * + * + * @param renderable + * @param stage + * @param camera + */ + ShaderLightingObject.prototype.setRenderState = function (renderable, stage, camera, viewProjection) { + _super.prototype.setRenderState.call(this, renderable, stage, camera, viewProjection); + if (this.usesLights) + this.updateLights(); + if (this.usesProbes) + this.updateProbes(stage); + }; + /** + * Updates constant data render state used by the lights. This method is optional for subclasses to implement. */ - StageManager.prototype.iRemoveStage = function (stage) { - StageManager._numStages--; - stage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate); - this._stages[stage.stageIndex] = null; + ShaderLightingObject.prototype.updateLights = function () { + var dirLight; + var pointLight; + var i = 0; + var k = 0; + var len; + var dirPos; + var total = 0; + var numLightTypes = this.usesShadows ? 2 : 1; + var l; + var offset; + this.ambientR = this.ambientG = this.ambientB = 0; + l = this.lightVertexConstantIndex; + k = this.lightFragmentConstantIndex; + var cast = 0; + var dirLights = this.lightPicker.directionalLights; + offset = this.directionalLightsOffset; + len = this.lightPicker.directionalLights.length; + if (offset > len) { + cast = 1; + offset -= len; + } + for (; cast < numLightTypes; ++cast) { + if (cast) + dirLights = this.lightPicker.castingDirectionalLights; + len = dirLights.length; + if (len > this.numDirectionalLights) + len = this.numDirectionalLights; + for (i = 0; i < len; ++i) { + dirLight = dirLights[offset + i]; + dirPos = dirLight.sceneDirection; + this.ambientR += dirLight._iAmbientR; + this.ambientG += dirLight._iAmbientG; + this.ambientB += dirLight._iAmbientB; + if (this.usesTangentSpace) { + var x = -dirPos.x; + var y = -dirPos.y; + var z = -dirPos.z; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z; + this.vertexConstantData[l++] = 1; + } + else { + this.fragmentConstantData[k++] = -dirPos.x; + this.fragmentConstantData[k++] = -dirPos.y; + this.fragmentConstantData[k++] = -dirPos.z; + this.fragmentConstantData[k++] = 1; + } + this.fragmentConstantData[k++] = dirLight._iDiffuseR; + this.fragmentConstantData[k++] = dirLight._iDiffuseG; + this.fragmentConstantData[k++] = dirLight._iDiffuseB; + this.fragmentConstantData[k++] = 1; + this.fragmentConstantData[k++] = dirLight._iSpecularR; + this.fragmentConstantData[k++] = dirLight._iSpecularG; + this.fragmentConstantData[k++] = dirLight._iSpecularB; + this.fragmentConstantData[k++] = 1; + if (++total == this.numDirectionalLights) { + // break loop + i = len; + cast = numLightTypes; + } + } + } + // more directional supported than currently picked, need to clamp all to 0 + if (this.numDirectionalLights > total) { + i = k + (this.numDirectionalLights - total) * 12; + while (k < i) + this.fragmentConstantData[k++] = 0; + } + total = 0; + var pointLights = this.lightPicker.pointLights; + offset = this.pointLightsOffset; + len = this.lightPicker.pointLights.length; + if (offset > len) { + cast = 1; + offset -= len; + } + else { + cast = 0; + } + for (; cast < numLightTypes; ++cast) { + if (cast) + pointLights = this.lightPicker.castingPointLights; + len = pointLights.length; + for (i = 0; i < len; ++i) { + pointLight = pointLights[offset + i]; + dirPos = pointLight.scenePosition; + this.ambientR += pointLight._iAmbientR; + this.ambientG += pointLight._iAmbientG; + this.ambientB += pointLight._iAmbientB; + if (this.usesTangentSpace) { + x = dirPos.x; + y = dirPos.y; + z = dirPos.z; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z + this._pInverseSceneMatrix[12]; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z + this._pInverseSceneMatrix[13]; + this.vertexConstantData[l++] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z + this._pInverseSceneMatrix[14]; + this.vertexConstantData[l++] = 1; + } + else if (!this.usesGlobalPosFragment) { + this.vertexConstantData[l++] = dirPos.x; + this.vertexConstantData[l++] = dirPos.y; + this.vertexConstantData[l++] = dirPos.z; + this.vertexConstantData[l++] = 1; + } + else { + this.fragmentConstantData[k++] = dirPos.x; + this.fragmentConstantData[k++] = dirPos.y; + this.fragmentConstantData[k++] = dirPos.z; + this.fragmentConstantData[k++] = 1; + } + this.fragmentConstantData[k++] = pointLight._iDiffuseR; + this.fragmentConstantData[k++] = pointLight._iDiffuseG; + this.fragmentConstantData[k++] = pointLight._iDiffuseB; + var radius = pointLight._pRadius; + this.fragmentConstantData[k++] = radius * radius; + this.fragmentConstantData[k++] = pointLight._iSpecularR; + this.fragmentConstantData[k++] = pointLight._iSpecularG; + this.fragmentConstantData[k++] = pointLight._iSpecularB; + this.fragmentConstantData[k++] = pointLight._pFallOffFactor; + if (++total == this.numPointLights) { + // break loop + i = len; + cast = numLightTypes; + } + } + } + // more directional supported than currently picked, need to clamp all to 0 + if (this.numPointLights > total) { + i = k + (total - this.numPointLights) * 12; + for (; k < i; ++k) + this.fragmentConstantData[k] = 0; + } }; /** - * Get the next available stage. An error is thrown if there are no StageProxies available - * @param forceSoftware Whether to force software mode even if hardware acceleration is available. - * @param profile The compatibility profile, an enumeration of ContextProfile - * @return The allocated stage + * Updates constant data render state used by the light probes. This method is optional for subclasses to implement. */ - StageManager.prototype.getFreeStage = function (forceSoftware, profile, mode) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - var i = 0; - var len = this._stages.length; - while (i < len) { - if (!this._stages[i]) - return this.getStageAt(i, forceSoftware, profile, mode); - ++i; + ShaderLightingObject.prototype.updateProbes = function (stage) { + var probe; + var lightProbes = this.lightPicker.lightProbes; + var weights = this.lightPicker.lightProbeWeights; + var len = lightProbes.length - this.lightProbesOffset; + var addDiff = this.usesProbesForDiffuse; + var addSpec = this.usesProbesForSpecular; + if (!(addDiff || addSpec)) + return; + if (len > this.numLightProbes) + len = this.numLightProbes; + for (var i = 0; i < len; ++i) { + probe = lightProbes[this.lightProbesOffset + i]; + if (addDiff) + stage.context.activateCubeTexture(this.lightProbeDiffuseIndices[i], probe.diffuseMap); + if (addSpec) + stage.context.activateCubeTexture(this.lightProbeSpecularIndices[i], probe.specularMap); } - return null; - }; - Object.defineProperty(StageManager.prototype, "hasFreeStage", { - /** - * Checks if a new stage can be created and managed by the class. - * @return true if there is one slot free for a new stage - */ - get: function () { - return StageManager._numStages < StageManager.STAGE_MAX_QUANTITY ? true : false; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StageManager.prototype, "numSlotsFree", { - /** - * Returns the amount of stage objects that can be created and managed by the class - * @return the amount of free slots - */ - get: function () { - return StageManager.STAGE_MAX_QUANTITY - StageManager._numStages; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StageManager.prototype, "numSlotsUsed", { - /** - * Returns the amount of Stage objects currently managed by the class. - * @return the amount of slots used - */ - get: function () { - return StageManager._numStages; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StageManager.prototype, "numSlotsTotal", { - /** - * The maximum amount of Stage objects that can be managed by the class - */ - get: function () { - return this._stages.length; - }, - enumerable: true, - configurable: true - }); - StageManager.prototype.onContextCreated = function (event) { - //var stage:Stage = e.target; - //document.body.appendChild(stage.canvas) + for (i = 0; i < len; ++i) + this.fragmentConstantData[this.probeWeightsIndex + i] = weights[this.lightProbesOffset + i]; }; - StageManager.STAGE_MAX_QUANTITY = 8; - StageManager._numStages = 0; - return StageManager; -})(EventDispatcher); -module.exports = StageManager; + return ShaderLightingObject; +})(ShaderObjectBase); +module.exports = ShaderLightingObject; -},{"awayjs-core/lib/errors/ArgumentError":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-stagegl/lib/core/base/Stage":undefined}],"awayjs-stagegl/lib/materials/LineBasicMaterial":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); -var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -var LineBasicPass = require("awayjs-stagegl/lib/materials/passes/LineBasicPass"); +},{"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":[function(require,module,exports){ +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); +var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); /** - * LineMaterial is a material exclusively used to render wireframe objects + * ShaderObjectBase keeps track of the number of dependencies for "named registers" used across a pass. + * Named registers are that are not necessarily limited to a single method. They are created by the compiler and + * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed + * each time a method has been compiled into the shader. * - * @see away.entities.Lines + * @see RegisterPool.addUsage */ -var LineBasicMaterial = (function (_super) { - __extends(LineBasicMaterial, _super); +var ShaderObjectBase = (function () { + /** + * Creates a new MethodCompilerVO object. + */ + function ShaderObjectBase(profile) { + this._defaultCulling = ContextGLTriangleFace.BACK; + this._pInverseSceneMatrix = new Array(); + //set ambient values to default + this.ambientR = 0xFF; + this.ambientG = 0xFF; + this.ambientB = 0xFF; + /** + * Indicates whether there are any dependencies on the world-space position vector. + */ + this.usesGlobalPosFragment = false; + this.vertexConstantData = new Array(); + this.fragmentConstantData = new Array(); + this.profile = profile; + } /** - * Creates a new LineMaterial object. + * Factory method to create a concrete compiler object for this object * - * @param thickness The thickness of the wireframe lines. + * @param materialPassVO + * @returns {away.materials.ShaderCompilerBase} */ - function LineBasicMaterial(thickness) { - if (thickness === void 0) { thickness = 1.25; } - _super.call(this); - this._constants = new Array(0, 0, 0, 0); - this._thickness = thickness; - this.bothSides = true; - this._pAddScreenPass(this._screenPass = new LineBasicPass()); - this._calcMatrix = new Matrix3D(); - this._constants[1] = 1 / 255; - } + ShaderObjectBase.prototype.createCompiler = function (material, materialPass) { + return new ShaderCompilerBase(material, materialPass, this); + }; /** - * @inheritDoc + * Clears dependency counts for all registers. Called when recompiling a pass. */ - LineBasicMaterial.prototype._iGetVertexCode = function (shaderObject, regCache, sharedReg) { - return "m44 vt0, va0, vc8 \n" + "m44 vt1, va1, vc8 \n" + "sub vt2, vt1, vt0 \n" + "slt vt5.x, vt0.z, vc7.z \n" + "sub vt5.y, vc5.x, vt5.x \n" + "add vt4.x, vt0.z, vc7.z \n" + "sub vt4.y, vt0.z, vt1.z \n" + "seq vt4.z, vt4.y vc6.x \n" + "add vt4.y, vt4.y, vt4.z \n" + "div vt4.z, vt4.x, vt4.y \n" + "mul vt4.xyz, vt4.zzz, vt2.xyz \n" + "add vt3.xyz, vt0.xyz, vt4.xyz \n" + "mov vt3.w, vc5.x \n" + "mul vt0, vt0, vt5.yyyy \n" + "mul vt3, vt3, vt5.xxxx \n" + "add vt0, vt0, vt3 \n" + "sub vt2, vt1, vt0 \n" + "nrm vt2.xyz, vt2.xyz \n" + "nrm vt5.xyz, vt0.xyz \n" + "mov vt5.w, vc5.x \n" + "crs vt3.xyz, vt2, vt5 \n" + "nrm vt3.xyz, vt3.xyz \n" + "mul vt3.xyz, vt3.xyz, va2.xxx \n" + "mov vt3.w, vc5.x \n" + "dp3 vt4.x, vt0, vc6 \n" + "mul vt4.x, vt4.x, vc7.x \n" + "mul vt3.xyz, vt3.xyz, vt4.xxx \n" + "add vt0.xyz, vt0.xyz, vt3.xyz \n" + "m44 op, vt0, vc0 \n" + "mov v0, va3 \n"; + ShaderObjectBase.prototype.reset = function () { + this.projectionDependencies = 0; + this.normalDependencies = 0; + this.viewDirDependencies = 0; + this.uvDependencies = 0; + this.secondaryUVDependencies = 0; + this.globalPosDependencies = 0; + this.tangentDependencies = 0; + this.usesGlobalPosFragment = false; + this.usesFragmentAnimation = false; + this.usesTangentSpace = false; + this.outputsNormals = false; + this.outputsTangentNormals = false; + }; + /** + * Adds any external world space dependencies, used to force world space calculations. + */ + ShaderObjectBase.prototype.addWorldSpaceDependencies = function (fragmentLights) { + if (this.viewDirDependencies > 0) + ++this.globalPosDependencies; + }; + ShaderObjectBase.prototype.pInitRegisterIndices = function () { + this.commonsDataIndex = -1; + this.cameraPositionIndex = -1; + this.uvBufferIndex = -1; + this.uvTransformIndex = -1; + this.secondaryUVBufferIndex = -1; + this.normalBufferIndex = -1; + this.tangentBufferIndex = -1; + this.sceneMatrixIndex = -1; + this.sceneNormalMatrixIndex = -1; + }; + /** + * Initializes the unchanging constant data for this shader object. + */ + ShaderObjectBase.prototype.initConstantData = function (registerCache, animatableAttributes, animationTargetRegisters, uvSource, uvTarget) { + //Updates the amount of used register indices. + this.numUsedVertexConstants = registerCache.numUsedVertexConstants; + this.numUsedFragmentConstants = registerCache.numUsedFragmentConstants; + this.numUsedStreams = registerCache.numUsedStreams; + this.numUsedTextures = registerCache.numUsedTextures; + this.numUsedVaryings = registerCache.numUsedVaryings; + this.numUsedFragmentConstants = registerCache.numUsedFragmentConstants; + this.animatableAttributes = animatableAttributes; + this.animationTargetRegisters = animationTargetRegisters; + this.uvSource = uvSource; + this.uvTarget = uvTarget; + this.vertexConstantData.length = this.numUsedVertexConstants * 4; + this.fragmentConstantData.length = this.numUsedFragmentConstants * 4; + //Initializes commonly required constant values. + this.fragmentConstantData[this.commonsDataIndex] = .5; + this.fragmentConstantData[this.commonsDataIndex + 1] = 0; + this.fragmentConstantData[this.commonsDataIndex + 2] = 1 / 255; + this.fragmentConstantData[this.commonsDataIndex + 3] = 1; + //Initializes the default UV transformation matrix. + if (this.uvTransformIndex >= 0) { + this.vertexConstantData[this.uvTransformIndex] = 1; + this.vertexConstantData[this.uvTransformIndex + 1] = 0; + this.vertexConstantData[this.uvTransformIndex + 2] = 0; + this.vertexConstantData[this.uvTransformIndex + 3] = 0; + this.vertexConstantData[this.uvTransformIndex + 4] = 0; + this.vertexConstantData[this.uvTransformIndex + 5] = 1; + this.vertexConstantData[this.uvTransformIndex + 6] = 0; + this.vertexConstantData[this.uvTransformIndex + 7] = 0; + } + if (this.cameraPositionIndex >= 0) + this.vertexConstantData[this.cameraPositionIndex + 3] = 1; }; /** * @inheritDoc */ - LineBasicMaterial.prototype._iActivatePass = function (pass, stage, camera) { - _super.prototype._iActivatePass.call(this, pass, stage, camera); - var context = stage.context; - this._constants[0] = this._thickness / ((stage.scissorRect) ? Math.min(stage.scissorRect.width, stage.scissorRect.height) : Math.min(stage.width, stage.height)); - // value to convert distance from camera to model length per pixel width - this._constants[2] = camera.projection.near; - context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 5, LineBasicMaterial.pONE_VECTOR, 1); - context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 6, LineBasicMaterial.pFRONT_VECTOR, 1); - context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 7, this._constants, 1); - // projection matrix - context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, camera.projection.matrix, true); + ShaderObjectBase.prototype.iActivate = function (stage, camera) { + stage.context.setCulling(this.useBothSides ? ContextGLTriangleFace.NONE : this._defaultCulling, camera.projection.coordinateSystem); + if (!this.usesTangentSpace && this.cameraPositionIndex >= 0) { + var pos = camera.scenePosition; + this.vertexConstantData[this.cameraPositionIndex] = pos.x; + this.vertexConstantData[this.cameraPositionIndex + 1] = pos.y; + this.vertexConstantData[this.cameraPositionIndex + 2] = pos.z; + } }; /** * @inheritDoc */ - LineBasicMaterial.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { - _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); + ShaderObjectBase.prototype.iDeactivate = function (stage) { + }; + /** + * + * + * @param renderable + * @param stage + * @param camera + */ + ShaderObjectBase.prototype.setRenderState = function (renderable, stage, camera, viewProjection) { var context = stage.context; - this._calcMatrix.copyFrom(renderable.sourceEntity.sceneTransform); - this._calcMatrix.append(camera.inverseSceneTransform); - context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 8, this._calcMatrix, true); - context.activateBuffer(0, renderable.getVertexData(LineSubGeometry.START_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.START_POSITION_DATA), LineSubGeometry.POSITION_FORMAT); - context.activateBuffer(1, renderable.getVertexData(LineSubGeometry.END_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.END_POSITION_DATA), LineSubGeometry.POSITION_FORMAT); - context.activateBuffer(2, renderable.getVertexData(LineSubGeometry.THICKNESS_DATA), renderable.getVertexOffset(LineSubGeometry.THICKNESS_DATA), LineSubGeometry.THICKNESS_FORMAT); - context.activateBuffer(3, renderable.getVertexData(LineSubGeometry.COLOR_DATA), renderable.getVertexOffset(LineSubGeometry.COLOR_DATA), LineSubGeometry.COLOR_FORMAT); - context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); + if (renderable.materialOwner.animator) + renderable.materialOwner.animator.setRenderState(this, renderable, stage, camera, this.numUsedVertexConstants, this.numUsedStreams); + if (this.uvBufferIndex >= 0) + context.activateBuffer(this.uvBufferIndex, renderable.getVertexData(TriangleSubGeometry.UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.UV_DATA), TriangleSubGeometry.UV_FORMAT); + if (this.secondaryUVBufferIndex >= 0) + context.activateBuffer(this.secondaryUVBufferIndex, renderable.getVertexData(TriangleSubGeometry.SECONDARY_UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.SECONDARY_UV_DATA), TriangleSubGeometry.SECONDARY_UV_FORMAT); + if (this.normalBufferIndex >= 0) + context.activateBuffer(this.normalBufferIndex, renderable.getVertexData(TriangleSubGeometry.NORMAL_DATA), renderable.getVertexOffset(TriangleSubGeometry.NORMAL_DATA), TriangleSubGeometry.NORMAL_FORMAT); + if (this.tangentBufferIndex >= 0) + context.activateBuffer(this.tangentBufferIndex, renderable.getVertexData(TriangleSubGeometry.TANGENT_DATA), renderable.getVertexOffset(TriangleSubGeometry.TANGENT_DATA), TriangleSubGeometry.TANGENT_FORMAT); + if (this.usesUVTransform) { + var uvTransform = renderable.materialOwner.uvTransform.matrix; + if (uvTransform) { + this.vertexConstantData[this.uvTransformIndex] = uvTransform.a; + this.vertexConstantData[this.uvTransformIndex + 1] = uvTransform.b; + this.vertexConstantData[this.uvTransformIndex + 3] = uvTransform.tx; + this.vertexConstantData[this.uvTransformIndex + 4] = uvTransform.c; + this.vertexConstantData[this.uvTransformIndex + 5] = uvTransform.d; + this.vertexConstantData[this.uvTransformIndex + 7] = uvTransform.ty; + } + else { + this.vertexConstantData[this.uvTransformIndex] = 1; + this.vertexConstantData[this.uvTransformIndex + 1] = 0; + this.vertexConstantData[this.uvTransformIndex + 3] = 0; + this.vertexConstantData[this.uvTransformIndex + 4] = 0; + this.vertexConstantData[this.uvTransformIndex + 5] = 1; + this.vertexConstantData[this.uvTransformIndex + 7] = 0; + } + } + if (this.sceneNormalMatrixIndex >= 0) + renderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this.vertexConstantData, this.sceneNormalMatrixIndex, false); + if (this.usesTangentSpace && this.cameraPositionIndex >= 0) { + renderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this._pInverseSceneMatrix); + var pos = camera.scenePosition; + var x = pos.x; + var y = pos.y; + var z = pos.z; + this.vertexConstantData[this.cameraPositionIndex] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z + this._pInverseSceneMatrix[12]; + this.vertexConstantData[this.cameraPositionIndex + 1] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z + this._pInverseSceneMatrix[13]; + this.vertexConstantData[this.cameraPositionIndex + 2] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z + this._pInverseSceneMatrix[14]; + } }; - LineBasicMaterial.pONE_VECTOR = Array(1, 1, 1, 1); - LineBasicMaterial.pFRONT_VECTOR = Array(0, 0, -1, 0); - return LineBasicMaterial; -})(StageGLMaterialBase); -module.exports = LineBasicMaterial; + ShaderObjectBase.prototype.dispose = function () { + //TODO uncount associated program data + }; + return ShaderObjectBase; +})(); +module.exports = ShaderObjectBase; -},{"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-display/lib/base/LineSubGeometry":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/LineBasicPass":undefined}],"awayjs-stagegl/lib/materials/SkyboxMaterial":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -var SkyboxPass = require("awayjs-stagegl/lib/materials/passes/SkyboxPass"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/base/ContextGLTriangleFace":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache":[function(require,module,exports){ +var RegisterPool = require("awayjs-stagegl/lib/materials/compilation/RegisterPool"); +var ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); /** - * SkyboxMaterial is a material exclusively used to render skyboxes - * - * @see away3d.primitives.Skybox + * ShaderRegister Cache provides the usage management system for all registers during shading compilation. */ -var SkyboxMaterial = (function (_super) { - __extends(SkyboxMaterial, _super); +var ShaderRegisterCache = (function () { /** - * Creates a new SkyboxMaterial object. - * @param cubeMap The CubeMap to use as the skybox. + * Create a new ShaderRegisterCache object. + * + * @param profile The compatibility profile used by the renderer. */ - function SkyboxMaterial(cubeMap, smooth, repeat, mipmap) { - if (smooth === void 0) { smooth = true; } - if (repeat === void 0) { repeat = false; } - if (mipmap === void 0) { mipmap = false; } - _super.call(this); - this._cubeMap = cubeMap; - this._pAddScreenPass(this._skyboxPass = new SkyboxPass()); - this._vertexData = new Array(0, 0, 0, 0, 1, 1, 1, 1); + function ShaderRegisterCache(profile) { + this._numUsedVertexConstants = 0; + this._numUsedFragmentConstants = 0; + this._numUsedStreams = 0; + this._numUsedTextures = 0; + this._numUsedVaryings = 0; + this._profile = profile; } - Object.defineProperty(SkyboxMaterial.prototype, "cubeMap", { - /** - * The cube texture to use as the skybox. - */ - get: function () { - return this._cubeMap; - }, - set: function (value) { - if (value && this._cubeMap && (value.hasMipmaps != this._cubeMap.hasMipmaps || value.format != this._cubeMap.format)) - this._pInvalidatePasses(); - this._cubeMap = value; - }, - enumerable: true, - configurable: true - }); /** - * @inheritDoc + * Resets all registers. + */ + ShaderRegisterCache.prototype.reset = function () { + this._fragmentTempCache = new RegisterPool("ft", 8, false); + this._vertexTempCache = new RegisterPool("vt", 8, false); + this._varyingCache = new RegisterPool("v", 8); + this._textureCache = new RegisterPool("fs", 8); + this._vertexAttributesCache = new RegisterPool("va", 8); + this._fragmentConstantsCache = new RegisterPool("fc", 28); + this._vertexConstantsCache = new RegisterPool("vc", 128); + this._fragmentOutputRegister = new ShaderRegisterElement("oc", -1); + this._vertexOutputRegister = new ShaderRegisterElement("op", -1); + this._numUsedVertexConstants = 0; + this._numUsedStreams = 0; + this._numUsedTextures = 0; + this._numUsedVaryings = 0; + this._numUsedFragmentConstants = 0; + var i; + for (i = 0; i < this._vertexAttributesOffset; ++i) + this.getFreeVertexAttribute(); + for (i = 0; i < this._vertexConstantOffset; ++i) + this.getFreeVertexConstant(); + for (i = 0; i < this._varyingsOffset; ++i) + this.getFreeVarying(); + for (i = 0; i < this._fragmentConstantOffset; ++i) + this.getFreeFragmentConstant(); + }; + /** + * Disposes all resources used. */ - SkyboxMaterial.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return "mul vt0, va0, vc5\n" + "add vt0, vt0, vc4\n" + "m44 op, vt0, vc0\n" + "mov v0, va0\n"; + ShaderRegisterCache.prototype.dispose = function () { + this._fragmentTempCache.dispose(); + this._vertexTempCache.dispose(); + this._varyingCache.dispose(); + this._fragmentConstantsCache.dispose(); + this._vertexAttributesCache.dispose(); + this._fragmentTempCache = null; + this._vertexTempCache = null; + this._varyingCache = null; + this._fragmentConstantsCache = null; + this._vertexAttributesCache = null; + this._fragmentOutputRegister = null; + this._vertexOutputRegister = null; }; /** - * @inheritDoc + * Marks a fragment temporary register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage + * has been called usageCount times again. + * @param register The register to mark as used. + * @param usageCount The amount of usages to add. */ - SkyboxMaterial.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - //var cubeMapReg:ShaderRegisterElement = registerCache.getFreeTextureReg(); - //this._texturesIndex = cubeMapReg.index; - //ShaderCompilerHelper.getTexCubeSampleCode(sharedRegisters.shadedTarget, cubeMapReg, this._cubeTexture, shaderObject.useSmoothTextures, shaderObject.useMipmapping); - var mip = ",mipnone"; - if (this._cubeMap.hasMipmaps) - mip = ",miplinear"; - return "tex ft0, v0, fs0 \n"; + ShaderRegisterCache.prototype.addFragmentTempUsages = function (register, usageCount) { + this._fragmentTempCache.addUsage(register, usageCount); }; /** - * @inheritDoc + * Removes a usage from a fragment temporary register. When usages reach 0, the register is freed again. + * @param register The register for which to remove a usage. */ - SkyboxMaterial.prototype._iActivatePass = function (pass, stage, camera) { - _super.prototype._iActivatePass.call(this, pass, stage, camera); - var context = stage.context; - context.setSamplerStateAt(0, ContextGLWrapMode.CLAMP, ContextGLTextureFilter.LINEAR, this._cubeMap.hasMipmaps ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - context.setDepthTest(false, ContextGLCompareMode.LESS); - context.activateCubeTexture(0, this._cubeMap); + ShaderRegisterCache.prototype.removeFragmentTempUsage = function (register) { + this._fragmentTempCache.removeUsage(register); }; /** - * @inheritDoc + * Marks a vertex temporary register as used, so it cannot be retrieved. The register won't be able to be used + * until removeUsage has been called usageCount times again. + * @param register The register to mark as used. + * @param usageCount The amount of usages to add. */ - SkyboxMaterial.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { - _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); - var context = stage.context; - var pos = camera.scenePosition; - this._vertexData[0] = pos.x; - this._vertexData[1] = pos.y; - this._vertexData[2] = pos.z; - this._vertexData[4] = this._vertexData[5] = this._vertexData[6] = camera.projection.far / Math.sqrt(3); - context.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, viewProjection, true); - context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 4, this._vertexData, 2); - context.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT); - context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); + ShaderRegisterCache.prototype.addVertexTempUsages = function (register, usageCount) { + this._vertexTempCache.addUsage(register, usageCount); }; - return SkyboxMaterial; -})(StageGLMaterialBase); -module.exports = SkyboxMaterial; - - -},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/SkyboxPass":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/StageGLMaterialBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); -var StageGLMaterialBase = (function (_super) { - __extends(StageGLMaterialBase, _super); - function StageGLMaterialBase() { - _super.apply(this, arguments); - } - StageGLMaterialBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; + /** + * Removes a usage from a vertex temporary register. When usages reach 0, the register is freed again. + * @param register The register for which to remove a usage. + */ + ShaderRegisterCache.prototype.removeVertexTempUsage = function (register) { + this._vertexTempCache.removeUsage(register); }; - StageGLMaterialBase.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; + /** + * Retrieve an entire fragment temporary register that's still available. The register won't be able to be used until removeUsage + * has been called usageCount times again. + */ + ShaderRegisterCache.prototype.getFreeFragmentVectorTemp = function () { + return this._fragmentTempCache.requestFreeVectorReg(); }; - return StageGLMaterialBase; -})(MaterialBase); -module.exports = StageGLMaterialBase; - - -},{"awayjs-display/lib/materials/MaterialBase":undefined}],"awayjs-stagegl/lib/materials/TriangleBasicMaterial":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); -var BlendMode = require("awayjs-display/lib/base/BlendMode"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var TriangleBasicPass = require("awayjs-stagegl/lib/materials/passes/TriangleBasicPass"); -var TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); -/** - * TriangleMaterial forms an abstract base class for the default shaded materials provided by Stage, - * using material methods to define their appearance. - */ -var TriangleBasicMaterial = (function (_super) { - __extends(TriangleBasicMaterial, _super); - function TriangleBasicMaterial(textureColor, smoothAlpha, repeat, mipmap) { - if (textureColor === void 0) { textureColor = null; } - if (smoothAlpha === void 0) { smoothAlpha = null; } - if (repeat === void 0) { repeat = false; } - if (mipmap === void 0) { mipmap = false; } - _super.call(this); - this._alphaBlending = false; - this._alpha = 1; - this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; - this._screenPass = new TriangleBasicPass(); - if (textureColor instanceof Texture2DBase) { - this.texture = textureColor; - this.smooth = (smoothAlpha == null) ? true : false; - this.repeat = repeat; - this.mipmap = mipmap; - } - else { - this.color = textureColor ? Number(textureColor) : 0xCCCCCC; - this.alpha = (smoothAlpha == null) ? 1 : Number(smoothAlpha); - } - } - Object.defineProperty(TriangleBasicMaterial.prototype, "depthCompareMode", { - /** - * The depth compare mode used to render the renderables using this material. - * - * @see away.stagegl.ContextGLCompareMode - */ - get: function () { - return this._depthCompareMode; - }, - set: function (value) { - if (this._depthCompareMode == value) - return; - this._depthCompareMode = value; - this._pInvalidatePasses(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleBasicMaterial.prototype, "alpha", { - /** - * The alpha of the surface. - */ - get: function () { - return this._alpha; - }, - set: function (value) { - if (value > 1) - value = 1; - else if (value < 0) - value = 0; - if (this._alpha == value) - return; - this._alpha = value; - this._pInvalidatePasses(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleBasicMaterial.prototype, "alphaBlending", { - /** - * Indicates whether or not the material has transparency. If binary transparency is sufficient, for - * example when using textures of foliage, consider using alphaThreshold instead. - */ - get: function () { - return this._alphaBlending; - }, - set: function (value) { - if (this._alphaBlending == value) - return; - this._alphaBlending = value; - this._pInvalidatePasses(); - }, - enumerable: true, - configurable: true - }); /** - * @inheritDoc + * Retrieve a single component from a fragment temporary register that's still available. */ - TriangleBasicMaterial.prototype.iUpdateMaterial = function () { - var passesInvalid; - if (this._pScreenPassesInvalid) { - this.pUpdateScreenPasses(); - passesInvalid = true; - } - if (passesInvalid) { - this._pClearScreenPasses(); - this._pAddScreenPass(this._screenPass); - } + ShaderRegisterCache.prototype.getFreeFragmentSingleTemp = function () { + return this._fragmentTempCache.requestFreeRegComponent(); }; /** - * Updates screen passes when they were found to be invalid. + * Retrieve an available varying register */ - TriangleBasicMaterial.prototype.pUpdateScreenPasses = function () { - this.initPasses(); - this.setBlendAndCompareModes(); - this._pScreenPassesInvalid = false; + ShaderRegisterCache.prototype.getFreeVarying = function () { + ++this._numUsedVaryings; + return this._varyingCache.requestFreeVectorReg(); }; /** - * Initializes all the passes and their dependent passes. + * Retrieve an available fragment constant register */ - TriangleBasicMaterial.prototype.initPasses = function () { - // + ShaderRegisterCache.prototype.getFreeFragmentConstant = function () { + ++this._numUsedFragmentConstants; + return this._fragmentConstantsCache.requestFreeVectorReg(); }; /** - * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes. + * Retrieve an available vertex constant register */ - TriangleBasicMaterial.prototype.setBlendAndCompareModes = function () { - this._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || this._alpha < 1); - this._screenPass.depthCompareMode = this._depthCompareMode; - this._screenPass.preserveAlpha = this._pRequiresBlending; - this._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending) ? BlendMode.LAYER : this._pBlendMode); - this._screenPass.forceSeparateMVP = false; + ShaderRegisterCache.prototype.getFreeVertexConstant = function () { + ++this._numUsedVertexConstants; + return this._vertexConstantsCache.requestFreeVectorReg(); }; - return TriangleBasicMaterial; -})(TriangleMaterialBase); -module.exports = TriangleBasicMaterial; - - -},{"awayjs-core/lib/textures/Texture2DBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialBase":undefined,"awayjs-stagegl/lib/materials/passes/TriangleBasicPass":undefined}],"awayjs-stagegl/lib/materials/TriangleMaterialBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Matrix3DUtils = require("awayjs-core/lib/geom/Matrix3DUtils"); -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -/** - * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, - * using material methods to define their appearance. - */ -var TriangleMaterialBase = (function (_super) { - __extends(TriangleMaterialBase, _super); - function TriangleMaterialBase() { - _super.apply(this, arguments); - } - TriangleMaterialBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - //get the projection coordinates - var position = (shaderObject.globalPosDependencies > 0) ? sharedRegisters.globalPositionVertex : sharedRegisters.localPosition; - //reserving vertex constants for projection matrix - var viewMatrixReg = registerCache.getFreeVertexConstant(); - registerCache.getFreeVertexConstant(); - registerCache.getFreeVertexConstant(); - registerCache.getFreeVertexConstant(); - shaderObject.viewMatrixIndex = viewMatrixReg.index * 4; - if (shaderObject.projectionDependencies > 0) { - sharedRegisters.projectionFragment = registerCache.getFreeVarying(); - var temp = registerCache.getFreeVertexVectorTemp(); - code += "m44 " + temp + ", " + position + ", " + viewMatrixReg + "\n" + "mov " + sharedRegisters.projectionFragment + ", " + temp + "\n" + "mov op, " + temp + "\n"; - } - else { - code += "m44 op, " + position + ", " + viewMatrixReg + "\n"; - } - return code; + /** + * Retrieve an entire vertex temporary register that's still available. + */ + ShaderRegisterCache.prototype.getFreeVertexVectorTemp = function () { + return this._vertexTempCache.requestFreeVectorReg(); }; /** - * @inheritDoc + * Retrieve a single component from a vertex temporary register that's still available. */ - TriangleMaterialBase.prototype._iRenderPass = function (pass, renderable, stage, camera, viewProjection) { - _super.prototype._iRenderPass.call(this, pass, renderable, stage, camera, viewProjection); - var shaderObject = pass.shaderObject; - if (shaderObject.sceneMatrixIndex >= 0) { - renderable.sourceEntity.getRenderSceneTransform(camera).copyRawDataTo(shaderObject.vertexConstantData, shaderObject.sceneMatrixIndex, true); - viewProjection.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true); - } - else { - var matrix3D = Matrix3DUtils.CALCULATION_MATRIX; - matrix3D.copyFrom(renderable.sourceEntity.getRenderSceneTransform(camera)); - matrix3D.append(viewProjection); - matrix3D.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true); - } - var context = stage.context; - context.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 0, shaderObject.vertexConstantData, shaderObject.numUsedVertexConstants); - context.setProgramConstantsFromArray(ContextGLProgramType.FRAGMENT, 0, shaderObject.fragmentConstantData, shaderObject.numUsedFragmentConstants); - context.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT); - context.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles); + ShaderRegisterCache.prototype.getFreeVertexSingleTemp = function () { + return this._vertexTempCache.requestFreeRegComponent(); }; - return TriangleMaterialBase; -})(StageGLMaterialBase); -module.exports = TriangleMaterialBase; - - -},{"awayjs-core/lib/geom/Matrix3DUtils":undefined,"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType":undefined,"awayjs-stagegl/lib/materials/StageGLMaterialBase":undefined}],"awayjs-stagegl/lib/materials/TriangleMaterialMode":[function(require,module,exports){ -var TriangleMaterialMode = (function () { - function TriangleMaterialMode() { - } /** - * + * Retrieve an available vertex attribute register */ - TriangleMaterialMode.SINGLE_PASS = "singlePass"; + ShaderRegisterCache.prototype.getFreeVertexAttribute = function () { + ++this._numUsedStreams; + return this._vertexAttributesCache.requestFreeVectorReg(); + }; /** - * + * Retrieve an available texture register */ - TriangleMaterialMode.MULTI_PASS = "multiPass"; - return TriangleMaterialMode; -})(); -module.exports = TriangleMaterialMode; - - -},{}],"awayjs-stagegl/lib/materials/TriangleMethodMaterial":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); -var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); -var BlendMode = require("awayjs-display/lib/base/BlendMode"); -var StaticLightPicker = require("awayjs-display/lib/materials/lightpickers/StaticLightPicker"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var AmbientBasicMethod = require("awayjs-stagegl/lib/materials/methods/AmbientBasicMethod"); -var DiffuseBasicMethod = require("awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod"); -var NormalBasicMethod = require("awayjs-stagegl/lib/materials/methods/NormalBasicMethod"); -var SpecularBasicMethod = require("awayjs-stagegl/lib/materials/methods/SpecularBasicMethod"); -var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); -var TriangleMethodPass = require("awayjs-stagegl/lib/materials/passes/TriangleMethodPass"); -var TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); -var TriangleMaterialMode = require("awayjs-stagegl/lib/materials/TriangleMaterialMode"); -/** - * TriangleMethodMaterial forms an abstract base class for the default shaded materials provided by Stage, - * using material methods to define their appearance. - */ -var TriangleMethodMaterial = (function (_super) { - __extends(TriangleMethodMaterial, _super); - function TriangleMethodMaterial(textureColor, smoothAlpha, repeat, mipmap) { - if (textureColor === void 0) { textureColor = null; } - if (smoothAlpha === void 0) { smoothAlpha = null; } - if (repeat === void 0) { repeat = false; } - if (mipmap === void 0) { mipmap = false; } - _super.call(this); - this._alphaBlending = false; - this._alpha = 1; - this._ambientMethod = new AmbientBasicMethod(); - this._diffuseMethod = new DiffuseBasicMethod(); - this._normalMethod = new NormalBasicMethod(); - this._specularMethod = new SpecularBasicMethod(); - this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; - this._materialMode = TriangleMaterialMode.SINGLE_PASS; - if (textureColor instanceof Texture2DBase) { - this.texture = textureColor; - this.smooth = (smoothAlpha == null) ? true : false; - this.repeat = repeat; - this.mipmap = mipmap; - } - else { - this.color = (textureColor == null) ? 0xFFFFFF : Number(textureColor); - this.alpha = (smoothAlpha == null) ? 1 : Number(smoothAlpha); - } - } - Object.defineProperty(TriangleMethodMaterial.prototype, "materialMode", { + ShaderRegisterCache.prototype.getFreeTextureReg = function () { + ++this._numUsedTextures; + return this._textureCache.requestFreeVectorReg(); + }; + Object.defineProperty(ShaderRegisterCache.prototype, "vertexConstantOffset", { + /** + * Indicates the start index from which to retrieve vertex constants. + */ get: function () { - return this._materialMode; + return this._vertexConstantOffset; }, - set: function (value) { - if (this._materialMode == value) - return; - this._materialMode = value; - this._pInvalidateScreenPasses(); + set: function (vertexConstantOffset) { + this._vertexConstantOffset = vertexConstantOffset; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "depthCompareMode", { + Object.defineProperty(ShaderRegisterCache.prototype, "vertexAttributesOffset", { /** - * The depth compare mode used to render the renderables using this material. - * - * @see away.stagegl.ContextGLCompareMode + * Indicates the start index from which to retrieve vertex attributes. */ get: function () { - return this._depthCompareMode; + return this._vertexAttributesOffset; }, set: function (value) { - if (this._depthCompareMode == value) - return; - this._depthCompareMode = value; - this._pInvalidateScreenPasses(); + this._vertexAttributesOffset = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "alpha", { + Object.defineProperty(ShaderRegisterCache.prototype, "varyingsOffset", { /** - * The alpha of the surface. + * Indicates the start index from which to retrieve varying registers. */ get: function () { - return this._alpha; + return this._varyingsOffset; }, set: function (value) { - if (value > 1) - value = 1; - else if (value < 0) - value = 0; - if (this._alpha == value) - return; - this._alpha = value; - if (this._colorTransform == null) - this._colorTransform = new ColorTransform(); - this._colorTransform.alphaMultiplier = value; - this._pInvalidatePasses(); + this._varyingsOffset = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "colorTransform", { + Object.defineProperty(ShaderRegisterCache.prototype, "fragmentConstantOffset", { /** - * The ColorTransform object to transform the colour of the material with. Defaults to null. + * Indicates the start index from which to retrieve fragment constants. */ get: function () { - return this._screenPass.colorTransform; + return this._fragmentConstantOffset; }, set: function (value) { - this._screenPass.colorTransform = value; + this._fragmentConstantOffset = value; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseTexture", { + Object.defineProperty(ShaderRegisterCache.prototype, "fragmentOutputRegister", { /** - * The texture object to use for the ambient colour. + * The fragment output register. */ get: function () { - return this._diffuseMethod.texture; + return this._fragmentOutputRegister; }, - set: function (value) { - this._diffuseMethod.texture = value; + enumerable: true, + configurable: true + }); + Object.defineProperty(ShaderRegisterCache.prototype, "numUsedVertexConstants", { + /** + * The amount of used vertex constant registers. + */ + get: function () { + return this._numUsedVertexConstants; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "ambientMethod", { + Object.defineProperty(ShaderRegisterCache.prototype, "numUsedFragmentConstants", { /** - * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod. + * The amount of used fragment constant registers. */ get: function () { - return this._ambientMethod; + return this._numUsedFragmentConstants; }, - set: function (value) { - if (this._ambientMethod == value) - return; - if (value && this._ambientMethod) - value.copyFrom(this._ambientMethod); - this._ambientMethod = value; - this._pInvalidateScreenPasses(); + enumerable: true, + configurable: true + }); + Object.defineProperty(ShaderRegisterCache.prototype, "numUsedStreams", { + /** + * The amount of used vertex streams. + */ + get: function () { + return this._numUsedStreams; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "shadowMethod", { + Object.defineProperty(ShaderRegisterCache.prototype, "numUsedTextures", { /** - * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null. + * The amount of used texture slots. */ get: function () { - return this._shadowMethod; + return this._numUsedTextures; }, - set: function (value) { - if (this._shadowMethod == value) - return; - if (value && this._shadowMethod) - value.copyFrom(this._shadowMethod); - this._shadowMethod = value; - this._pInvalidateScreenPasses(); + enumerable: true, + configurable: true + }); + Object.defineProperty(ShaderRegisterCache.prototype, "numUsedVaryings", { + /** + * The amount of used varying registers. + */ + get: function () { + return this._numUsedVaryings; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseMethod", { + return ShaderRegisterCache; +})(); +module.exports = ShaderRegisterCache; + + +},{"awayjs-stagegl/lib/materials/compilation/RegisterPool":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData":[function(require,module,exports){ +/** + * ShaderRegisterData contains the "named" registers, generated by the compiler and to be passed on to the methods. + */ +var ShaderRegisterData = (function () { + function ShaderRegisterData() { + } + return ShaderRegisterData; +})(); +module.exports = ShaderRegisterData; + + +},{}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":[function(require,module,exports){ +/** + * A single register element (an entire register or a single register's component) used by the RegisterPool. + */ +var ShaderRegisterElement = (function () { + /** + * Creates a new ShaderRegisterElement object. + * + * @param regName The name of the register. + * @param index The index of the register. + * @param component The register's component, if not the entire register is represented. + */ + function ShaderRegisterElement(regName, index, component) { + if (component === void 0) { component = -1; } + this._component = component; + this._regName = regName; + this._index = index; + this._toStr = this._regName; + if (this._index >= 0) + this._toStr += this._index; + if (component > -1) + this._toStr += "." + ShaderRegisterElement.COMPONENTS[component]; + } + /** + * Converts the register or the components AGAL string representation. + */ + ShaderRegisterElement.prototype.toString = function () { + return this._toStr; + }; + Object.defineProperty(ShaderRegisterElement.prototype, "regName", { /** - * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod. + * The register's name. */ get: function () { - return this._diffuseMethod; - }, - set: function (value) { - if (this._diffuseMethod == value) - return; - if (value && this._diffuseMethod) - value.copyFrom(this._diffuseMethod); - this._diffuseMethod = value; - this._pInvalidateScreenPasses(); + return this._regName; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "specularMethod", { + Object.defineProperty(ShaderRegisterElement.prototype, "index", { /** - * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod. + * The register's index. */ get: function () { - return this._specularMethod; - }, - set: function (value) { - if (this._specularMethod == value) - return; - if (value && this._specularMethod) - value.copyFrom(this._specularMethod); - this._specularMethod = value; - this._pInvalidateScreenPasses(); + return this._index; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "normalMethod", { + ShaderRegisterElement.COMPONENTS = ["x", "y", "z", "w"]; + return ShaderRegisterElement; +})(); +module.exports = ShaderRegisterElement; + + +},{}],"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +/** + * AmbientBasicMethod provides the default shading method for uniform ambient lighting. + */ +var AmbientBasicMethod = (function (_super) { + __extends(AmbientBasicMethod, _super); + /** + * Creates a new AmbientBasicMethod object. + */ + function AmbientBasicMethod() { + _super.call(this); + this._color = 0xffffff; + this._alpha = 1; + this._colorR = 1; + this._colorG = 1; + this._colorB = 1; + this._ambient = 1; + } + /** + * @inheritDoc + */ + AmbientBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { + methodVO.needsUV = Boolean(shaderObject.texture != null); + }; + /** + * @inheritDoc + */ + AmbientBasicMethod.prototype.iInitConstants = function (shaderObject, methodVO) { + if (!methodVO.needsUV) { + this._color = shaderObject.color; + this.updateColor(); + } + }; + Object.defineProperty(AmbientBasicMethod.prototype, "ambient", { /** - * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod. + * The strength of the ambient reflection of the surface. */ get: function () { - return this._normalMethod; + return this._ambient; }, set: function (value) { - if (this._normalMethod == value) + if (this._ambient == value) return; - if (value && this._normalMethod) - value.copyFrom(this._normalMethod); - this._normalMethod = value; - this._pInvalidateScreenPasses(); + this._ambient = value; + this.updateColor(); }, enumerable: true, configurable: true }); - /** - * Appends an "effect" shading method to the shader. Effect methods are those that do not influence the lighting - * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the - * methods added prior. - */ - TriangleMethodMaterial.prototype.addEffectMethod = function (method) { - if (this._screenPass == null) - this._screenPass = new TriangleMethodPass(); - this._screenPass.addEffectMethod(method); - this._pInvalidateScreenPasses(); - }; - Object.defineProperty(TriangleMethodMaterial.prototype, "numEffectMethods", { + Object.defineProperty(AmbientBasicMethod.prototype, "alpha", { /** - * The number of "effect" methods added to the material. + * The alpha component of the surface. */ get: function () { - return this._screenPass ? this._screenPass.numEffectMethods : 0; + return this._alpha; + }, + set: function (value) { + if (this._alpha == value) + return; + this._alpha = value; + this.updateColor(); }, enumerable: true, configurable: true }); /** - * Queries whether a given effect method was added to the material. - * - * @param method The method to be queried. - * @return true if the method was added to the material, false otherwise. + * @inheritDoc */ - TriangleMethodMaterial.prototype.hasEffectMethod = function (method) { - return this._screenPass ? this._screenPass.hasEffectMethod(method) : false; + AmbientBasicMethod.prototype.copyFrom = function (method) { + var m = method; + var b = m; }; /** - * Returns the method added at the given index. - * @param index The index of the method to retrieve. - * @return The method at the given index. + * @inheritDoc */ - TriangleMethodMaterial.prototype.getEffectMethodAt = function (index) { - if (this._screenPass == null) - return null; - return this._screenPass.getEffectMethodAt(index); + AmbientBasicMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + var code = ""; + var ambientInputRegister; + if (methodVO.needsUV) { + ambientInputRegister = registerCache.getFreeTextureReg(); + methodVO.texturesIndex = ambientInputRegister.index; + code += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, ambientInputRegister, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); + if (shaderObject.alphaThreshold > 0) { + var cutOffReg = registerCache.getFreeFragmentConstant(); + methodVO.fragmentConstantsIndex = cutOffReg.index * 4; + code += "sub " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n" + "kil " + targetReg + ".w\n" + "add " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n"; + } + } + else { + ambientInputRegister = registerCache.getFreeFragmentConstant(); + methodVO.fragmentConstantsIndex = ambientInputRegister.index * 4; + code += "mov " + targetReg + ", " + ambientInputRegister + "\n"; + } + return code; }; /** - * Adds an effect method at the specified index amongst the methods already added to the material. Effect - * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines, - * etc. The method will be applied to the result of the methods with a lower index. + * @inheritDoc */ - TriangleMethodMaterial.prototype.addEffectMethodAt = function (method, index) { - if (this._screenPass == null) - this._screenPass = new TriangleMethodPass(); - this._screenPass.addEffectMethodAt(method, index); - this._pInvalidatePasses(); + AmbientBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { + if (methodVO.needsUV) { + stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + stage.context.activateTexture(methodVO.texturesIndex, shaderObject.texture); + if (shaderObject.alphaThreshold > 0) + shaderObject.fragmentConstantData[methodVO.fragmentConstantsIndex] = shaderObject.alphaThreshold; + } + else { + var index = methodVO.fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = this._colorR; + data[index + 1] = this._colorG; + data[index + 2] = this._colorB; + data[index + 3] = this._alpha; + } }; /** - * Removes an effect method from the material. - * @param method The method to be removed. + * Updates the ambient color data used by the render state. */ - TriangleMethodMaterial.prototype.removeEffectMethod = function (method) { - if (this._screenPass == null) - return; - this._screenPass.removeEffectMethod(method); - // reconsider - if (this._screenPass.numEffectMethods == 0) - this._pInvalidatePasses(); + AmbientBasicMethod.prototype.updateColor = function () { + this._colorR = ((this._color >> 16) & 0xff) / 0xff * this._ambient; + this._colorG = ((this._color >> 8) & 0xff) / 0xff * this._ambient; + this._colorB = (this._color & 0xff) / 0xff * this._ambient; + }; + return AmbientBasicMethod; +})(ShadingMethodBase); +module.exports = AmbientBasicMethod; + + +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +/** + * DiffuseBasicMethod provides the default shading method for Lambert (dot3) diffuse lighting. + */ +var DiffuseBasicMethod = (function (_super) { + __extends(DiffuseBasicMethod, _super); + /** + * Creates a new DiffuseBasicMethod object. + */ + function DiffuseBasicMethod() { + _super.call(this); + this._multiply = true; + this._diffuseColor = 0xffffff; + this._ambientColor = 0xffffff; + this._diffuseR = 1; + this._diffuseG = 1; + this._diffuseB = 1; + this._ambientR = 1; + this._ambientG = 1; + this._ambientB = 1; + } + DiffuseBasicMethod.prototype.iIsUsed = function (shaderObject) { + if (!shaderObject.numLights) + return false; + return true; }; - Object.defineProperty(TriangleMethodMaterial.prototype, "normalMap", { - /** - * The normal map to modulate the direction of the surface for each texel. The default normal method expects - * tangent-space normal maps, but others could expect object-space maps. - */ - get: function () { - return this._normalMethod.normalMap; - }, - set: function (value) { - this._normalMethod.normalMap = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleMethodMaterial.prototype, "specularMap", { - /** - * A specular map that defines the strength of specular reflections for each texel in the red channel, - * and the gloss factor in the green channel. You can use SpecularBitmapTexture if you want to easily set - * specular and gloss maps from grayscale images, but correctly authored images are preferred. - */ - get: function () { - return this._specularMethod.texture; - }, - set: function (value) { - this._specularMethod.texture = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleMethodMaterial.prototype, "gloss", { - /** - * The glossiness of the material (sharpness of the specular highlight). - */ - get: function () { - return this._specularMethod.gloss; - }, - set: function (value) { - this._specularMethod.gloss = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleMethodMaterial.prototype, "ambient", { - /** - * The strength of the ambient reflection. - */ - get: function () { - return this._ambientMethod.ambient; - }, - set: function (value) { - this._ambientMethod.ambient = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleMethodMaterial.prototype, "specular", { - /** - * The overall strength of the specular reflection. - */ - get: function () { - return this._specularMethod.specular; - }, - set: function (value) { - this._specularMethod.specular = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TriangleMethodMaterial.prototype, "ambientColor", { + Object.defineProperty(DiffuseBasicMethod.prototype, "multiply", { /** - * The colour of the ambient reflection. + * Set internally if diffuse color component multiplies or replaces the ambient color */ get: function () { - return this._diffuseMethod.ambientColor; + return this._multiply; }, set: function (value) { - this._diffuseMethod.ambientColor = value; + if (this._multiply == value) + return; + this._multiply = value; + this.iInvalidateShaderProgram(); }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "diffuseColor", { + DiffuseBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { + methodVO.needsUV = this._pUseTexture; + methodVO.needsNormals = shaderObject.numLights > 0; + }; + /** + * Forces the creation of the texture. + * @param stage The Stage used by the renderer + */ + DiffuseBasicMethod.prototype.generateMip = function (stage) { + if (this._pUseTexture) + stage.context.activateTexture(0, this._texture); + }; + Object.defineProperty(DiffuseBasicMethod.prototype, "diffuseColor", { /** - * The colour of the diffuse reflection. + * The color of the diffuse reflection when not using a texture. */ get: function () { - return this._diffuseMethod.diffuseColor; + return this._diffuseColor; }, set: function (value) { - this._diffuseMethod.diffuseColor = value; + if (this._diffuseColor == value) + return; + this._diffuseColor = value; + this.updateDiffuse(); }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "specularColor", { + Object.defineProperty(DiffuseBasicMethod.prototype, "ambientColor", { /** - * The colour of the specular reflection. + * The color of the ambient reflection */ get: function () { - return this._specularMethod.specularColor; + return this._ambientColor; }, set: function (value) { - this._specularMethod.specularColor = value; + if (this._ambientColor == value) + return; + this._ambientColor = value; + this.updateAmbient(); }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "alphaBlending", { + Object.defineProperty(DiffuseBasicMethod.prototype, "texture", { /** - * Indicates whether or not the material has transparency. If binary transparency is sufficient, for - * example when using textures of foliage, consider using alphaThreshold instead. + * The bitmapData to use to define the diffuse reflection color per texel. */ get: function () { - return this._alphaBlending; + return this._texture; }, set: function (value) { - if (this._alphaBlending == value) - return; - this._alphaBlending = value; - this._pInvalidatePasses(); + var b = (value != null); + if (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) + this.iInvalidateShaderProgram(); + this._pUseTexture = b; + this._texture = value; }, enumerable: true, configurable: true @@ -7946,1793 +7630,2027 @@ var TriangleMethodMaterial = (function (_super) { /** * @inheritDoc */ - TriangleMethodMaterial.prototype._iUpdateMaterial = function () { - if (this._pScreenPassesInvalid) { - //Updates screen passes when they were found to be invalid. - this._pScreenPassesInvalid = false; - this.initPasses(); - this.setBlendAndCompareModes(); - this._pClearScreenPasses(); - if (this._materialMode == TriangleMaterialMode.MULTI_PASS) { - if (this._casterLightPass) - this._pAddScreenPass(this._casterLightPass); - if (this._nonCasterLightPasses) - for (var i = 0; i < this._nonCasterLightPasses.length; ++i) - this._pAddScreenPass(this._nonCasterLightPasses[i]); - } - if (this._screenPass) - this._pAddScreenPass(this._screenPass); + DiffuseBasicMethod.prototype.dispose = function () { + this._texture = null; + }; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.copyFrom = function (method) { + var diff = method; + this.texture = diff.texture; + this.multiply = diff.multiply; + this.diffuseColor = diff.diffuseColor; + this.ambientColor = diff.ambientColor; + }; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.iCleanCompilationData = function () { + _super.prototype.iCleanCompilationData.call(this); + this._pTotalLightColorReg = null; + this._pDiffuseInputRegister = null; + }; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { + var code = ""; + this._pIsFirstLight = true; + this._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(this._pTotalLightColorReg, 1); + return code; + }; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { + var code = ""; + var t; + // write in temporary if not first light, so we can add to total diffuse colour + if (this._pIsFirstLight) { + t = this._pTotalLightColorReg; + } + else { + t = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(t, 1); + } + code += "dp3 " + t + ".x, " + lightDirReg + ", " + sharedRegisters.normalFragment + "\n" + "max " + t + ".w, " + t + ".x, " + sharedRegisters.commons + ".y\n"; + if (shaderObject.usesLightFallOff) + code += "mul " + t + ".w, " + t + ".w, " + lightDirReg + ".w\n"; + if (this._iModulateMethod != null) + code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); + code += "mul " + t + ", " + t + ".w, " + lightColReg + "\n"; + if (!this._pIsFirstLight) { + code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; + registerCache.removeFragmentTempUsage(t); } + this._pIsFirstLight = false; + return code; }; /** - * Initializes all the passes and their dependent passes. + * @inheritDoc */ - TriangleMethodMaterial.prototype.initPasses = function () { - // let the effects pass handle everything if there are no lights, when there are effect methods applied - // after shading, or when the material mode is single pass. - if (this.numLights == 0 || this.numEffectMethods > 0 || this._materialMode == TriangleMaterialMode.SINGLE_PASS) - this.initEffectPass(); - else if (this._screenPass) - this.removeEffectPass(); - // only use a caster light pass if shadows need to be rendered - if (this._shadowMethod && this._materialMode == TriangleMaterialMode.MULTI_PASS) - this.initCasterLightPass(); - else if (this._casterLightPass) - this.removeCasterLightPass(); - // only use non caster light passes if there are lights that don't cast - if (this.numNonCasters > 0 && this._materialMode == TriangleMaterialMode.MULTI_PASS) - this.initNonCasterLightPasses(); - else if (this._nonCasterLightPasses) - this.removeNonCasterLightPasses(); + DiffuseBasicMethod.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { + var code = ""; + var t; + // write in temporary if not first light, so we can add to total diffuse colour + if (this._pIsFirstLight) { + t = this._pTotalLightColorReg; + } + else { + t = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(t, 1); + } + code += "tex " + t + ", " + sharedRegisters.normalFragment + ", " + cubeMapReg + " \n" + "mul " + t + ".xyz, " + t + ".xyz, " + weightRegister + "\n"; + if (this._iModulateMethod != null) + code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); + if (!this._pIsFirstLight) { + code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; + registerCache.removeFragmentTempUsage(t); + } + this._pIsFirstLight = false; + return code; }; /** - * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes. + * @inheritDoc */ - TriangleMethodMaterial.prototype.setBlendAndCompareModes = function () { - var forceSeparateMVP = Boolean(this._casterLightPass || this._screenPass); - // caster light pass is always first if it exists, hence it uses normal blending - if (this._casterLightPass) { - this._casterLightPass.forceSeparateMVP = forceSeparateMVP; - this._casterLightPass.setBlendMode(BlendMode.NORMAL); - this._casterLightPass.depthCompareMode = this._depthCompareMode; + DiffuseBasicMethod.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + var code = ""; + var albedo; + var cutOffReg; + // incorporate input from ambient + if (sharedRegisters.shadowTarget) + code += this.pApplyShadow(shaderObject, methodVO, registerCache, sharedRegisters); + albedo = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(albedo, 1); + var ambientColorRegister = registerCache.getFreeFragmentConstant(); + methodVO.fragmentConstantsIndex = ambientColorRegister.index * 4; + if (this._pUseTexture) { + this._pDiffuseInputRegister = registerCache.getFreeTextureReg(); + methodVO.texturesIndex = this._pDiffuseInputRegister.index; + code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, this._pDiffuseInputRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); } - if (this._nonCasterLightPasses) { - var firstAdditiveIndex = 0; - // if there's no caster light pass, the first non caster light pass will be the first - // and should use normal blending - if (!this._casterLightPass) { - this._nonCasterLightPasses[0].forceSeparateMVP = forceSeparateMVP; - this._nonCasterLightPasses[0].setBlendMode(BlendMode.NORMAL); - this._nonCasterLightPasses[0].depthCompareMode = this._depthCompareMode; - firstAdditiveIndex = 1; - } - for (var i = firstAdditiveIndex; i < this._nonCasterLightPasses.length; ++i) { - this._nonCasterLightPasses[i].forceSeparateMVP = forceSeparateMVP; - this._nonCasterLightPasses[i].setBlendMode(BlendMode.ADD); - this._nonCasterLightPasses[i].depthCompareMode = ContextGLCompareMode.LESS_EQUAL; - } + else { + this._pDiffuseInputRegister = registerCache.getFreeFragmentConstant(); + code += "mov " + albedo + ", " + this._pDiffuseInputRegister + "\n"; } - if (this._casterLightPass || this._nonCasterLightPasses) { - //cannot be blended by blendmode property if multipass enabled - this._pRequiresBlending = false; - // there are light passes, so this should be blended in - if (this._screenPass) { - this._screenPass.passMode = MaterialPassMode.EFFECTS; - this._screenPass.depthCompareMode = ContextGLCompareMode.LESS_EQUAL; - this._screenPass.setBlendMode(BlendMode.LAYER); - this._screenPass.forceSeparateMVP = forceSeparateMVP; - } + code += "sat " + this._pTotalLightColorReg + ", " + this._pTotalLightColorReg + "\n" + "mul " + albedo + ".xyz, " + albedo + ", " + this._pTotalLightColorReg + "\n"; + if (this._multiply) { + code += "add " + albedo + ".xyz, " + albedo + ", " + ambientColorRegister + "\n" + "mul " + targetReg + ".xyz, " + targetReg + ", " + albedo + "\n"; } - else if (this._screenPass) { - this._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || (this._colorTransform && this._colorTransform.alphaMultiplier < 1)); - // effects pass is the only pass, so it should just blend normally - this._screenPass.passMode = MaterialPassMode.SUPER_SHADER; - this._screenPass.depthCompareMode = this._depthCompareMode; - this._screenPass.preserveAlpha = this._pRequiresBlending; - this._screenPass.colorTransform = this._colorTransform; - this._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending) ? BlendMode.LAYER : this._pBlendMode); - this._screenPass.forceSeparateMVP = false; + else { + code += "mul " + targetReg + ".xyz, " + targetReg + ", " + ambientColorRegister + "\n" + "mul " + this._pTotalLightColorReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n" + "sub " + targetReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n" + "add " + targetReg + ".xyz, " + targetReg + ", " + albedo + "\n"; } + registerCache.removeFragmentTempUsage(this._pTotalLightColorReg); + registerCache.removeFragmentTempUsage(albedo); + return code; }; - TriangleMethodMaterial.prototype.initCasterLightPass = function () { - if (this._casterLightPass == null) - this._casterLightPass = new TriangleMethodPass(MaterialPassMode.LIGHTING); - this._casterLightPass.lightPicker = new StaticLightPicker([this._shadowMethod.castingLight]); - this._casterLightPass.shadowMethod = this._shadowMethod; - this._casterLightPass.diffuseMethod = this._diffuseMethod; - this._casterLightPass.ambientMethod = this._ambientMethod; - this._casterLightPass.normalMethod = this._normalMethod; - this._casterLightPass.specularMethod = this._specularMethod; - }; - TriangleMethodMaterial.prototype.removeCasterLightPass = function () { - this._casterLightPass.dispose(); - this._pRemoveScreenPass(this._casterLightPass); - this._casterLightPass = null; + /** + * Generate the code that applies the calculated shadow to the diffuse light + * @param methodVO The MethodVO object for which the compilation is currently happening. + * @param regCache The register cache the compiler is currently using for the register management. + */ + DiffuseBasicMethod.prototype.pApplyShadow = function (shaderObject, methodVO, regCache, sharedRegisters) { + return "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + sharedRegisters.shadowTarget + ".w\n"; }; - TriangleMethodMaterial.prototype.initNonCasterLightPasses = function () { - this.removeNonCasterLightPasses(); - var pass; - var numDirLights = this._pLightPicker.numDirectionalLights; - var numPointLights = this._pLightPicker.numPointLights; - var numLightProbes = this._pLightPicker.numLightProbes; - var dirLightOffset = 0; - var pointLightOffset = 0; - var probeOffset = 0; - if (!this._casterLightPass) { - numDirLights += this._pLightPicker.numCastingDirectionalLights; - numPointLights += this._pLightPicker.numCastingPointLights; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { + if (this._pUseTexture) { + stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + stage.context.activateTexture(methodVO.texturesIndex, this._texture); } - this._nonCasterLightPasses = new Array(); - while (dirLightOffset < numDirLights || pointLightOffset < numPointLights || probeOffset < numLightProbes) { - pass = new TriangleMethodPass(MaterialPassMode.LIGHTING); - pass.includeCasters = this._shadowMethod == null; - pass.directionalLightsOffset = dirLightOffset; - pass.pointLightsOffset = pointLightOffset; - pass.lightProbesOffset = probeOffset; - pass.lightPicker = this._pLightPicker; - pass.diffuseMethod = this._diffuseMethod; - pass.ambientMethod = this._ambientMethod; - pass.normalMethod = this._normalMethod; - pass.specularMethod = this._specularMethod; - this._nonCasterLightPasses.push(pass); - dirLightOffset += pass.iNumDirectionalLights; - pointLightOffset += pass.iNumPointLights; - probeOffset += pass.iNumLightProbes; + else { + var index = methodVO.fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index + 4] = this._diffuseR; + data[index + 5] = this._diffuseG; + data[index + 6] = this._diffuseB; + data[index + 7] = 1; } }; - TriangleMethodMaterial.prototype.removeNonCasterLightPasses = function () { - if (!this._nonCasterLightPasses) - return; - for (var i = 0; i < this._nonCasterLightPasses.length; ++i) - this._pRemoveScreenPass(this._nonCasterLightPasses[i]); - this._nonCasterLightPasses = null; + /** + * Updates the diffuse color data used by the render state. + */ + DiffuseBasicMethod.prototype.updateDiffuse = function () { + this._diffuseR = ((this._diffuseColor >> 16) & 0xff) / 0xff; + this._diffuseG = ((this._diffuseColor >> 8) & 0xff) / 0xff; + this._diffuseB = (this._diffuseColor & 0xff) / 0xff; }; - TriangleMethodMaterial.prototype.removeEffectPass = function () { - if (this._screenPass.ambientMethod != this._ambientMethod) - this._screenPass.ambientMethod.dispose(); - if (this._screenPass.diffuseMethod != this._diffuseMethod) - this._screenPass.diffuseMethod.dispose(); - if (this._screenPass.specularMethod != this._specularMethod) - this._screenPass.specularMethod.dispose(); - if (this._screenPass.normalMethod != this._normalMethod) - this._screenPass.normalMethod.dispose(); - this._pRemoveScreenPass(this._screenPass); - this._screenPass = null; + /** + * Updates the ambient color data used by the render state. + */ + DiffuseBasicMethod.prototype.updateAmbient = function () { + this._ambientR = ((this._ambientColor >> 16) & 0xff) / 0xff; + this._ambientG = ((this._ambientColor >> 8) & 0xff) / 0xff; + this._ambientB = (this._ambientColor & 0xff) / 0xff; }; - TriangleMethodMaterial.prototype.initEffectPass = function () { - if (this._screenPass == null) - this._screenPass = new TriangleMethodPass(); - if (this._materialMode == TriangleMaterialMode.SINGLE_PASS) { - this._screenPass.ambientMethod = this._ambientMethod; - this._screenPass.diffuseMethod = this._diffuseMethod; - this._screenPass.specularMethod = this._specularMethod; - this._screenPass.normalMethod = this._normalMethod; - this._screenPass.shadowMethod = this._shadowMethod; - } - else if (this._materialMode == TriangleMaterialMode.MULTI_PASS) { - if (this.numLights == 0) { - this._screenPass.ambientMethod = this._ambientMethod; - } - else { - this._screenPass.ambientMethod = null; - } - this._screenPass.preserveAlpha = false; - this._screenPass.normalMethod = this._normalMethod; + /** + * @inheritDoc + */ + DiffuseBasicMethod.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { + //TODO move this to Activate (ambientR/G/B currently calc'd in render state) + if (shaderObject.numLights > 0) { + var index = methodVO.fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = shaderObject.ambientR * this._ambientR; + data[index + 1] = shaderObject.ambientG * this._ambientG; + data[index + 2] = shaderObject.ambientB * this._ambientB; + data[index + 3] = 1; } }; - Object.defineProperty(TriangleMethodMaterial.prototype, "numLights", { + return DiffuseBasicMethod; +})(LightingMethodBase); +module.exports = DiffuseBasicMethod; + + +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/LightingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var EffectMethodBase = require("awayjs-stagegl/lib/materials/methods/EffectMethodBase"); +/** + * EffectColorTransformMethod provides a shading method that changes the colour of a material analogous to a + * ColorTransform object. + */ +var EffectColorTransformMethod = (function (_super) { + __extends(EffectColorTransformMethod, _super); + /** + * Creates a new EffectColorTransformMethod. + */ + function EffectColorTransformMethod() { + _super.call(this); + } + Object.defineProperty(EffectColorTransformMethod.prototype, "colorTransform", { + /** + * The ColorTransform object to transform the colour of the material with. + */ + get: function () { + return this._colorTransform; + }, + set: function (value) { + this._colorTransform = value; + }, + enumerable: true, + configurable: true + }); + /** + * @inheritDoc + */ + EffectColorTransformMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + var code = ""; + var colorMultReg = registerCache.getFreeFragmentConstant(); + var colorOffsReg = registerCache.getFreeFragmentConstant(); + methodVO.fragmentConstantsIndex = colorMultReg.index * 4; + //TODO: AGAL <> GLSL + code += "mul " + targetReg + ", " + targetReg + ", " + colorMultReg + "\n" + "add " + targetReg + ", " + targetReg + ", " + colorOffsReg + "\n"; + return code; + }; + /** + * @inheritDoc + */ + EffectColorTransformMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { + var inv = 1 / 0xff; + var index = methodVO.fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = this._colorTransform.redMultiplier; + data[index + 1] = this._colorTransform.greenMultiplier; + data[index + 2] = this._colorTransform.blueMultiplier; + data[index + 3] = this._colorTransform.alphaMultiplier; + data[index + 4] = this._colorTransform.redOffset * inv; + data[index + 5] = this._colorTransform.greenOffset * inv; + data[index + 6] = this._colorTransform.blueOffset * inv; + data[index + 7] = this._colorTransform.alphaOffset * inv; + }; + return EffectColorTransformMethod; +})(EffectMethodBase); +module.exports = EffectColorTransformMethod; + + +},{"awayjs-stagegl/lib/materials/methods/EffectMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/EffectMethodBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var AssetType = require("awayjs-core/lib/library/AssetType"); +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +/** + * EffectMethodBase forms an abstract base class for shader methods that are not dependent on light sources, + * and are in essence post-process effects on the materials. + */ +var EffectMethodBase = (function (_super) { + __extends(EffectMethodBase, _super); + function EffectMethodBase() { + _super.call(this); + } + Object.defineProperty(EffectMethodBase.prototype, "assetType", { /** - * The maximum total number of lights provided by the light picker. + * @inheritDoc */ get: function () { - return this._pLightPicker ? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights + this._pLightPicker.numCastingDirectionalLights + this._pLightPicker.numCastingPointLights : 0; + return AssetType.EFFECTS_METHOD; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodMaterial.prototype, "numNonCasters", { + /** + * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register. + * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. + * @param regCache The register cache used during the compilation. + * @param targetReg The register that will be containing the method's output. + * @private + */ + EffectMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + throw new AbstractMethodError(); + return ""; + }; + return EffectMethodBase; +})(ShadingMethodBase); +module.exports = EffectMethodBase; + + +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/library/AssetType":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/LightingMethodBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +/** + * LightingMethodBase provides an abstract base method for shading methods that uses lights. + * Used for diffuse and specular shaders only. + */ +var LightingMethodBase = (function (_super) { + __extends(LightingMethodBase, _super); + /** + * Creates a new LightingMethodBase. + */ + function LightingMethodBase() { + _super.call(this); + } + /** + * Get the fragment shader code that will be needed before any per-light code is added. + * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. + * @param regCache The register cache used during the compilation. + * @private + */ + LightingMethodBase.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { + return ""; + }; + /** + * Get the fragment shader code that will generate the code relevant to a single light. + * + * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. + * @param lightDirReg The register containing the light direction vector. + * @param lightColReg The register containing the light colour. + * @param regCache The register cache used during the compilation. + */ + LightingMethodBase.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { + return ""; + }; + /** + * Get the fragment shader code that will generate the code relevant to a single light probe object. + * + * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. + * @param cubeMapReg The register containing the cube map for the current probe + * @param weightRegister A string representation of the register + component containing the current weight + * @param regCache The register cache providing any necessary registers to the shader + */ + LightingMethodBase.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { + return ""; + }; + /** + * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register. + * + * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. + * @param regCache The register cache used during the compilation. + * @param targetReg The register containing the final shading output. + * @private + */ + LightingMethodBase.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + return ""; + }; + return LightingMethodBase; +})(ShadingMethodBase); +module.exports = LightingMethodBase; + + +},{"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/NormalBasicMethod":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +/** + * NormalBasicMethod is the default method for standard tangent-space normal mapping. + */ +var NormalBasicMethod = (function (_super) { + __extends(NormalBasicMethod, _super); + /** + * Creates a new NormalBasicMethod object. + */ + function NormalBasicMethod() { + _super.call(this); + } + NormalBasicMethod.prototype.iIsUsed = function (shaderObject) { + if (!this._useTexture || !shaderObject.normalDependencies) + return false; + return true; + }; + /** + * @inheritDoc + */ + NormalBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { + methodVO.needsUV = this._useTexture; + }; + /** + * Indicates whether or not this method outputs normals in tangent space. Override for object-space normals. + */ + NormalBasicMethod.prototype.iOutputsTangentNormals = function () { + return true; + }; + /** + * @inheritDoc + */ + NormalBasicMethod.prototype.copyFrom = function (method) { + var s = method; + var bnm = method; + if (bnm.normalMap != null) + this.normalMap = bnm.normalMap; + }; + Object.defineProperty(NormalBasicMethod.prototype, "normalMap", { /** - * The amount of lights that don't cast shadows. + * The texture containing the normals per pixel. */ get: function () { - return this._pLightPicker ? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights : 0; + return this._texture; + }, + set: function (value) { + var b = (value != null); + if (b != this._useTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) + this.iInvalidateShaderProgram(); + this._useTexture = b; + this._texture = value; }, enumerable: true, configurable: true }); - return TriangleMethodMaterial; -})(TriangleMaterialBase); -module.exports = TriangleMethodMaterial; - - -},{"awayjs-core/lib/geom/ColorTransform":undefined,"awayjs-core/lib/textures/Texture2DBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-display/lib/materials/lightpickers/StaticLightPicker":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialBase":undefined,"awayjs-stagegl/lib/materials/TriangleMaterialMode":undefined,"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/NormalBasicMethod":undefined,"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined,"awayjs-stagegl/lib/materials/passes/TriangleMethodPass":undefined}],"awayjs-stagegl/lib/materials/compilation/MethodVO":[function(require,module,exports){ -/** - * MethodVO contains data for a given shader object for the use within a single material. - * This allows shader methods to be shared across materials while their non-public state differs. - */ -var MethodVO = (function () { /** - * Creates a new MethodVO object. + * @inheritDoc */ - function MethodVO(method) { - this.useMethod = true; - this.method = method; - } + NormalBasicMethod.prototype.iCleanCompilationData = function () { + _super.prototype.iCleanCompilationData.call(this); + this._pNormalTextureRegister = null; + }; /** - * Resets the values of the value object to their "unused" state. + * @inheritDoc */ - MethodVO.prototype.reset = function () { - this.method.iReset(); - this.texturesIndex = -1; - this.vertexConstantsIndex = -1; - this.fragmentConstantsIndex = -1; - this.needsProjection = false; - this.needsView = false; - this.needsNormals = false; - this.needsTangents = false; - this.needsUV = false; - this.needsSecondaryUV = false; - this.needsGlobalVertexPos = false; - this.needsGlobalFragmentPos = false; + NormalBasicMethod.prototype.dispose = function () { + if (this._texture) + this._texture = null; }; - return MethodVO; -})(); -module.exports = MethodVO; + /** + * @inheritDoc + */ + NormalBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { + if (methodVO.texturesIndex >= 0) { + stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + stage.context.activateTexture(methodVO.texturesIndex, this._texture); + } + }; + /** + * @inheritDoc + */ + NormalBasicMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + this._pNormalTextureRegister = registerCache.getFreeTextureReg(); + methodVO.texturesIndex = this._pNormalTextureRegister.index; + return ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, this._pNormalTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping) + "sub " + targetReg + ".xyz, " + targetReg + ".xyz, " + sharedRegisters.commons + ".xxx\n" + "nrm " + targetReg + ".xyz, " + targetReg + "\n"; + }; + return NormalBasicMethod; +})(ShadingMethodBase); +module.exports = NormalBasicMethod; -},{}],"awayjs-stagegl/lib/materials/compilation/RegisterPool":[function(require,module,exports){ -var ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); +var ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); /** - * RegisterPool is used by the shader compilation process to keep track of which registers of a certain type are - * currently used and should not be allowed to be written to. Either entire registers can be requested and locked, - * or single components (x, y, z, w) of a single register. - * It is used by ShaderRegisterCache to track usages of individual register types. - * - * @see away.materials.ShaderRegisterCache + * ShadingMethodBase provides an abstract base method for shading methods, used by compiled passes to compile + * the final shading program. */ -var RegisterPool = (function () { +var ShadingMethodBase = (function (_super) { + __extends(ShadingMethodBase, _super); /** - * Creates a new RegisterPool object. - * @param regName The base name of the register type ("ft" for fragment temporaries, "vc" for vertex constants, etc) - * @param regCount The amount of available registers of this type. - * @param persistent Whether or not registers, once reserved, can be freed again. For example, temporaries are not persistent, but constants are. + * Create a new ShadingMethodBase object. */ - function RegisterPool(regName, regCount, persistent) { - if (persistent === void 0) { persistent = true; } - this._regName = regName; - this._regCount = regCount; - this._persistent = persistent; - this.initRegisters(regName, regCount); + function ShadingMethodBase() { + _super.call(this); } - /** - * Retrieve an entire vector register that's still available. - */ - RegisterPool.prototype.requestFreeVectorReg = function () { - for (var i = 0; i < this._regCount; ++i) { - if (!this.isRegisterUsed(i)) { - if (this._persistent) - this._usedVectorCount[i]++; - return this._vectorRegisters[i]; - } - } - throw new Error("Register overflow!"); + ShadingMethodBase.prototype.iIsUsed = function (shaderObject) { + return true; }; /** - * Retrieve a single vector component that's still available. + * Initializes the properties for a MethodVO, including register and texture indices. + * + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * + * @internal */ - RegisterPool.prototype.requestFreeRegComponent = function () { - for (var i = 0; i < this._regCount; ++i) { - if (this._usedVectorCount[i] > 0) - continue; - for (var j = 0; j < 4; ++j) { - if (this._usedSingleCount[j][i] == 0) { - if (this._persistent) - this._usedSingleCount[j][i]++; - return this._registerComponents[j][i]; - } - } - } - throw new Error("Register overflow!"); + ShadingMethodBase.prototype.iInitVO = function (shaderObject, methodVO) { }; /** - * Marks a register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage - * has been called usageCount times again. - * @param register The register to mark as used. - * @param usageCount The amount of usages to add. + * Initializes unchanging shader constants using the data from a MethodVO. + * + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * + * @internal */ - RegisterPool.prototype.addUsage = function (register, usageCount) { - if (register._component > -1) - this._usedSingleCount[register._component][register.index] += usageCount; - else - this._usedVectorCount[register.index] += usageCount; + ShadingMethodBase.prototype.iInitConstants = function (shaderObject, methodVO) { }; /** - * Removes a usage from a register. When usages reach 0, the register is freed again. - * @param register The register for which to remove a usage. + * Indicates whether or not this method expects normals in tangent space. Override for object-space normals. */ - RegisterPool.prototype.removeUsage = function (register) { - if (register._component > -1) { - if (--this._usedSingleCount[register._component][register.index] < 0) - throw new Error("More usages removed than exist!"); - } - else { - if (--this._usedVectorCount[register.index] < 0) - throw new Error("More usages removed than exist!"); - } + ShadingMethodBase.prototype.iUsesTangentSpace = function () { + return true; }; + Object.defineProperty(ShadingMethodBase.prototype, "passes", { + /** + * Any passes required that render to a texture used by this method. + */ + get: function () { + return this._passes; + }, + enumerable: true, + configurable: true + }); /** - * Disposes any resources used by the current RegisterPool object. + * Cleans up any resources used by the current object. */ - RegisterPool.prototype.dispose = function () { - this._vectorRegisters = null; - this._registerComponents = null; - this._usedSingleCount = null; - this._usedVectorCount = null; + ShadingMethodBase.prototype.dispose = function () { }; /** - * Indicates whether or not any registers are in use. + * Resets the compilation state of the method. + * + * @internal */ - RegisterPool.prototype.hasRegisteredRegs = function () { - for (var i = 0; i < this._regCount; ++i) - if (this.isRegisterUsed(i)) - return true; - return false; + ShadingMethodBase.prototype.iReset = function () { + this.iCleanCompilationData(); }; /** - * Initializes all registers. + * Resets the method's state for compilation. + * + * @internal */ - RegisterPool.prototype.initRegisters = function (regName, regCount) { - var hash = RegisterPool._initPool(regName, regCount); - this._vectorRegisters = RegisterPool._regPool[hash]; - this._registerComponents = RegisterPool._regCompsPool[hash]; - this._usedVectorCount = this._initArray(Array(regCount), 0); - this._usedSingleCount = new Array(4); - this._usedSingleCount[0] = this._initArray(new Array(regCount), 0); - this._usedSingleCount[1] = this._initArray(new Array(regCount), 0); - this._usedSingleCount[2] = this._initArray(new Array(regCount), 0); - this._usedSingleCount[3] = this._initArray(new Array(regCount), 0); - }; - RegisterPool._initPool = function (regName, regCount) { - var hash = regName + regCount; - if (RegisterPool._regPool[hash] != undefined) - return hash; - var vectorRegisters = new Array(regCount); - RegisterPool._regPool[hash] = vectorRegisters; - var registerComponents = [ - [], - [], - [], - [] - ]; - RegisterPool._regCompsPool[hash] = registerComponents; - for (var i = 0; i < regCount; ++i) { - vectorRegisters[i] = new ShaderRegisterElement(regName, i); - for (var j = 0; j < 4; ++j) - registerComponents[j][i] = new ShaderRegisterElement(regName, i, j); - } - return hash; + ShadingMethodBase.prototype.iCleanCompilationData = function () { }; /** - * Check if the temp register is either used for single or vector use + * Get the vertex shader code for this method. + * @param vo The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. + * + * @internal */ - RegisterPool.prototype.isRegisterUsed = function (index) { - if (this._usedVectorCount[index] > 0) - return true; - for (var i = 0; i < 4; ++i) - if (this._usedSingleCount[i][index] > 0) - return true; - return false; - }; - RegisterPool.prototype._initArray = function (a, val) { - var l = a.length; - for (var c = 0; c < l; c++) - a[c] = val; - return a; + ShadingMethodBase.prototype.iGetVertexCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { + return ""; }; - RegisterPool._regPool = new Object(); - RegisterPool._regCompsPool = new Object(); - return RegisterPool; -})(); -module.exports = RegisterPool; - - -},{"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":[function(require,module,exports){ -var ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); -var ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); -var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); -/** - * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a - * material. Concrete subclasses are used by the default materials. - * - * @see away.materials.ShadingMethodBase - */ -var ShaderCompilerBase = (function () { /** - * Creates a new ShaderCompilerBase object. - * @param profile The compatibility profile of the renderer. + * @inheritDoc */ - function ShaderCompilerBase(material, materialPass, shaderObject) { - this._pVertexCode = ''; // Changed to emtpy string- AwayTS - this._pFragmentCode = ''; // Changed to emtpy string - AwayTS - this._pPostAnimationFragmentCode = ''; // Changed to emtpy string - AwayTS - this._pMaterial = material; - this._pMaterialPass = materialPass; - this._pShaderObject = shaderObject; - this._pProfile = shaderObject.profile; - this._pSharedRegisters = new ShaderRegisterData(); - this._pRegisterCache = new ShaderRegisterCache(this._pProfile); - this._pRegisterCache.vertexAttributesOffset = 1; - this._pRegisterCache.reset(); - } + ShadingMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + return null; + }; /** - * Compiles the code after all setup on the compiler has finished. + * Sets the render state for this method. + * + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param stage The Stage object currently used for rendering. + * + * @internal */ - ShaderCompilerBase.prototype.compile = function () { - this._pShaderObject.reset(); - this.pCalculateDependencies(); - this.pInitRegisterIndices(); - this.pCompileDependencies(); - //compile custom vertex & fragment codes - this._pVertexCode += this._pMaterialPass._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - this._pPostAnimationFragmentCode += this._pMaterialPass._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - //assign the final output color to the output register - this._pPostAnimationFragmentCode += "mov " + this._pRegisterCache.fragmentOutputRegister + ", " + this._pSharedRegisters.shadedTarget + "\n"; - this._pRegisterCache.removeFragmentTempUsage(this._pSharedRegisters.shadedTarget); - //initialise the required shader constants - this._pShaderObject.initConstantData(this._pRegisterCache, this._pAnimatableAttributes, this._pAnimationTargetRegisters, this._uvSource, this._uvTarget); - this._pMaterialPass._iInitConstantData(this._pShaderObject); + ShadingMethodBase.prototype.iActivate = function (shaderObject, methodVO, stage) { }; /** - * Compile the code for the methods. - */ - ShaderCompilerBase.prototype.pCompileDependencies = function () { - this._pSharedRegisters.shadedTarget = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadedTarget, 1); - //compile the world-space position if required - if (this._pShaderObject.globalPosDependencies > 0) - this.compileGlobalPositionCode(); - //Calculate the (possibly animated) UV coordinates. - if (this._pShaderObject.uvDependencies > 0) - this.compileUVCode(); - if (this._pShaderObject.secondaryUVDependencies > 0) - this.compileSecondaryUVCode(); - if (this._pShaderObject.normalDependencies > 0) - this.compileNormalCode(); - if (this._pShaderObject.viewDirDependencies > 0) - this.compileViewDirCode(); - //collect code from material - this._pVertexCode += this._pMaterial._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - this._pFragmentCode += this._pMaterial._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - //collect code from pass - this._pVertexCode += this._pMaterialPass._iGetPreLightingVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - this._pFragmentCode += this._pMaterialPass._iGetPreLightingFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); + * Sets the render state for a single renderable. + * + * @param vo The MethodVO object linking this method with the pass currently being compiled. + * @param renderable The renderable currently being rendered. + * @param stage The Stage object currently used for rendering. + * @param camera The camera from which the scene is currently rendered. + * + * @internal + */ + ShadingMethodBase.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { }; - ShaderCompilerBase.prototype.compileGlobalPositionCode = function () { - this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.globalPositionVertex = this._pRegisterCache.getFreeVertexVectorTemp(), this._pShaderObject.globalPosDependencies); - var sceneMatrixReg = this._pRegisterCache.getFreeVertexConstant(); - this._pRegisterCache.getFreeVertexConstant(); - this._pRegisterCache.getFreeVertexConstant(); - this._pRegisterCache.getFreeVertexConstant(); - this._pShaderObject.sceneMatrixIndex = sceneMatrixReg.index * 4; - this._pVertexCode += "m44 " + this._pSharedRegisters.globalPositionVertex + ", " + this._pSharedRegisters.localPosition + ", " + sceneMatrixReg + "\n"; - if (this._pShaderObject.usesGlobalPosFragment) { - this._pSharedRegisters.globalPositionVarying = this._pRegisterCache.getFreeVarying(); - this._pVertexCode += "mov " + this._pSharedRegisters.globalPositionVarying + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; - } + /** + * Clears the render state for this method. + * @param vo The MethodVO object linking this method with the pass currently being compiled. + * @param stage The Stage object currently used for rendering. + * + * @internal + */ + ShadingMethodBase.prototype.iDeactivate = function (shaderObject, methodVO, stage) { }; /** - * Calculate the (possibly animated) UV coordinates. + * Marks the shader program as invalid, so it will be recompiled before the next render. + * + * @internal */ - ShaderCompilerBase.prototype.compileUVCode = function () { - var uvAttributeReg = this._pRegisterCache.getFreeVertexAttribute(); - this._pShaderObject.uvBufferIndex = uvAttributeReg.index; - var varying = this._pRegisterCache.getFreeVarying(); - this._pSharedRegisters.uvVarying = varying; - if (this._pShaderObject.usesUVTransform) { - // a, b, 0, tx - // c, d, 0, ty - var uvTransform1 = this._pRegisterCache.getFreeVertexConstant(); - var uvTransform2 = this._pRegisterCache.getFreeVertexConstant(); - this._pShaderObject.uvTransformIndex = uvTransform1.index * 4; - this._pVertexCode += "dp4 " + varying + ".x, " + uvAttributeReg + ", " + uvTransform1 + "\n" + "dp4 " + varying + ".y, " + uvAttributeReg + ", " + uvTransform2 + "\n" + "mov " + varying + ".zw, " + uvAttributeReg + ".zw \n"; - } - else { - this._pShaderObject.uvTransformIndex = -1; - this._uvTarget = varying.toString(); - this._uvSource = uvAttributeReg.toString(); - } + ShadingMethodBase.prototype.iInvalidateShaderProgram = function () { + this.dispatchEvent(new ShadingMethodEvent(ShadingMethodEvent.SHADER_INVALIDATED)); }; /** - * Provide the secondary UV coordinates. + * Copies the state from a ShadingMethodBase object into the current object. */ - ShaderCompilerBase.prototype.compileSecondaryUVCode = function () { - var uvAttributeReg = this._pRegisterCache.getFreeVertexAttribute(); - this._pShaderObject.secondaryUVBufferIndex = uvAttributeReg.index; - this._pSharedRegisters.secondaryUVVarying = this._pRegisterCache.getFreeVarying(); - this._pVertexCode += "mov " + this._pSharedRegisters.secondaryUVVarying + ", " + uvAttributeReg + "\n"; + ShadingMethodBase.prototype.copyFrom = function (method) { }; + return ShadingMethodBase; +})(NamedAssetBase); +module.exports = ShadingMethodBase; + + +},{"awayjs-core/lib/library/NamedAssetBase":undefined,"awayjs-stagegl/lib/events/ShadingMethodEvent":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowHardMethod":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ShadowMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadowMethodBase"); +/** + * ShadowHardMethod provides the cheapest shadow map method by using a single tap without any filtering. + */ +var ShadowHardMethod = (function (_super) { + __extends(ShadowHardMethod, _super); /** - * Calculate the view direction. + * Creates a new ShadowHardMethod object. */ - ShaderCompilerBase.prototype.compileViewDirCode = function () { - var cameraPositionReg = this._pRegisterCache.getFreeVertexConstant(); - this._pSharedRegisters.viewDirVarying = this._pRegisterCache.getFreeVarying(); - this._pSharedRegisters.viewDirFragment = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.viewDirFragment, this._pShaderObject.viewDirDependencies); - this._pShaderObject.cameraPositionIndex = cameraPositionReg.index * 4; - if (this._pShaderObject.usesTangentSpace) { - var temp = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pVertexCode += "sub " + temp + ", " + cameraPositionReg + ", " + this._pSharedRegisters.localPosition + "\n" + "m33 " + this._pSharedRegisters.viewDirVarying + ".xyz, " + temp + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + this._pSharedRegisters.viewDirVarying + ".w, " + this._pSharedRegisters.localPosition + ".w\n"; - } - else { - this._pVertexCode += "sub " + this._pSharedRegisters.viewDirVarying + ", " + cameraPositionReg + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; - this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.globalPositionVertex); - } - //TODO is this required in all cases? (re: distancemappass) - this._pFragmentCode += "nrm " + this._pSharedRegisters.viewDirFragment + ".xyz, " + this._pSharedRegisters.viewDirVarying + "\n" + "mov " + this._pSharedRegisters.viewDirFragment + ".w, " + this._pSharedRegisters.viewDirVarying + ".w\n"; + function ShadowHardMethod(castingLight) { + _super.call(this, castingLight); + } + /** + * @inheritDoc + */ + ShadowHardMethod.prototype._pGetPlanarFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { + var depthMapRegister = regCache.getFreeTextureReg(); + var decReg = regCache.getFreeFragmentConstant(); + // needs to be reserved anyway. DO NOT REMOVE + var dataReg = regCache.getFreeFragmentConstant(); + var depthCol = regCache.getFreeFragmentVectorTemp(); + var code = ""; + methodVO.fragmentConstantsIndex = decReg.index * 4; + methodVO.texturesIndex = depthMapRegister.index; + code += "tex " + depthCol + ", " + this._pDepthMapCoordReg + ", " + depthMapRegister + " <2d, nearest, clamp>\n" + "dp4 " + depthCol + ".z, " + depthCol + ", " + decReg + "\n" + "slt " + targetReg + ".w, " + this._pDepthMapCoordReg + ".z, " + depthCol + ".z\n"; // 0 if in shadow + return code; }; /** - * Calculate the normal. + * @inheritDoc */ - ShaderCompilerBase.prototype.compileNormalCode = function () { - this._pSharedRegisters.normalFragment = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.normalFragment, this._pShaderObject.normalDependencies); - //simple normal aquisition if no tangent space is being used - if (this._pShaderObject.outputsNormals && !this._pShaderObject.outputsTangentNormals) { - this._pVertexCode += this._pMaterialPass._iGetNormalVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - return; - } - var normalMatrix; - if (!this._pShaderObject.outputsNormals || !this._pShaderObject.usesTangentSpace) { - normalMatrix = new Array(3); - normalMatrix[0] = this._pRegisterCache.getFreeVertexConstant(); - normalMatrix[1] = this._pRegisterCache.getFreeVertexConstant(); - normalMatrix[2] = this._pRegisterCache.getFreeVertexConstant(); - this._pRegisterCache.getFreeVertexConstant(); - this._pShaderObject.sceneNormalMatrixIndex = normalMatrix[0].index * 4; - this._pSharedRegisters.normalVarying = this._pRegisterCache.getFreeVarying(); - } - if (this._pShaderObject.outputsNormals) { - if (this._pShaderObject.usesTangentSpace) { - // normalize normal + tangent vector and generate (approximated) bitangent used in m33 operation for view - this._pVertexCode += "nrm " + this._pSharedRegisters.animatedNormal + ".xyz, " + this._pSharedRegisters.animatedNormal + "\n" + "nrm " + this._pSharedRegisters.animatedTangent + ".xyz, " + this._pSharedRegisters.animatedTangent + "\n" + "crs " + this._pSharedRegisters.bitangent + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + this._pSharedRegisters.animatedTangent + "\n"; - this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters); - } - else { - //Compiles the vertex shader code for tangent-space normal maps. - this._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying(); - this._pSharedRegisters.bitangentVarying = this._pRegisterCache.getFreeVarying(); - var temp = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pVertexCode += "m33 " + temp + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + normalMatrix[0] + "\n" + "nrm " + this._pSharedRegisters.animatedNormal + ".xyz, " + temp + "\n" + "m33 " + temp + ".xyz, " + this._pSharedRegisters.animatedTangent + ", " + normalMatrix[0] + "\n" + "nrm " + this._pSharedRegisters.animatedTangent + ".xyz, " + temp + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".x \n" + "mov " + this._pSharedRegisters.tangentVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".x \n" + "mov " + this._pSharedRegisters.tangentVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".y \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".y \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "mov " + this._pSharedRegisters.normalVarying + ".x, " + this._pSharedRegisters.animatedTangent + ".z \n" + "mov " + this._pSharedRegisters.normalVarying + ".z, " + this._pSharedRegisters.animatedNormal + ".z \n" + "mov " + this._pSharedRegisters.normalVarying + ".w, " + this._pSharedRegisters.normalInput + ".w \n" + "crs " + temp + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".y, " + temp + ".x \n" + "mov " + this._pSharedRegisters.bitangentVarying + ".y, " + temp + ".y \n" + "mov " + this._pSharedRegisters.normalVarying + ".y, " + temp + ".z \n"; - this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedTangent); - //Compiles the fragment shader code for tangent-space normal maps. - var t; - var b; - var n; - t = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(t, 1); - b = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(b, 1); - n = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(n, 1); - this._pFragmentCode += "nrm " + t + ".xyz, " + this._pSharedRegisters.tangentVarying + "\n" + "mov " + t + ".w, " + this._pSharedRegisters.tangentVarying + ".w \n" + "nrm " + b + ".xyz, " + this._pSharedRegisters.bitangentVarying + "\n" + "nrm " + n + ".xyz, " + this._pSharedRegisters.normalVarying + "\n"; - //compile custom fragment code for normal calcs - this._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters) + "m33 " + this._pSharedRegisters.normalFragment + ".xyz, " + this._pSharedRegisters.normalFragment + ", " + t + "\n" + "mov " + this._pSharedRegisters.normalFragment + ".w, " + this._pSharedRegisters.normalVarying + ".w\n"; - this._pRegisterCache.removeFragmentTempUsage(b); - this._pRegisterCache.removeFragmentTempUsage(t); - this._pRegisterCache.removeFragmentTempUsage(n); - } - } - else { - // no output, world space is enough - this._pVertexCode += "m33 " + this._pSharedRegisters.normalVarying + ".xyz, " + this._pSharedRegisters.animatedNormal + ", " + normalMatrix[0] + "\n" + "mov " + this._pSharedRegisters.normalVarying + ".w, " + this._pSharedRegisters.animatedNormal + ".w\n"; - this._pFragmentCode += "nrm " + this._pSharedRegisters.normalFragment + ".xyz, " + this._pSharedRegisters.normalVarying + "\n" + "mov " + this._pSharedRegisters.normalFragment + ".w, " + this._pSharedRegisters.normalVarying + ".w\n"; - if (this._pShaderObject.tangentDependencies > 0) { - this._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying(); - this._pVertexCode += "m33 " + this._pSharedRegisters.tangentVarying + ".xyz, " + this._pSharedRegisters.animatedTangent + ", " + normalMatrix[0] + "\n" + "mov " + this._pSharedRegisters.tangentVarying + ".w, " + this._pSharedRegisters.animatedTangent + ".w\n"; - } - } - if (!this._pShaderObject.usesTangentSpace) - this._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedNormal); + ShadowHardMethod.prototype._pGetPointFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { + var depthMapRegister = regCache.getFreeTextureReg(); + var decReg = regCache.getFreeFragmentConstant(); + var epsReg = regCache.getFreeFragmentConstant(); + var posReg = regCache.getFreeFragmentConstant(); + var depthSampleCol = regCache.getFreeFragmentVectorTemp(); + regCache.addFragmentTempUsages(depthSampleCol, 1); + var lightDir = regCache.getFreeFragmentVectorTemp(); + var code = ""; + methodVO.fragmentConstantsIndex = decReg.index * 4; + methodVO.texturesIndex = depthMapRegister.index; + code += "sub " + lightDir + ", " + sharedRegisters.globalPositionVarying + ", " + posReg + "\n" + "dp3 " + lightDir + ".w, " + lightDir + ".xyz, " + lightDir + ".xyz\n" + "mul " + lightDir + ".w, " + lightDir + ".w, " + posReg + ".w\n" + "nrm " + lightDir + ".xyz, " + lightDir + ".xyz\n" + "tex " + depthSampleCol + ", " + lightDir + ", " + depthMapRegister + " \n" + "dp4 " + depthSampleCol + ".z, " + depthSampleCol + ", " + decReg + "\n" + "add " + targetReg + ".w, " + lightDir + ".w, " + epsReg + ".x\n" + "slt " + targetReg + ".w, " + targetReg + ".w, " + depthSampleCol + ".z\n"; // 0 if in shadow + regCache.removeFragmentTempUsage(depthSampleCol); + return code; }; /** - * Reset all the indices to "unused". + * @inheritDoc */ - ShaderCompilerBase.prototype.pInitRegisterIndices = function () { - this._pShaderObject.pInitRegisterIndices(); - this._pAnimatableAttributes = new Array("va0"); - this._pAnimationTargetRegisters = new Array("vt0"); - this._pVertexCode = ""; - this._pFragmentCode = ""; - this._pPostAnimationFragmentCode = ""; - this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.localPosition = this._pRegisterCache.getFreeVertexVectorTemp(), 1); - //create commonly shared constant registers - this._pSharedRegisters.commons = this._pRegisterCache.getFreeFragmentConstant(); - this._pShaderObject.commonsDataIndex = this._pSharedRegisters.commons.index * 4; - //Creates the registers to contain the tangent data. - // need to be created FIRST and in this order (for when using tangent space) - if (this._pShaderObject.tangentDependencies > 0 || this._pShaderObject.outputsNormals) { - this._pSharedRegisters.tangentInput = this._pRegisterCache.getFreeVertexAttribute(); - this._pShaderObject.tangentBufferIndex = this._pSharedRegisters.tangentInput.index; - this._pSharedRegisters.animatedTangent = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedTangent, 1); - if (this._pShaderObject.usesTangentSpace) { - this._pSharedRegisters.bitangent = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.bitangent, 1); - } - this._pAnimatableAttributes.push(this._pSharedRegisters.tangentInput.toString()); - this._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedTangent.toString()); - } - if (this._pShaderObject.normalDependencies > 0) { - this._pSharedRegisters.normalInput = this._pRegisterCache.getFreeVertexAttribute(); - this._pShaderObject.normalBufferIndex = this._pSharedRegisters.normalInput.index; - this._pSharedRegisters.animatedNormal = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedNormal, 1); - this._pAnimatableAttributes.push(this._pSharedRegisters.normalInput.toString()); - this._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedNormal.toString()); - } + ShadowHardMethod.prototype._iGetCascadeFragmentCode = function (shaderObject, methodVO, decodeRegister, depthTexture, depthProjection, targetRegister, registerCache, sharedRegisters) { + var temp = registerCache.getFreeFragmentVectorTemp(); + return "tex " + temp + ", " + depthProjection + ", " + depthTexture + " <2d, nearest, clamp>\n" + "dp4 " + temp + ".z, " + temp + ", " + decodeRegister + "\n" + "slt " + targetRegister + ".w, " + depthProjection + ".z, " + temp + ".z\n"; // 0 if in shadow }; /** - * Figure out which named registers are required, and how often. + * @inheritDoc */ - ShaderCompilerBase.prototype.pCalculateDependencies = function () { - this._pShaderObject.useAlphaPremultiplied = this._pMaterial.alphaPremultiplied; - this._pShaderObject.useBothSides = this._pMaterial.bothSides; - this._pShaderObject.useMipmapping = this._pMaterial.mipmap; - this._pShaderObject.useSmoothTextures = this._pMaterial.smooth; - this._pShaderObject.repeatTextures = this._pMaterial.repeat; - this._pShaderObject.usesUVTransform = this._pMaterial.animateUVs; - this._pShaderObject.alphaThreshold = this._pMaterial.alphaThreshold; - this._pShaderObject.texture = this._pMaterial.texture; - this._pShaderObject.color = this._pMaterial.color; - //TODO: fragment animtion should be compatible with lighting pass - this._pShaderObject.usesFragmentAnimation = Boolean(this._pMaterialPass.passMode == MaterialPassMode.SUPER_SHADER); - this._pMaterialPass._iIncludeDependencies(this._pShaderObject); + ShadowHardMethod.prototype.iActivateForCascade = function (shaderObject, methodVO, stage) { }; + return ShadowHardMethod; +})(ShadowMethodBase); +module.exports = ShadowHardMethod; + + +},{"awayjs-stagegl/lib/materials/methods/ShadowMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var AssetType = require("awayjs-core/lib/library/AssetType"); +var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +/** + * ShadowMapMethodBase provides an abstract base method for shadow map methods. + */ +var ShadowMapMethodBase = (function (_super) { + __extends(ShadowMapMethodBase, _super); /** - * Disposes all resources used by the compiler. + * Creates a new ShadowMapMethodBase object. + * @param castingLight The light used to cast shadows. */ - ShaderCompilerBase.prototype.dispose = function () { - this._pRegisterCache.dispose(); - this._pRegisterCache = null; - this._pSharedRegisters = null; - }; - Object.defineProperty(ShaderCompilerBase.prototype, "vertexCode", { + function ShadowMapMethodBase(castingLight) { + _super.call(this); + this._pEpsilon = .02; + this._pAlpha = 1; + this._pCastingLight = castingLight; + castingLight.castsShadows = true; + this._pShadowMapper = castingLight.shadowMapper; + } + Object.defineProperty(ShadowMapMethodBase.prototype, "assetType", { /** - * The generated vertex code. + * @inheritDoc */ get: function () { - return this._pVertexCode; + return AssetType.SHADOW_MAP_METHOD; }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderCompilerBase.prototype, "fragmentCode", { + Object.defineProperty(ShadowMapMethodBase.prototype, "alpha", { /** - * The generated fragment code. + * The "transparency" of the shadows. This allows making shadows less strong. */ get: function () { - return this._pFragmentCode; + return this._pAlpha; + }, + set: function (value) { + this._pAlpha = value; }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderCompilerBase.prototype, "postAnimationFragmentCode", { + Object.defineProperty(ShadowMapMethodBase.prototype, "castingLight", { /** - * The generated fragment code. + * The light casting the shadows. */ get: function () { - return this._pPostAnimationFragmentCode; + return this._pCastingLight; }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderCompilerBase.prototype, "shadedTarget", { + Object.defineProperty(ShadowMapMethodBase.prototype, "epsilon", { /** - * The register name containing the final shaded colour. + * A small value to counter floating point precision errors when comparing values in the shadow map with the + * calculated depth value. Increase this if shadow banding occurs, decrease it if the shadow seems to be too detached. */ get: function () { - return this._pSharedRegisters.shadedTarget.toString(); + return this._pEpsilon; + }, + set: function (value) { + this._pEpsilon = value; }, enumerable: true, configurable: true }); - return ShaderCompilerBase; -})(); -module.exports = ShaderCompilerBase; + return ShadowMapMethodBase; +})(ShadingMethodBase); +module.exports = ShadowMapMethodBase; -},{"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler":[function(require,module,exports){ +},{"awayjs-core/lib/library/AssetType":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowMethodBase":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var LightSources = require("awayjs-display/lib/materials/LightSources"); -var ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); -var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var PointLight = require("awayjs-display/lib/entities/PointLight"); +var ShadowMapMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase"); /** - * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a - * material. Concrete subclasses are used by the default materials. - * - * @see away.materials.ShadingMethodBase + * ShadowMethodBase provides an abstract method for simple (non-wrapping) shadow map methods. */ -var ShaderLightingCompiler = (function (_super) { - __extends(ShaderLightingCompiler, _super); +var ShadowMethodBase = (function (_super) { + __extends(ShadowMethodBase, _super); /** - * Creates a new ShaderCompilerBase object. - * @param profile The compatibility profile of the renderer. + * Creates a new ShadowMethodBase object. + * @param castingLight The light used to cast shadows. */ - function ShaderLightingCompiler(material, materialPass, shaderObject) { - _super.call(this, material, materialPass, shaderObject); - this._materialLightingPass = materialPass; - this._shaderLightingObject = shaderObject; + function ShadowMethodBase(castingLight) { + this._pUsePoint = (castingLight instanceof PointLight); + _super.call(this, castingLight); } /** - * Compile the code for the methods. + * @inheritDoc */ - ShaderLightingCompiler.prototype.pCompileDependencies = function () { - _super.prototype.pCompileDependencies.call(this); - //compile the lighting code - if (this._shaderLightingObject.usesShadows) - this.pCompileShadowCode(); - if (this._shaderLightingObject.usesLights) { - this.initLightRegisters(); - this.compileLightCode(); - } - if (this._shaderLightingObject.usesProbes) - this.compileLightProbeCode(); - this._pVertexCode += this._materialLightingPass._iGetPostLightingVertexCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters); - this._pFragmentCode += this._materialLightingPass._iGetPostLightingFragmentCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters); + ShadowMethodBase.prototype.iInitVO = function (shaderObject, methodVO) { + methodVO.needsView = true; + methodVO.needsGlobalVertexPos = true; + methodVO.needsGlobalFragmentPos = this._pUsePoint; + methodVO.needsNormals = shaderObject.numLights > 0; }; /** - * Provides the code to provide shadow mapping. + * @inheritDoc */ - ShaderLightingCompiler.prototype.pCompileShadowCode = function () { - if (this._shaderLightingObject.normalDependencies > 0) { - this._pSharedRegisters.shadowTarget = this._pSharedRegisters.normalFragment; + ShadowMethodBase.prototype.iInitConstants = function (shaderObject, methodVO) { + var fragmentData = shaderObject.fragmentConstantData; + var vertexData = shaderObject.vertexConstantData; + var index = methodVO.fragmentConstantsIndex; + fragmentData[index] = 1.0; + fragmentData[index + 1] = 1 / 255.0; + fragmentData[index + 2] = 1 / 65025.0; + fragmentData[index + 3] = 1 / 16581375.0; + fragmentData[index + 6] = 0; + fragmentData[index + 7] = 1; + if (this._pUsePoint) { + fragmentData[index + 8] = 0; + fragmentData[index + 9] = 0; + fragmentData[index + 10] = 0; + fragmentData[index + 11] = 1; } - else { - this._pSharedRegisters.shadowTarget = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadowTarget, 1); + index = methodVO.vertexConstantsIndex; + if (index != -1) { + vertexData[index] = .5; + vertexData[index + 1] = .5; + vertexData[index + 2] = 0.0; + vertexData[index + 3] = 1.0; } }; + Object.defineProperty(ShadowMethodBase.prototype, "_iDepthMapCoordReg", { + /** + * Wrappers that override the vertex shader need to set this explicitly + */ + get: function () { + return this._pDepthMapCoordReg; + }, + set: function (value) { + this._pDepthMapCoordReg = value; + }, + enumerable: true, + configurable: true + }); /** - * Initializes constant registers to contain light data. + * @inheritDoc */ - ShaderLightingCompiler.prototype.initLightRegisters = function () { - // init these first so we're sure they're in sequence - var i, len; - if (this._dirLightVertexConstants) { - len = this._dirLightVertexConstants.length; - for (i = 0; i < len; ++i) { - this._dirLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant(); - if (this._shaderLightingObject.lightVertexConstantIndex == -1) - this._shaderLightingObject.lightVertexConstantIndex = this._dirLightVertexConstants[i].index * 4; - } - } - if (this._pointLightVertexConstants) { - len = this._pointLightVertexConstants.length; - for (i = 0; i < len; ++i) { - this._pointLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant(); - if (this._shaderLightingObject.lightVertexConstantIndex == -1) - this._shaderLightingObject.lightVertexConstantIndex = this._pointLightVertexConstants[i].index * 4; - } - } - len = this._dirLightFragmentConstants.length; - for (i = 0; i < len; ++i) { - this._dirLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant(); - if (this._shaderLightingObject.lightFragmentConstantIndex == -1) - this._shaderLightingObject.lightFragmentConstantIndex = this._dirLightFragmentConstants[i].index * 4; - } - len = this._pointLightFragmentConstants.length; - for (i = 0; i < len; ++i) { - this._pointLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant(); - if (this._shaderLightingObject.lightFragmentConstantIndex == -1) - this._shaderLightingObject.lightFragmentConstantIndex = this._pointLightFragmentConstants[i].index * 4; - } + ShadowMethodBase.prototype.iCleanCompilationData = function () { + _super.prototype.iCleanCompilationData.call(this); + this._pDepthMapCoordReg = null; }; /** - * Compiles the shading code for directional and point lights. + * @inheritDoc */ - ShaderLightingCompiler.prototype.compileLightCode = function () { - var diffuseColorReg; - var specularColorReg; - var lightPosReg; - var lightDirReg; - var vertexRegIndex = 0; - var fragmentRegIndex = 0; - var addSpec = this._shaderLightingObject.usesLightsForSpecular; - var addDiff = this._shaderLightingObject.usesLightsForDiffuse; - for (var i = 0; i < this._materialLightingPass.iNumDirectionalLights; ++i) { - if (this._shaderLightingObject.usesTangentSpace) { - lightDirReg = this._dirLightVertexConstants[vertexRegIndex++]; - var lightVarying = this._pRegisterCache.getFreeVarying(); - this._pVertexCode += "m33 " + lightVarying + ".xyz, " + lightDirReg + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + lightVarying + ".w, " + lightDirReg + ".w\n"; - lightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addVertexTempUsages(lightDirReg, 1); - this._pFragmentCode += "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n" + "mov " + lightDirReg + ".w, " + lightVarying + ".w\n"; - } - else { - lightDirReg = this._dirLightFragmentConstants[fragmentRegIndex++]; - } - diffuseColorReg = this._dirLightFragmentConstants[fragmentRegIndex++]; - specularColorReg = this._dirLightFragmentConstants[fragmentRegIndex++]; - if (addDiff) - this._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters); - if (addSpec) - this._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters); - if (this._shaderLightingObject.usesTangentSpace) - this._pRegisterCache.removeVertexTempUsage(lightDirReg); - } - vertexRegIndex = 0; - fragmentRegIndex = 0; - for (var i = 0; i < this._materialLightingPass.iNumPointLights; ++i) { - if (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) - lightPosReg = this._pointLightVertexConstants[vertexRegIndex++]; - else - lightPosReg = this._pointLightFragmentConstants[fragmentRegIndex++]; - diffuseColorReg = this._pointLightFragmentConstants[fragmentRegIndex++]; - specularColorReg = this._pointLightFragmentConstants[fragmentRegIndex++]; - lightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp(); - this._pRegisterCache.addFragmentTempUsages(lightDirReg, 1); - var lightVarying; - if (this._shaderLightingObject.usesTangentSpace) { - lightVarying = this._pRegisterCache.getFreeVarying(); - var temp = this._pRegisterCache.getFreeVertexVectorTemp(); - this._pVertexCode += "sub " + temp + ", " + lightPosReg + ", " + this._pSharedRegisters.localPosition + "\n" + "m33 " + lightVarying + ".xyz, " + temp + ", " + this._pSharedRegisters.animatedTangent + "\n" + "mov " + lightVarying + ".w, " + this._pSharedRegisters.localPosition + ".w\n"; - } - else if (!this._shaderLightingObject.usesGlobalPosFragment) { - lightVarying = this._pRegisterCache.getFreeVarying(); - this._pVertexCode += "sub " + lightVarying + ", " + lightPosReg + ", " + this._pSharedRegisters.globalPositionVertex + "\n"; - } - else { - lightVarying = lightDirReg; - this._pFragmentCode += "sub " + lightDirReg + ", " + lightPosReg + ", " + this._pSharedRegisters.globalPositionVarying + "\n"; - } - if (this._shaderLightingObject.usesLightFallOff) { - // calculate attenuation - this._pFragmentCode += "dp3 " + lightDirReg + ".w, " + lightVarying + ", " + lightVarying + "\n" + "sub " + lightDirReg + ".w, " + lightDirReg + ".w, " + diffuseColorReg + ".w\n" + "mul " + lightDirReg + ".w, " + lightDirReg + ".w, " + specularColorReg + ".w\n" + "sat " + lightDirReg + ".w, " + lightDirReg + ".w\n" + "sub " + lightDirReg + ".w, " + this._pSharedRegisters.commons + ".w, " + lightDirReg + ".w\n" + "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n"; - } - else { - this._pFragmentCode += "nrm " + lightDirReg + ".xyz, " + lightVarying + "\n" + "mov " + lightDirReg + ".w, " + lightVarying + ".w\n"; - } - if (this._shaderLightingObject.lightFragmentConstantIndex == -1) - this._shaderLightingObject.lightFragmentConstantIndex = lightPosReg.index * 4; - if (addDiff) - this._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters); - if (addSpec) - this._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters); - this._pRegisterCache.removeFragmentTempUsage(lightDirReg); - } + ShadowMethodBase.prototype.iGetVertexCode = function (shaderObject, methodVO, regCache, sharedRegisters) { + return this._pUsePoint ? this._pGetPointVertexCode(methodVO, regCache, sharedRegisters) : this.pGetPlanarVertexCode(methodVO, regCache, sharedRegisters); + }; + /** + * Gets the vertex code for shadow mapping with a point light. + * + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. + */ + ShadowMethodBase.prototype._pGetPointVertexCode = function (methodVO, regCache, sharedRegisters) { + methodVO.vertexConstantsIndex = -1; + return ""; }; /** - * Compiles shading code for light probes. + * Gets the vertex code for shadow mapping with a planar shadow map (fe: directional lights). + * + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. */ - ShaderLightingCompiler.prototype.compileLightProbeCode = function () { - var weightReg; - var weightComponents = [".x", ".y", ".z", ".w"]; - var weightRegisters = new Array(); - var i; - var texReg; - var addSpec = this._shaderLightingObject.usesProbesForSpecular; - var addDiff = this._shaderLightingObject.usesProbesForDiffuse; - if (addDiff) - this._shaderLightingObject.lightProbeDiffuseIndices = new Array(); - if (addSpec) - this._shaderLightingObject.lightProbeSpecularIndices = new Array(); - for (i = 0; i < this._pNumProbeRegisters; ++i) { - weightRegisters[i] = this._pRegisterCache.getFreeFragmentConstant(); - if (i == 0) - this._shaderLightingObject.probeWeightsIndex = weightRegisters[i].index * 4; - } - for (i = 0; i < this._materialLightingPass.iNumLightProbes; ++i) { - weightReg = weightRegisters[Math.floor(i / 4)].toString() + weightComponents[i % 4]; - if (addDiff) { - texReg = this._pRegisterCache.getFreeTextureReg(); - this._shaderLightingObject.lightProbeDiffuseIndices[i] = texReg.index; - this._pFragmentCode += this._materialLightingPass._iGetPerProbeDiffuseFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters); - } - if (addSpec) { - texReg = this._pRegisterCache.getFreeTextureReg(); - this._shaderLightingObject.lightProbeSpecularIndices[i] = texReg.index; - this._pFragmentCode += this._materialLightingPass._iGetPerProbeSpecularFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters); - } - } + ShadowMethodBase.prototype.pGetPlanarVertexCode = function (methodVO, regCache, sharedRegisters) { + var code = ""; + var temp = regCache.getFreeVertexVectorTemp(); + var dataReg = regCache.getFreeVertexConstant(); + var depthMapProj = regCache.getFreeVertexConstant(); + regCache.getFreeVertexConstant(); + regCache.getFreeVertexConstant(); + regCache.getFreeVertexConstant(); + this._pDepthMapCoordReg = regCache.getFreeVarying(); + methodVO.vertexConstantsIndex = dataReg.index * 4; + // todo: can epsilon be applied here instead of fragment shader? + code += "m44 " + temp + ", " + sharedRegisters.globalPositionVertex + ", " + depthMapProj + "\n" + "div " + temp + ", " + temp + ", " + temp + ".w\n" + "mul " + temp + ".xy, " + temp + ".xy, " + dataReg + ".xy\n" + "add " + this._pDepthMapCoordReg + ", " + temp + ", " + dataReg + ".xxwz\n"; + //"sub " + this._pDepthMapCoordReg + ".z, " + this._pDepthMapCoordReg + ".z, " + this._pDepthMapCoordReg + ".w\n"; + return code; }; /** - * Reset all the indices to "unused". + * @inheritDoc */ - ShaderLightingCompiler.prototype.pInitRegisterIndices = function () { - _super.prototype.pInitRegisterIndices.call(this); - this._shaderLightingObject.lightVertexConstantIndex = -1; - this._shaderLightingObject.lightFragmentConstantIndex = -1; - this._shaderLightingObject.probeWeightsIndex = -1; - this._pNumProbeRegisters = Math.ceil(this._materialLightingPass.iNumLightProbes / 4); - //init light data - if (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) { - this._pointLightVertexConstants = new Array(this._materialLightingPass.iNumPointLights); - this._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights * 2); - } - else { - this._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights * 3); - } - if (this._shaderLightingObject.usesTangentSpace) { - this._dirLightVertexConstants = new Array(this._materialLightingPass.iNumDirectionalLights); - this._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights * 2); - } - else { - this._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights * 3); + ShadowMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + var code = this._pUsePoint ? this._pGetPointFragmentCode(methodVO, targetReg, registerCache, sharedRegisters) : this._pGetPlanarFragmentCode(methodVO, targetReg, registerCache, sharedRegisters); + code += "add " + targetReg + ".w, " + targetReg + ".w, fc" + (methodVO.fragmentConstantsIndex / 4 + 1) + ".y\n" + "sat " + targetReg + ".w, " + targetReg + ".w\n"; + return code; + }; + /** + * Gets the fragment code for shadow mapping with a planar shadow map. + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. + * @param targetReg The register to contain the shadow coverage + * @return + */ + ShadowMethodBase.prototype._pGetPlanarFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { + throw new AbstractMethodError(); + return ""; + }; + /** + * Gets the fragment code for shadow mapping with a point light. + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. + * @param targetReg The register to contain the shadow coverage + * @return + */ + ShadowMethodBase.prototype._pGetPointFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { + throw new AbstractMethodError(); + return ""; + }; + /** + * @inheritDoc + */ + ShadowMethodBase.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { + if (!this._pUsePoint) + this._pShadowMapper.iDepthProjection.copyRawDataTo(shaderObject.vertexConstantData, methodVO.vertexConstantsIndex + 4, true); + }; + /** + * Gets the fragment code for combining this method with a cascaded shadow map method. + * @param methodVO The MethodVO object linking this method with the pass currently being compiled. + * @param regCache The register cache used during the compilation. + * @param decodeRegister The register containing the data to decode the shadow map depth value. + * @param depthTexture The texture containing the shadow map. + * @param depthProjection The projection of the fragment relative to the light. + * @param targetRegister The register to contain the shadow coverage + * @return + */ + ShadowMethodBase.prototype._iGetCascadeFragmentCode = function (shaderObject, methodVO, decodeRegister, depthTexture, depthProjection, targetRegister, registerCache, sharedRegisters) { + throw new Error("This shadow method is incompatible with cascade shadows"); + }; + /** + * @inheritDoc + */ + ShadowMethodBase.prototype.iActivate = function (shaderObject, methodVO, stage) { + var fragmentData = shaderObject.fragmentConstantData; + var index = methodVO.fragmentConstantsIndex; + if (this._pUsePoint) + fragmentData[index + 4] = -Math.pow(1 / (this._pCastingLight.fallOff * this._pEpsilon), 2); + else + shaderObject.vertexConstantData[methodVO.vertexConstantsIndex + 3] = -1 / (this._pShadowMapper.depth * this._pEpsilon); + fragmentData[index + 5] = 1 - this._pAlpha; + if (this._pUsePoint) { + var pos = this._pCastingLight.scenePosition; + fragmentData[index + 8] = pos.x; + fragmentData[index + 9] = pos.y; + fragmentData[index + 10] = pos.z; + // used to decompress distance + var f = this._pCastingLight.fallOff; + fragmentData[index + 11] = 1 / (2 * f * f); } + if (!this._pUsePoint) + stage.context.activateRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap); + //else + // ( stage.context).activateCubeRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap); }; /** - * Figure out which named registers are required, and how often. + * Sets the method state for cascade shadow mapping. */ - ShaderLightingCompiler.prototype.pCalculateDependencies = function () { - var numAllLights = this._materialLightingPass.iNumPointLights + this._materialLightingPass.iNumDirectionalLights; - var numLightProbes = this._materialLightingPass.iNumLightProbes; - var diffuseLightSources = this._pMaterial.diffuseLightSources; - var specularLightSources = this._materialLightingPass._iUsesSpecular() ? this._pMaterial.specularLightSources : 0x00; - var combinedLightSources = diffuseLightSources | specularLightSources; - this._shaderLightingObject.usesLightFallOff = this._pMaterial.enableLightFallOff && this._shaderLightingObject.profile != ContextGLProfile.BASELINE_CONSTRAINED; - this._shaderLightingObject.numLights = numAllLights + numLightProbes; - this._shaderLightingObject.numPointLights = this._materialLightingPass.iNumPointLights; - this._shaderLightingObject.numDirectionalLights = this._materialLightingPass.iNumDirectionalLights; - this._shaderLightingObject.numLightProbes = numLightProbes; - this._shaderLightingObject.pointLightsOffset = this._materialLightingPass.pointLightsOffset; - this._shaderLightingObject.directionalLightsOffset = this._materialLightingPass.directionalLightsOffset; - this._shaderLightingObject.lightProbesOffset = this._materialLightingPass.lightProbesOffset; - this._shaderLightingObject.lightPicker = this._materialLightingPass.lightPicker; - this._shaderLightingObject.usesLights = numAllLights > 0 && (combinedLightSources & LightSources.LIGHTS) != 0; - this._shaderLightingObject.usesProbes = numLightProbes > 0 && (combinedLightSources & LightSources.PROBES) != 0; - this._shaderLightingObject.usesLightsForSpecular = numAllLights > 0 && (specularLightSources & LightSources.LIGHTS) != 0; - this._shaderLightingObject.usesProbesForSpecular = numLightProbes > 0 && (specularLightSources & LightSources.PROBES) != 0; - this._shaderLightingObject.usesLightsForDiffuse = numAllLights > 0 && (diffuseLightSources & LightSources.LIGHTS) != 0; - this._shaderLightingObject.usesProbesForDiffuse = numLightProbes > 0 && (diffuseLightSources & LightSources.PROBES) != 0; - this._shaderLightingObject.usesShadows = this._materialLightingPass._iUsesShadows(); - _super.prototype.pCalculateDependencies.call(this); + ShadowMethodBase.prototype.iActivateForCascade = function (shaderObject, methodVO, stage) { + throw new Error("This shadow method is incompatible with cascade shadows"); }; - return ShaderLightingCompiler; -})(ShaderCompilerBase); -module.exports = ShaderLightingCompiler; + return ShadowMethodBase; +})(ShadowMapMethodBase); +module.exports = ShadowMethodBase; -},{"awayjs-display/lib/materials/LightSources":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLProfile":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject":[function(require,module,exports){ +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-display/lib/entities/PointLight":undefined,"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ShaderLightingCompiler = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler"); -var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** - * ShaderObjectBase keeps track of the number of dependencies for "named registers" used across a pass. - * Named registers are that are not necessarily limited to a single method. They are created by the compiler and - * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed - * each time a method has been compiled into the shader. - * - * @see RegisterPool.addUsage + * SpecularBasicMethod provides the default shading method for Blinn-Phong specular highlights (an optimized but approximated + * version of Phong specularity). */ -var ShaderLightingObject = (function (_super) { - __extends(ShaderLightingObject, _super); +var SpecularBasicMethod = (function (_super) { + __extends(SpecularBasicMethod, _super); /** - * Creates a new MethodCompilerVO object. + * Creates a new SpecularBasicMethod object. */ - function ShaderLightingObject(profile) { - _super.call(this, profile); + function SpecularBasicMethod() { + _super.call(this); + this._gloss = 50; + this._specular = 1; + this._specularColor = 0xffffff; + this._iSpecularR = 1; + this._iSpecularG = 1; + this._iSpecularB = 1; } + SpecularBasicMethod.prototype.iIsUsed = function (shaderObject) { + if (!shaderObject.numLights) + return false; + return true; + }; + /** + * @inheritDoc + */ + SpecularBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { + methodVO.needsUV = this._pUseTexture; + methodVO.needsNormals = shaderObject.numLights > 0; + methodVO.needsView = shaderObject.numLights > 0; + }; + Object.defineProperty(SpecularBasicMethod.prototype, "gloss", { + /** + * The sharpness of the specular highlight. + */ + get: function () { + return this._gloss; + }, + set: function (value) { + this._gloss = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpecularBasicMethod.prototype, "specular", { + /** + * The overall strength of the specular highlights. + */ + get: function () { + return this._specular; + }, + set: function (value) { + if (value == this._specular) + return; + this._specular = value; + this.updateSpecular(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpecularBasicMethod.prototype, "specularColor", { + /** + * The colour of the specular reflection of the surface. + */ + get: function () { + return this._specularColor; + }, + set: function (value) { + if (this._specularColor == value) + return; + // specular is now either enabled or disabled + if (this._specularColor == 0 || value == 0) + this.iInvalidateShaderProgram(); + this._specularColor = value; + this.updateSpecular(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SpecularBasicMethod.prototype, "texture", { + /** + * The bitmapData that encodes the specular highlight strength per texel in the red channel, and the sharpness + * in the green channel. You can use SpecularBitmapTexture if you want to easily set specular and gloss maps + * from grayscale images, but prepared images are preferred. + */ + get: function () { + return this._texture; + }, + set: function (value) { + var b = (value != null); + if (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) + this.iInvalidateShaderProgram(); + this._pUseTexture = b; + this._texture = value; + }, + enumerable: true, + configurable: true + }); /** - * Factory method to create a concrete compiler object for this object - * - * @param materialPassVO - * @returns {away.materials.ShaderLightingCompiler} + * @inheritDoc */ - ShaderLightingObject.prototype.createCompiler = function (material, materialPass) { - return new ShaderLightingCompiler(material, materialPass, this); + SpecularBasicMethod.prototype.copyFrom = function (method) { + var m = method; + var bsm = method; + var spec = bsm; //SpecularBasicMethod(method); + this.texture = spec.texture; + this.specular = spec.specular; + this.specularColor = spec.specularColor; + this.gloss = spec.gloss; }; /** - * Clears dependency counts for all registers. Called when recompiling a pass. + * @inheritDoc */ - ShaderLightingObject.prototype.reset = function () { - _super.prototype.reset.call(this); - this.numLights = 0; - this.usesLightFallOff = true; + SpecularBasicMethod.prototype.iCleanCompilationData = function () { + _super.prototype.iCleanCompilationData.call(this); + this._pTotalLightColorReg = null; + this._pSpecularTextureRegister = null; + this._pSpecularTexData = null; + this._pSpecularDataRegister = null; }; /** - * Adds any external world space dependencies, used to force world space calculations. + * @inheritDoc */ - ShaderLightingObject.prototype.addWorldSpaceDependencies = function (fragmentLights) { - _super.prototype.addWorldSpaceDependencies.call(this, fragmentLights); - if (this.numPointLights > 0 && this.usesLights) { - ++this.globalPosDependencies; - if (fragmentLights) - this.usesGlobalPosFragment = true; + SpecularBasicMethod.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { + var code = ""; + this._pIsFirstLight = true; + this._pSpecularDataRegister = registerCache.getFreeFragmentConstant(); + methodVO.fragmentConstantsIndex = this._pSpecularDataRegister.index * 4; + if (this._pUseTexture) { + this._pSpecularTexData = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(this._pSpecularTexData, 1); + this._pSpecularTextureRegister = registerCache.getFreeTextureReg(); + methodVO.texturesIndex = this._pSpecularTextureRegister.index; + code = ShaderCompilerHelper.getTex2DSampleCode(this._pSpecularTexData, sharedRegisters, this._pSpecularTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); } + else { + this._pSpecularTextureRegister = null; + } + this._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(this._pTotalLightColorReg, 1); + return code; }; /** - * - * - * @param renderable - * @param stage - * @param camera - */ - ShaderLightingObject.prototype.setRenderState = function (renderable, stage, camera, viewProjection) { - _super.prototype.setRenderState.call(this, renderable, stage, camera, viewProjection); - if (this.usesLights) - this.updateLights(); - if (this.usesProbes) - this.updateProbes(stage); - }; - /** - * Updates constant data render state used by the lights. This method is optional for subclasses to implement. + * @inheritDoc */ - ShaderLightingObject.prototype.updateLights = function () { - var dirLight; - var pointLight; - var i = 0; - var k = 0; - var len; - var dirPos; - var total = 0; - var numLightTypes = this.usesShadows ? 2 : 1; - var l; - var offset; - this.ambientR = this.ambientG = this.ambientB = 0; - l = this.lightVertexConstantIndex; - k = this.lightFragmentConstantIndex; - var cast = 0; - var dirLights = this.lightPicker.directionalLights; - offset = this.directionalLightsOffset; - len = this.lightPicker.directionalLights.length; - if (offset > len) { - cast = 1; - offset -= len; - } - for (; cast < numLightTypes; ++cast) { - if (cast) - dirLights = this.lightPicker.castingDirectionalLights; - len = dirLights.length; - if (len > this.numDirectionalLights) - len = this.numDirectionalLights; - for (i = 0; i < len; ++i) { - dirLight = dirLights[offset + i]; - dirPos = dirLight.sceneDirection; - this.ambientR += dirLight._iAmbientR; - this.ambientG += dirLight._iAmbientG; - this.ambientB += dirLight._iAmbientB; - if (this.usesTangentSpace) { - var x = -dirPos.x; - var y = -dirPos.y; - var z = -dirPos.z; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z; - this.vertexConstantData[l++] = 1; - } - else { - this.fragmentConstantData[k++] = -dirPos.x; - this.fragmentConstantData[k++] = -dirPos.y; - this.fragmentConstantData[k++] = -dirPos.z; - this.fragmentConstantData[k++] = 1; - } - this.fragmentConstantData[k++] = dirLight._iDiffuseR; - this.fragmentConstantData[k++] = dirLight._iDiffuseG; - this.fragmentConstantData[k++] = dirLight._iDiffuseB; - this.fragmentConstantData[k++] = 1; - this.fragmentConstantData[k++] = dirLight._iSpecularR; - this.fragmentConstantData[k++] = dirLight._iSpecularG; - this.fragmentConstantData[k++] = dirLight._iSpecularB; - this.fragmentConstantData[k++] = 1; - if (++total == this.numDirectionalLights) { - // break loop - i = len; - cast = numLightTypes; - } - } + SpecularBasicMethod.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { + var code = ""; + var t; + if (this._pIsFirstLight) { + t = this._pTotalLightColorReg; } - // more directional supported than currently picked, need to clamp all to 0 - if (this.numDirectionalLights > total) { - i = k + (this.numDirectionalLights - total) * 12; - while (k < i) - this.fragmentConstantData[k++] = 0; + else { + t = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(t, 1); } - total = 0; - var pointLights = this.lightPicker.pointLights; - offset = this.pointLightsOffset; - len = this.lightPicker.pointLights.length; - if (offset > len) { - cast = 1; - offset -= len; + var viewDirReg = sharedRegisters.viewDirFragment; + var normalReg = sharedRegisters.normalFragment; + // blinn-phong half vector model + code += "add " + t + ", " + lightDirReg + ", " + viewDirReg + "\n" + "nrm " + t + ".xyz, " + t + "\n" + "dp3 " + t + ".w, " + normalReg + ", " + t + "\n" + "sat " + t + ".w, " + t + ".w\n"; + if (this._pUseTexture) { + // apply gloss modulation from texture + code += "mul " + this._pSpecularTexData + ".w, " + this._pSpecularTexData + ".y, " + this._pSpecularDataRegister + ".w\n" + "pow " + t + ".w, " + t + ".w, " + this._pSpecularTexData + ".w\n"; } else { - cast = 0; - } - for (; cast < numLightTypes; ++cast) { - if (cast) - pointLights = this.lightPicker.castingPointLights; - len = pointLights.length; - for (i = 0; i < len; ++i) { - pointLight = pointLights[offset + i]; - dirPos = pointLight.scenePosition; - this.ambientR += pointLight._iAmbientR; - this.ambientG += pointLight._iAmbientG; - this.ambientB += pointLight._iAmbientB; - if (this.usesTangentSpace) { - x = dirPos.x; - y = dirPos.y; - z = dirPos.z; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z + this._pInverseSceneMatrix[12]; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z + this._pInverseSceneMatrix[13]; - this.vertexConstantData[l++] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z + this._pInverseSceneMatrix[14]; - this.vertexConstantData[l++] = 1; - } - else if (!this.usesGlobalPosFragment) { - this.vertexConstantData[l++] = dirPos.x; - this.vertexConstantData[l++] = dirPos.y; - this.vertexConstantData[l++] = dirPos.z; - this.vertexConstantData[l++] = 1; - } - else { - this.fragmentConstantData[k++] = dirPos.x; - this.fragmentConstantData[k++] = dirPos.y; - this.fragmentConstantData[k++] = dirPos.z; - this.fragmentConstantData[k++] = 1; - } - this.fragmentConstantData[k++] = pointLight._iDiffuseR; - this.fragmentConstantData[k++] = pointLight._iDiffuseG; - this.fragmentConstantData[k++] = pointLight._iDiffuseB; - var radius = pointLight._pRadius; - this.fragmentConstantData[k++] = radius * radius; - this.fragmentConstantData[k++] = pointLight._iSpecularR; - this.fragmentConstantData[k++] = pointLight._iSpecularG; - this.fragmentConstantData[k++] = pointLight._iSpecularB; - this.fragmentConstantData[k++] = pointLight._pFallOffFactor; - if (++total == this.numPointLights) { - // break loop - i = len; - cast = numLightTypes; - } - } + code += "pow " + t + ".w, " + t + ".w, " + this._pSpecularDataRegister + ".w\n"; } - // more directional supported than currently picked, need to clamp all to 0 - if (this.numPointLights > total) { - i = k + (total - this.numPointLights) * 12; - for (; k < i; ++k) - this.fragmentConstantData[k] = 0; + // attenuate + if (shaderObject.usesLightFallOff) + code += "mul " + t + ".w, " + t + ".w, " + lightDirReg + ".w\n"; + if (this._iModulateMethod != null) + code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); + code += "mul " + t + ".xyz, " + lightColReg + ", " + t + ".w\n"; + if (!this._pIsFirstLight) { + code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; + registerCache.removeFragmentTempUsage(t); } + this._pIsFirstLight = false; + return code; }; /** - * Updates constant data render state used by the light probes. This method is optional for subclasses to implement. + * @inheritDoc */ - ShaderLightingObject.prototype.updateProbes = function (stage) { - var probe; - var lightProbes = this.lightPicker.lightProbes; - var weights = this.lightPicker.lightProbeWeights; - var len = lightProbes.length - this.lightProbesOffset; - var addDiff = this.usesProbesForDiffuse; - var addSpec = this.usesProbesForSpecular; - if (!(addDiff || addSpec)) - return; - if (len > this.numLightProbes) - len = this.numLightProbes; - for (var i = 0; i < len; ++i) { - probe = lightProbes[this.lightProbesOffset + i]; - if (addDiff) - stage.context.activateCubeTexture(this.lightProbeDiffuseIndices[i], probe.diffuseMap); - if (addSpec) - stage.context.activateCubeTexture(this.lightProbeSpecularIndices[i], probe.specularMap); + SpecularBasicMethod.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { + var code = ""; + var t; + // write in temporary if not first light, so we can add to total diffuse colour + if (this._pIsFirstLight) { + t = this._pTotalLightColorReg; } - for (i = 0; i < len; ++i) - this.fragmentConstantData[this.probeWeightsIndex + i] = weights[this.lightProbesOffset + i]; + else { + t = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(t, 1); + } + var normalReg = sharedRegisters.normalFragment; + var viewDirReg = sharedRegisters.viewDirFragment; + code += "dp3 " + t + ".w, " + normalReg + ", " + viewDirReg + "\n" + "add " + t + ".w, " + t + ".w, " + t + ".w\n" + "mul " + t + ", " + t + ".w, " + normalReg + "\n" + "sub " + t + ", " + t + ", " + viewDirReg + "\n" + "tex " + t + ", " + t + ", " + cubeMapReg + " \n" + "mul " + t + ".xyz, " + t + ", " + weightRegister + "\n"; + if (this._iModulateMethod != null) + code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); + if (!this._pIsFirstLight) { + code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; + registerCache.removeFragmentTempUsage(t); + } + this._pIsFirstLight = false; + return code; }; - return ShaderLightingObject; -})(ShaderObjectBase); -module.exports = ShaderLightingObject; - - -},{"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":[function(require,module,exports){ -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); -var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); -/** - * ShaderObjectBase keeps track of the number of dependencies for "named registers" used across a pass. - * Named registers are that are not necessarily limited to a single method. They are created by the compiler and - * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed - * each time a method has been compiled into the shader. - * - * @see RegisterPool.addUsage - */ -var ShaderObjectBase = (function () { /** - * Creates a new MethodCompilerVO object. + * @inheritDoc */ - function ShaderObjectBase(profile) { - this._defaultCulling = ContextGLTriangleFace.BACK; - this._pInverseSceneMatrix = new Array(); - //set ambient values to default - this.ambientR = 0xFF; - this.ambientG = 0xFF; - this.ambientB = 0xFF; - /** - * Indicates whether there are any dependencies on the world-space position vector. - */ - this.usesGlobalPosFragment = false; - this.vertexConstantData = new Array(); - this.fragmentConstantData = new Array(); - this.profile = profile; - } + SpecularBasicMethod.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + var code = ""; + if (sharedRegisters.shadowTarget) + code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + sharedRegisters.shadowTarget + ".w\n"; + if (this._pUseTexture) { + // apply strength modulation from texture + code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + this._pSpecularTexData + ".x\n"; + registerCache.removeFragmentTempUsage(this._pSpecularTexData); + } + // apply material's specular reflection + code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + this._pSpecularDataRegister + "\n" + "add " + targetReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n"; + registerCache.removeFragmentTempUsage(this._pTotalLightColorReg); + return code; + }; /** - * Factory method to create a concrete compiler object for this object - * - * @param materialPassVO - * @returns {away.materials.ShaderCompilerBase} + * @inheritDoc */ - ShaderObjectBase.prototype.createCompiler = function (material, materialPass) { - return new ShaderCompilerBase(material, materialPass, this); + SpecularBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { + if (this._pUseTexture) { + stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + stage.context.activateTexture(methodVO.texturesIndex, this._texture); + } + var index = methodVO.fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = this._iSpecularR; + data[index + 1] = this._iSpecularG; + data[index + 2] = this._iSpecularB; + data[index + 3] = this._gloss; }; /** - * Clears dependency counts for all registers. Called when recompiling a pass. + * Updates the specular color data used by the render state. */ - ShaderObjectBase.prototype.reset = function () { - this.projectionDependencies = 0; - this.normalDependencies = 0; - this.viewDirDependencies = 0; - this.uvDependencies = 0; - this.secondaryUVDependencies = 0; - this.globalPosDependencies = 0; - this.tangentDependencies = 0; - this.usesGlobalPosFragment = false; - this.usesFragmentAnimation = false; - this.usesTangentSpace = false; - this.outputsNormals = false; - this.outputsTangentNormals = false; + SpecularBasicMethod.prototype.updateSpecular = function () { + this._iSpecularR = ((this._specularColor >> 16) & 0xff) / 0xff * this._specular; + this._iSpecularG = ((this._specularColor >> 8) & 0xff) / 0xff * this._specular; + this._iSpecularB = (this._specularColor & 0xff) / 0xff * this._specular; }; + return SpecularBasicMethod; +})(LightingMethodBase); +module.exports = SpecularBasicMethod; + + +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/LightingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/DepthMapPass":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +/** + * DepthMapPass is a pass that writes depth values to a depth map as a 32-bit value exploded over the 4 texture channels. + * This is used to render shadow maps, depth maps, etc. + */ +var DepthMapPass = (function (_super) { + __extends(DepthMapPass, _super); /** - * Adds any external world space dependencies, used to force world space calculations. + * Creates a new DepthMapPass object. + * + * @param material The material to which this pass belongs. */ - ShaderObjectBase.prototype.addWorldSpaceDependencies = function (fragmentLights) { - if (this.viewDirDependencies > 0) - ++this.globalPosDependencies; - }; - ShaderObjectBase.prototype.pInitRegisterIndices = function () { - this.commonsDataIndex = -1; - this.cameraPositionIndex = -1; - this.uvBufferIndex = -1; - this.uvTransformIndex = -1; - this.secondaryUVBufferIndex = -1; - this.normalBufferIndex = -1; - this.tangentBufferIndex = -1; - this.sceneMatrixIndex = -1; - this.sceneNormalMatrixIndex = -1; - }; + function DepthMapPass() { + _super.call(this); + } /** - * Initializes the unchanging constant data for this shader object. + * Initializes the unchanging constant data for this material. */ - ShaderObjectBase.prototype.initConstantData = function (registerCache, animatableAttributes, animationTargetRegisters, uvSource, uvTarget) { - //Updates the amount of used register indices. - this.numUsedVertexConstants = registerCache.numUsedVertexConstants; - this.numUsedFragmentConstants = registerCache.numUsedFragmentConstants; - this.numUsedStreams = registerCache.numUsedStreams; - this.numUsedTextures = registerCache.numUsedTextures; - this.numUsedVaryings = registerCache.numUsedVaryings; - this.numUsedFragmentConstants = registerCache.numUsedFragmentConstants; - this.animatableAttributes = animatableAttributes; - this.animationTargetRegisters = animationTargetRegisters; - this.uvSource = uvSource; - this.uvTarget = uvTarget; - this.vertexConstantData.length = this.numUsedVertexConstants * 4; - this.fragmentConstantData.length = this.numUsedFragmentConstants * 4; - //Initializes commonly required constant values. - this.fragmentConstantData[this.commonsDataIndex] = .5; - this.fragmentConstantData[this.commonsDataIndex + 1] = 0; - this.fragmentConstantData[this.commonsDataIndex + 2] = 1 / 255; - this.fragmentConstantData[this.commonsDataIndex + 3] = 1; - //Initializes the default UV transformation matrix. - if (this.uvTransformIndex >= 0) { - this.vertexConstantData[this.uvTransformIndex] = 1; - this.vertexConstantData[this.uvTransformIndex + 1] = 0; - this.vertexConstantData[this.uvTransformIndex + 2] = 0; - this.vertexConstantData[this.uvTransformIndex + 3] = 0; - this.vertexConstantData[this.uvTransformIndex + 4] = 0; - this.vertexConstantData[this.uvTransformIndex + 5] = 1; - this.vertexConstantData[this.uvTransformIndex + 6] = 0; - this.vertexConstantData[this.uvTransformIndex + 7] = 0; - } - if (this.cameraPositionIndex >= 0) - this.vertexConstantData[this.cameraPositionIndex + 3] = 1; + DepthMapPass.prototype._iInitConstantData = function (shaderObject) { + _super.prototype._iInitConstantData.call(this, shaderObject); + var index = this._fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = 1.0; + data[index + 1] = 255.0; + data[index + 2] = 65025.0; + data[index + 3] = 16581375.0; + data[index + 4] = 1.0 / 255.0; + data[index + 5] = 1.0 / 255.0; + data[index + 6] = 1.0 / 255.0; + data[index + 7] = 0.0; + }; + DepthMapPass.prototype._iIncludeDependencies = function (shaderObject) { + shaderObject.projectionDependencies++; + if (shaderObject.alphaThreshold > 0) + shaderObject.uvDependencies++; }; /** * @inheritDoc */ - ShaderObjectBase.prototype.iActivate = function (stage, camera) { - stage.context.setCulling(this.useBothSides ? ContextGLTriangleFace.NONE : this._defaultCulling, camera.projection.coordinateSystem); - if (!this.usesTangentSpace && this.cameraPositionIndex >= 0) { - var pos = camera.scenePosition; - this.vertexConstantData[this.cameraPositionIndex] = pos.x; - this.vertexConstantData[this.cameraPositionIndex + 1] = pos.y; - this.vertexConstantData[this.cameraPositionIndex + 2] = pos.z; + DepthMapPass.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + var targetReg = sharedRegisters.shadedTarget; + var diffuseInputReg = registerCache.getFreeTextureReg(); + var dataReg1 = registerCache.getFreeFragmentConstant(); + var dataReg2 = registerCache.getFreeFragmentConstant(); + this._fragmentConstantsIndex = dataReg1.index * 4; + var temp1 = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(temp1, 1); + var temp2 = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(temp2, 1); + code += "div " + temp1 + ", " + sharedRegisters.projectionFragment + ", " + sharedRegisters.projectionFragment + ".w\n" + "mul " + temp1 + ", " + dataReg1 + ", " + temp1 + ".z\n" + "frc " + temp1 + ", " + temp1 + "\n" + "mul " + temp2 + ", " + temp1 + ".yzww, " + dataReg2 + "\n"; + //codeF += "mov ft1.w, fc1.w \n" + + // "mov ft0.w, fc0.x \n"; + if (shaderObject.alphaThreshold > 0) { + diffuseInputReg = registerCache.getFreeTextureReg(); + this._texturesIndex = diffuseInputReg.index; + var albedo = registerCache.getFreeFragmentVectorTemp(); + code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); + var cutOffReg = registerCache.getFreeFragmentConstant(); + code += "sub " + albedo + ".w, " + albedo + ".w, " + cutOffReg + ".x\n" + "kil " + albedo + ".w\n"; } + code += "sub " + targetReg + ", " + temp1 + ", " + temp2 + "\n"; + registerCache.removeFragmentTempUsage(temp1); + registerCache.removeFragmentTempUsage(temp2); + return code; }; - /** - * @inheritDoc - */ - ShaderObjectBase.prototype.iDeactivate = function (stage) { + DepthMapPass.prototype._iRender = function (pass, renderable, stage, camera, viewProjection) { + //this.setRenderState(pass, renderable, stage, camera, viewProjection); }; /** - * - * - * @param renderable - * @param stage - * @param camera + * @inheritDoc */ - ShaderObjectBase.prototype.setRenderState = function (renderable, stage, camera, viewProjection) { + DepthMapPass.prototype._iActivate = function (pass, stage, camera) { + _super.prototype._iActivate.call(this, pass, stage, camera); var context = stage.context; - if (renderable.materialOwner.animator) - renderable.materialOwner.animator.setRenderState(this, renderable, stage, camera, this.numUsedVertexConstants, this.numUsedStreams); - if (this.uvBufferIndex >= 0) - context.activateBuffer(this.uvBufferIndex, renderable.getVertexData(TriangleSubGeometry.UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.UV_DATA), TriangleSubGeometry.UV_FORMAT); - if (this.secondaryUVBufferIndex >= 0) - context.activateBuffer(this.secondaryUVBufferIndex, renderable.getVertexData(TriangleSubGeometry.SECONDARY_UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.SECONDARY_UV_DATA), TriangleSubGeometry.SECONDARY_UV_FORMAT); - if (this.normalBufferIndex >= 0) - context.activateBuffer(this.normalBufferIndex, renderable.getVertexData(TriangleSubGeometry.NORMAL_DATA), renderable.getVertexOffset(TriangleSubGeometry.NORMAL_DATA), TriangleSubGeometry.NORMAL_FORMAT); - if (this.tangentBufferIndex >= 0) - context.activateBuffer(this.tangentBufferIndex, renderable.getVertexData(TriangleSubGeometry.TANGENT_DATA), renderable.getVertexOffset(TriangleSubGeometry.TANGENT_DATA), TriangleSubGeometry.TANGENT_FORMAT); - if (this.usesUVTransform) { - var uvTransform = renderable.materialOwner.uvTransform.matrix; - if (uvTransform) { - this.vertexConstantData[this.uvTransformIndex] = uvTransform.a; - this.vertexConstantData[this.uvTransformIndex + 1] = uvTransform.b; - this.vertexConstantData[this.uvTransformIndex + 3] = uvTransform.tx; - this.vertexConstantData[this.uvTransformIndex + 4] = uvTransform.c; - this.vertexConstantData[this.uvTransformIndex + 5] = uvTransform.d; - this.vertexConstantData[this.uvTransformIndex + 7] = uvTransform.ty; - } - else { - this.vertexConstantData[this.uvTransformIndex] = 1; - this.vertexConstantData[this.uvTransformIndex + 1] = 0; - this.vertexConstantData[this.uvTransformIndex + 3] = 0; - this.vertexConstantData[this.uvTransformIndex + 4] = 0; - this.vertexConstantData[this.uvTransformIndex + 5] = 1; - this.vertexConstantData[this.uvTransformIndex + 7] = 0; - } - } - if (this.sceneNormalMatrixIndex >= 0) - renderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this.vertexConstantData, this.sceneNormalMatrixIndex, false); - if (this.usesTangentSpace && this.cameraPositionIndex >= 0) { - renderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this._pInverseSceneMatrix); - var pos = camera.scenePosition; - var x = pos.x; - var y = pos.y; - var z = pos.z; - this.vertexConstantData[this.cameraPositionIndex] = this._pInverseSceneMatrix[0] * x + this._pInverseSceneMatrix[4] * y + this._pInverseSceneMatrix[8] * z + this._pInverseSceneMatrix[12]; - this.vertexConstantData[this.cameraPositionIndex + 1] = this._pInverseSceneMatrix[1] * x + this._pInverseSceneMatrix[5] * y + this._pInverseSceneMatrix[9] * z + this._pInverseSceneMatrix[13]; - this.vertexConstantData[this.cameraPositionIndex + 2] = this._pInverseSceneMatrix[2] * x + this._pInverseSceneMatrix[6] * y + this._pInverseSceneMatrix[10] * z + this._pInverseSceneMatrix[14]; + var shaderObject = pass.shaderObject; + if (shaderObject.alphaThreshold > 0) { + context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + context.activateTexture(this._texturesIndex, shaderObject.texture); + shaderObject.fragmentConstantData[this._fragmentConstantsIndex + 8] = pass.shaderObject.alphaThreshold; } }; - ShaderObjectBase.prototype.dispose = function () { - //TODO uncount associated program data - }; - return ShaderObjectBase; -})(); -module.exports = ShaderObjectBase; + return DepthMapPass; +})(MaterialPassBase); +module.exports = DepthMapPass; -},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache":[function(require,module,exports){ -var RegisterPool = require("awayjs-stagegl/lib/materials/compilation/RegisterPool"); -var ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/DistanceMapPass":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** - * ShaderRegister Cache provides the usage management system for all registers during shading compilation. + * DistanceMapPass is a pass that writes distance values to a depth map as a 32-bit value exploded over the 4 texture channels. + * This is used to render omnidirectional shadow maps. */ -var ShaderRegisterCache = (function () { +var DistanceMapPass = (function (_super) { + __extends(DistanceMapPass, _super); /** - * Create a new ShaderRegisterCache object. + * Creates a new DistanceMapPass object. * - * @param profile The compatibility profile used by the renderer. + * @param material The material to which this pass belongs. */ - function ShaderRegisterCache(profile) { - this._numUsedVertexConstants = 0; - this._numUsedFragmentConstants = 0; - this._numUsedStreams = 0; - this._numUsedTextures = 0; - this._numUsedVaryings = 0; - this._profile = profile; + function DistanceMapPass() { + _super.call(this); } /** - * Resets all registers. + * Initializes the unchanging constant data for this material. */ - ShaderRegisterCache.prototype.reset = function () { - this._fragmentTempCache = new RegisterPool("ft", 8, false); - this._vertexTempCache = new RegisterPool("vt", 8, false); - this._varyingCache = new RegisterPool("v", 8); - this._textureCache = new RegisterPool("fs", 8); - this._vertexAttributesCache = new RegisterPool("va", 8); - this._fragmentConstantsCache = new RegisterPool("fc", 28); - this._vertexConstantsCache = new RegisterPool("vc", 128); - this._fragmentOutputRegister = new ShaderRegisterElement("oc", -1); - this._vertexOutputRegister = new ShaderRegisterElement("op", -1); - this._numUsedVertexConstants = 0; - this._numUsedStreams = 0; - this._numUsedTextures = 0; - this._numUsedVaryings = 0; - this._numUsedFragmentConstants = 0; - var i; - for (i = 0; i < this._vertexAttributesOffset; ++i) - this.getFreeVertexAttribute(); - for (i = 0; i < this._vertexConstantOffset; ++i) - this.getFreeVertexConstant(); - for (i = 0; i < this._varyingsOffset; ++i) - this.getFreeVarying(); - for (i = 0; i < this._fragmentConstantOffset; ++i) - this.getFreeFragmentConstant(); + DistanceMapPass.prototype._iInitConstantData = function (shaderObject) { + _super.prototype._iInitConstantData.call(this, shaderObject); + var index = this._fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index + 4] = 1.0 / 255.0; + data[index + 5] = 1.0 / 255.0; + data[index + 6] = 1.0 / 255.0; + data[index + 7] = 0.0; }; - /** - * Disposes all resources used. - */ - ShaderRegisterCache.prototype.dispose = function () { - this._fragmentTempCache.dispose(); - this._vertexTempCache.dispose(); - this._varyingCache.dispose(); - this._fragmentConstantsCache.dispose(); - this._vertexAttributesCache.dispose(); - this._fragmentTempCache = null; - this._vertexTempCache = null; - this._varyingCache = null; - this._fragmentConstantsCache = null; - this._vertexAttributesCache = null; - this._fragmentOutputRegister = null; - this._vertexOutputRegister = null; + DistanceMapPass.prototype._iIncludeDependencies = function (shaderObject) { + shaderObject.projectionDependencies++; + shaderObject.viewDirDependencies++; + if (shaderObject.alphaThreshold > 0) + shaderObject.uvDependencies++; + shaderObject.addWorldSpaceDependencies(false); }; /** - * Marks a fragment temporary register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage - * has been called usageCount times again. - * @param register The register to mark as used. - * @param usageCount The amount of usages to add. + * @inheritDoc */ - ShaderRegisterCache.prototype.addFragmentTempUsages = function (register, usageCount) { - this._fragmentTempCache.addUsage(register, usageCount); + DistanceMapPass.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + var code; + var targetReg = sharedRegisters.shadedTarget; + var diffuseInputReg = registerCache.getFreeTextureReg(); + var dataReg1 = registerCache.getFreeFragmentConstant(); + var dataReg2 = registerCache.getFreeFragmentConstant(); + this._fragmentConstantsIndex = dataReg1.index * 4; + var temp1 = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(temp1, 1); + var temp2 = registerCache.getFreeFragmentVectorTemp(); + registerCache.addFragmentTempUsages(temp2, 1); + // squared distance to view + code = "dp3 " + temp1 + ".z, " + sharedRegisters.viewDirVarying + ".xyz, " + sharedRegisters.viewDirVarying + ".xyz\n" + "mul " + temp1 + ", " + dataReg1 + ", " + temp1 + ".z\n" + "frc " + temp1 + ", " + temp1 + "\n" + "mul " + temp2 + ", " + temp1 + ".yzww, " + dataReg2 + "\n"; + if (shaderObject.alphaThreshold > 0) { + diffuseInputReg = registerCache.getFreeTextureReg(); + this._texturesIndex = diffuseInputReg.index; + var albedo = registerCache.getFreeFragmentVectorTemp(); + code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); + var cutOffReg = registerCache.getFreeFragmentConstant(); + code += "sub " + albedo + ".w, " + albedo + ".w, " + cutOffReg + ".x\n" + "kil " + albedo + ".w\n"; + } + code += "sub " + targetReg + ", " + temp1 + ", " + temp2 + "\n"; + return code; }; /** - * Removes a usage from a fragment temporary register. When usages reach 0, the register is freed again. - * @param register The register for which to remove a usage. + * @inheritDoc */ - ShaderRegisterCache.prototype.removeFragmentTempUsage = function (register) { - this._fragmentTempCache.removeUsage(register); + DistanceMapPass.prototype._iActivate = function (pass, stage, camera) { + _super.prototype._iActivate.call(this, pass, stage, camera); + var context = stage.context; + var shaderObject = pass.shaderObject; + var f = camera.projection.far; + f = 1 / (2 * f * f); + // sqrt(f*f+f*f) is largest possible distance for any frustum, so we need to divide by it. Rarely a tight fit, but with 32 bits precision, it's enough. + var index = this._fragmentConstantsIndex; + var data = shaderObject.fragmentConstantData; + data[index] = 1.0 * f; + data[index + 1] = 255.0 * f; + data[index + 2] = 65025.0 * f; + data[index + 3] = 16581375.0 * f; + if (shaderObject.alphaThreshold > 0) { + context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + context.activateTexture(this._texturesIndex, shaderObject.texture); + data[index + 8] = pass.shaderObject.alphaThreshold; + } }; + return DistanceMapPass; +})(MaterialPassBase); +module.exports = DistanceMapPass; + + +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL":[function(require,module,exports){ + + + +},{}],"awayjs-stagegl/lib/materials/passes/LineBasicPass":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +/** + * LineBasicPass is a material pass that draws wireframe segments. + */ +var LineBasicPass = (function (_super) { + __extends(LineBasicPass, _super); /** - * Marks a vertex temporary register as used, so it cannot be retrieved. The register won't be able to be used - * until removeUsage has been called usageCount times again. - * @param register The register to mark as used. - * @param usageCount The amount of usages to add. + * Creates a new SegmentPass object. + * + * @param material The material to which this pass belongs. */ - ShaderRegisterCache.prototype.addVertexTempUsages = function (register, usageCount) { - this._vertexTempCache.addUsage(register, usageCount); - }; + function LineBasicPass() { + _super.call(this); + } /** - * Removes a usage from a vertex temporary register. When usages reach 0, the register is freed again. - * @param register The register for which to remove a usage. + * @inheritDoc */ - ShaderRegisterCache.prototype.removeVertexTempUsage = function (register) { - this._vertexTempCache.removeUsage(register); + LineBasicPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { + var targetReg = sharedReg.shadedTarget; + return "mov " + targetReg + ", v0\n"; }; + return LineBasicPass; +})(MaterialPassBase); +module.exports = LineBasicPass; + + +},{"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined}],"awayjs-stagegl/lib/materials/passes/MaterialPassBase":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); +var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); +var Event = require("awayjs-core/lib/events/Event"); +var BlendMode = require("awayjs-display/lib/base/BlendMode"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); +/** + * MaterialPassBase provides an abstract base class for material shader passes. A material pass constitutes at least + * a render call per required renderable. + */ +var MaterialPassBase = (function (_super) { + __extends(MaterialPassBase, _super); /** - * Retrieve an entire fragment temporary register that's still available. The register won't be able to be used until removeUsage - * has been called usageCount times again. + * Creates a new MaterialPassBase object. */ - ShaderRegisterCache.prototype.getFreeFragmentVectorTemp = function () { - return this._fragmentTempCache.requestFreeVectorReg(); - }; + function MaterialPassBase(passMode) { + var _this = this; + if (passMode === void 0) { passMode = 0x03; } + _super.call(this); + this._materialPassData = new Array(); + this._maxLights = 3; + this._preserveAlpha = true; + this._includeCasters = true; + this._forceSeparateMVP = false; + this._directionalLightsOffset = 0; + this._pointLightsOffset = 0; + this._lightProbesOffset = 0; + this._pNumPointLights = 0; + this._pNumDirectionalLights = 0; + this._pNumLightProbes = 0; + this._pNumLights = 0; + this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; + this._blendFactorSource = ContextGLBlendFactor.ONE; + this._blendFactorDest = ContextGLBlendFactor.ZERO; + this._pEnableBlending = false; + this._writeDepth = true; + this._passMode = passMode; + this._onLightsChangeDelegate = function (event) { return _this.onLightsChange(event); }; + } + Object.defineProperty(MaterialPassBase.prototype, "preserveAlpha", { + /** + * Indicates whether the output alpha value should remain unchanged compared to the material's original alpha. + */ + get: function () { + return this._preserveAlpha; + }, + set: function (value) { + if (this._preserveAlpha == value) + return; + this._preserveAlpha = value; + this._pInvalidatePass(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "includeCasters", { + /** + * Indicates whether or not shadow casting lights need to be included. + */ + get: function () { + return this._includeCasters; + }, + set: function (value) { + if (this._includeCasters == value) + return; + this._includeCasters = value; + this._pInvalidatePass(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "forceSeparateMVP", { + /** + * Indicates whether the screen projection should be calculated by forcing a separate scene matrix and + * view-projection matrix. This is used to prevent rounding errors when using multiple passes with different + * projection code. + */ + get: function () { + return this._forceSeparateMVP; + }, + set: function (value) { + if (this._forceSeparateMVP == value) + return; + this._forceSeparateMVP = value; + this._pInvalidatePass(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "directionalLightsOffset", { + /** + * Indicates the offset in the light picker's directional light vector for which to start including lights. + * This needs to be set before the light picker is assigned. + */ + get: function () { + return this._directionalLightsOffset; + }, + set: function (value) { + this._directionalLightsOffset = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "pointLightsOffset", { + /** + * Indicates the offset in the light picker's point light vector for which to start including lights. + * This needs to be set before the light picker is assigned. + */ + get: function () { + return this._pointLightsOffset; + }, + set: function (value) { + this._pointLightsOffset = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "lightProbesOffset", { + /** + * Indicates the offset in the light picker's light probes vector for which to start including lights. + * This needs to be set before the light picker is assigned. + */ + get: function () { + return this._lightProbesOffset; + }, + set: function (value) { + this._lightProbesOffset = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "passMode", { + /** + * + */ + get: function () { + return this._passMode; + }, + set: function (value) { + this._passMode = value; + this._pInvalidatePass(); + }, + enumerable: true, + configurable: true + }); /** - * Retrieve a single component from a fragment temporary register that's still available. + * Factory method to create a concrete shader object for this pass. + * + * @param profile The compatibility profile used by the renderer. */ - ShaderRegisterCache.prototype.getFreeFragmentSingleTemp = function () { - return this._fragmentTempCache.requestFreeRegComponent(); + MaterialPassBase.prototype.createShaderObject = function (profile) { + return new ShaderObjectBase(profile); }; + Object.defineProperty(MaterialPassBase.prototype, "writeDepth", { + /** + * Indicate whether this pass should write to the depth buffer or not. Ignored when blending is enabled. + */ + get: function () { + return this._writeDepth; + }, + set: function (value) { + this._writeDepth = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MaterialPassBase.prototype, "depthCompareMode", { + /** + * The depth compare mode used to render the renderables using this material. + * + * @see away.stagegl.ContextGLCompareMode + */ + get: function () { + return this._depthCompareMode; + }, + set: function (value) { + this._depthCompareMode = value; + }, + enumerable: true, + configurable: true + }); /** - * Retrieve an available varying register + * Cleans up any resources used by the current object. + * @param deep Indicates whether other resources should be cleaned up, that could potentially be shared across different instances. */ - ShaderRegisterCache.prototype.getFreeVarying = function () { - ++this._numUsedVaryings; - return this._varyingCache.requestFreeVectorReg(); + MaterialPassBase.prototype.dispose = function () { + if (this._pLightPicker) + this._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate); + while (this._materialPassData.length) + this._materialPassData[0].dispose(); + this._materialPassData = null; }; /** - * Retrieve an available fragment constant register + * Renders an object to the current render target. + * + * @private */ - ShaderRegisterCache.prototype.getFreeFragmentConstant = function () { - ++this._numUsedFragmentConstants; - return this._fragmentConstantsCache.requestFreeVectorReg(); + MaterialPassBase.prototype._iRender = function (pass, renderable, stage, camera, viewProjection) { + this.setRenderState(pass, renderable, stage, camera, viewProjection); }; /** - * Retrieve an available vertex constant register + * + * + * @param renderable + * @param stage + * @param camera */ - ShaderRegisterCache.prototype.getFreeVertexConstant = function () { - ++this._numUsedVertexConstants; - return this._vertexConstantsCache.requestFreeVectorReg(); + MaterialPassBase.prototype.setRenderState = function (pass, renderable, stage, camera, viewProjection) { + pass.shaderObject.setRenderState(renderable, stage, camera, viewProjection); }; /** - * Retrieve an entire vertex temporary register that's still available. + * The blend mode to use when drawing this renderable. The following blend modes are supported: + *
    + *
  • BlendMode.NORMAL: No blending, unless the material inherently needs it
  • + *
  • BlendMode.LAYER: Force blending. This will draw the object the same as NORMAL, but without writing depth writes.
  • + *
  • BlendMode.MULTIPLY
  • + *
  • BlendMode.ADD
  • + *
  • BlendMode.ALPHA
  • + *
*/ - ShaderRegisterCache.prototype.getFreeVertexVectorTemp = function () { - return this._vertexTempCache.requestFreeVectorReg(); + MaterialPassBase.prototype.setBlendMode = function (value) { + switch (value) { + case BlendMode.NORMAL: + this._blendFactorSource = ContextGLBlendFactor.ONE; + this._blendFactorDest = ContextGLBlendFactor.ZERO; + this._pEnableBlending = false; + break; + case BlendMode.LAYER: + this._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA; + this._blendFactorDest = ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA; + this._pEnableBlending = true; + break; + case BlendMode.MULTIPLY: + this._blendFactorSource = ContextGLBlendFactor.ZERO; + this._blendFactorDest = ContextGLBlendFactor.SOURCE_COLOR; + this._pEnableBlending = true; + break; + case BlendMode.ADD: + this._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA; + this._blendFactorDest = ContextGLBlendFactor.ONE; + this._pEnableBlending = true; + break; + case BlendMode.ALPHA: + this._blendFactorSource = ContextGLBlendFactor.ZERO; + this._blendFactorDest = ContextGLBlendFactor.SOURCE_ALPHA; + this._pEnableBlending = true; + break; + default: + throw new ArgumentError("Unsupported blend mode!"); + } }; /** - * Retrieve a single component from a vertex temporary register that's still available. + * Sets the render state for the pass that is independent of the rendered object. This needs to be called before + * calling renderPass. Before activating a pass, the previously used pass needs to be deactivated. + * @param stage The Stage object which is currently used for rendering. + * @param camera The camera from which the scene is viewed. + * @private */ - ShaderRegisterCache.prototype.getFreeVertexSingleTemp = function () { - return this._vertexTempCache.requestFreeRegComponent(); + MaterialPassBase.prototype._iActivate = function (pass, stage, camera) { + var context = stage.context; + context.setDepthTest((this._writeDepth && !this._pEnableBlending), this._depthCompareMode); + if (this._pEnableBlending) + context.setBlendFactors(this._blendFactorSource, this._blendFactorDest); + context.activateMaterialPass(pass, stage, camera); }; /** - * Retrieve an available vertex attribute register + * Clears the render state for the pass. This needs to be called before activating another pass. + * @param stage The Stage used for rendering + * + * @private */ - ShaderRegisterCache.prototype.getFreeVertexAttribute = function () { - ++this._numUsedStreams; - return this._vertexAttributesCache.requestFreeVectorReg(); + MaterialPassBase.prototype._iDeactivate = function (pass, stage) { + stage.context.deactivateMaterialPass(pass, stage); + stage.context.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); // TODO : imeplement }; /** - * Retrieve an available texture register + * Marks the shader program as invalid, so it will be recompiled before the next render. + * + * @param updateMaterial Indicates whether the invalidation should be performed on the entire material. Should always pass "true" unless it's called from the material itself. */ - ShaderRegisterCache.prototype.getFreeTextureReg = function () { - ++this._numUsedTextures; - return this._textureCache.requestFreeVectorReg(); + MaterialPassBase.prototype._pInvalidatePass = function () { + var len = this._materialPassData.length; + for (var i = 0; i < len; i++) + this._materialPassData[i].invalidate(); + this.dispatchEvent(new Event(Event.CHANGE)); }; - Object.defineProperty(ShaderRegisterCache.prototype, "vertexConstantOffset", { - /** - * Indicates the start index from which to retrieve vertex constants. - */ - get: function () { - return this._vertexConstantOffset; - }, - set: function (vertexConstantOffset) { - this._vertexConstantOffset = vertexConstantOffset; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "vertexAttributesOffset", { - /** - * Indicates the start index from which to retrieve vertex attributes. - */ - get: function () { - return this._vertexAttributesOffset; - }, - set: function (value) { - this._vertexAttributesOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "varyingsOffset", { - /** - * Indicates the start index from which to retrieve varying registers. - */ - get: function () { - return this._varyingsOffset; - }, - set: function (value) { - this._varyingsOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "fragmentConstantOffset", { + Object.defineProperty(MaterialPassBase.prototype, "lightPicker", { /** - * Indicates the start index from which to retrieve fragment constants. + * The light picker used by the material to provide lights to the material if it supports lighting. + * + * @see away.materials.LightPickerBase + * @see away.materials.StaticLightPicker */ get: function () { - return this._fragmentConstantOffset; + return this._pLightPicker; }, set: function (value) { - this._fragmentConstantOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "fragmentOutputRegister", { - /** - * The fragment output register. - */ - get: function () { - return this._fragmentOutputRegister; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "numUsedVertexConstants", { - /** - * The amount of used vertex constant registers. - */ - get: function () { - return this._numUsedVertexConstants; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterCache.prototype, "numUsedFragmentConstants", { - /** - * The amount of used fragment constant registers. - */ - get: function () { - return this._numUsedFragmentConstants; + if (this._pLightPicker) + this._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate); + this._pLightPicker = value; + if (this._pLightPicker) + this._pLightPicker.addEventListener(Event.CHANGE, this._onLightsChangeDelegate); + this.pUpdateLights(); }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderRegisterCache.prototype, "numUsedStreams", { + /** + * Called when the light picker's configuration changes. + */ + MaterialPassBase.prototype.onLightsChange = function (event) { + this.pUpdateLights(); + }; + /** + * Implemented by subclasses if the pass uses lights to update the shader. + */ + MaterialPassBase.prototype.pUpdateLights = function () { + var numDirectionalLightsOld = this._pNumDirectionalLights; + var numPointLightsOld = this._pNumPointLights; + var numLightProbesOld = this._pNumLightProbes; + if (this._pLightPicker && (this._passMode & MaterialPassMode.LIGHTING)) { + this._pNumDirectionalLights = this.calculateNumDirectionalLights(this._pLightPicker.numDirectionalLights); + this._pNumPointLights = this.calculateNumPointLights(this._pLightPicker.numPointLights); + this._pNumLightProbes = this.calculateNumProbes(this._pLightPicker.numLightProbes); + if (this._includeCasters) { + this._pNumDirectionalLights += this._pLightPicker.numCastingDirectionalLights; + this._pNumPointLights += this._pLightPicker.numCastingPointLights; + } + } + else { + this._pNumDirectionalLights = 0; + this._pNumPointLights = 0; + this._pNumLightProbes = 0; + } + this._pNumLights = this._pNumDirectionalLights + this._pNumPointLights; + if (numDirectionalLightsOld != this._pNumDirectionalLights || numPointLightsOld != this._pNumPointLights || numLightProbesOld != this._pNumLightProbes) + this._pInvalidatePass(); + }; + MaterialPassBase.prototype._iIncludeDependencies = function (shaderObject) { + if (this._forceSeparateMVP) + shaderObject.globalPosDependencies++; + shaderObject.outputsNormals = this._pOutputsNormals(shaderObject); + shaderObject.outputsTangentNormals = shaderObject.outputsNormals && this._pOutputsTangentNormals(shaderObject); + shaderObject.usesTangentSpace = shaderObject.outputsTangentNormals && this._pUsesTangentSpace(shaderObject); + if (!shaderObject.usesTangentSpace) + shaderObject.addWorldSpaceDependencies(Boolean(this._passMode & MaterialPassMode.EFFECTS)); + }; + MaterialPassBase.prototype._iInitConstantData = function (shaderObject) { + }; + MaterialPassBase.prototype._iGetPreLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + MaterialPassBase.prototype._iGetPreLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + MaterialPassBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + MaterialPassBase.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + MaterialPassBase.prototype._iGetNormalVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + MaterialPassBase.prototype._iGetNormalFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + return ""; + }; + Object.defineProperty(MaterialPassBase.prototype, "iNumPointLights", { /** - * The amount of used vertex streams. + * The amount of point lights that need to be supported. */ get: function () { - return this._numUsedStreams; + return this._pNumPointLights; }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderRegisterCache.prototype, "numUsedTextures", { + Object.defineProperty(MaterialPassBase.prototype, "iNumDirectionalLights", { /** - * The amount of used texture slots. + * The amount of directional lights that need to be supported. */ get: function () { - return this._numUsedTextures; + return this._pNumDirectionalLights; }, enumerable: true, configurable: true }); - Object.defineProperty(ShaderRegisterCache.prototype, "numUsedVaryings", { + Object.defineProperty(MaterialPassBase.prototype, "iNumLightProbes", { /** - * The amount of used varying registers. + * The amount of light probes that need to be supported. */ get: function () { - return this._numUsedVaryings; + return this._pNumLightProbes; }, enumerable: true, configurable: true }); - return ShaderRegisterCache; -})(); -module.exports = ShaderRegisterCache; + /** + * Indicates whether or not normals are calculated at all. + */ + MaterialPassBase.prototype._pOutputsNormals = function (shaderObject) { + return false; + }; + /** + * Indicates whether or not normals are calculated in tangent space. + */ + MaterialPassBase.prototype._pOutputsTangentNormals = function (shaderObject) { + return false; + }; + /** + * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space + * dependencies exist. + */ + MaterialPassBase.prototype._pUsesTangentSpace = function (shaderObject) { + return false; + }; + /** + * Calculates the amount of directional lights this material will support. + * @param numDirectionalLights The maximum amount of directional lights to support. + * @return The amount of directional lights this material will support, bounded by the amount necessary. + */ + MaterialPassBase.prototype.calculateNumDirectionalLights = function (numDirectionalLights) { + return Math.min(numDirectionalLights - this._directionalLightsOffset, this._maxLights); + }; + /** + * Calculates the amount of point lights this material will support. + * @param numDirectionalLights The maximum amount of point lights to support. + * @return The amount of point lights this material will support, bounded by the amount necessary. + */ + MaterialPassBase.prototype.calculateNumPointLights = function (numPointLights) { + var numFree = this._maxLights - this._pNumDirectionalLights; + return Math.min(numPointLights - this._pointLightsOffset, numFree); + }; + /** + * Calculates the amount of light probes this material will support. + * @param numDirectionalLights The maximum amount of light probes to support. + * @return The amount of light probes this material will support, bounded by the amount necessary. + */ + MaterialPassBase.prototype.calculateNumProbes = function (numLightProbes) { + var numChannels = 0; + // if ((this._pSpecularLightSources & LightSources.PROBES) != 0) + // ++numChannels; + // + // if ((this._pDiffuseLightSources & LightSources.PROBES) != 0) + // ++numChannels; + // 4 channels available + return Math.min(numLightProbes - this._lightProbesOffset, (4 / numChannels) | 0); + }; + MaterialPassBase.prototype._iAddMaterialPassData = function (materialPassData) { + this._materialPassData.push(materialPassData); + return materialPassData; + }; + MaterialPassBase.prototype._iRemoveMaterialPassData = function (materialPassData) { + this._materialPassData.splice(this._materialPassData.indexOf(materialPassData), 1); + return materialPassData; + }; + return MaterialPassBase; +})(NamedAssetBase); +module.exports = MaterialPassBase; -},{"awayjs-stagegl/lib/materials/compilation/RegisterPool":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":undefined}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData":[function(require,module,exports){ -/** - * ShaderRegisterData contains the "named" registers, generated by the compiler and to be passed on to the methods. - */ -var ShaderRegisterData = (function () { - function ShaderRegisterData() { +},{"awayjs-core/lib/errors/ArgumentError":undefined,"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/library/NamedAssetBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-stagegl/lib/base/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/passes/MaterialPassMode":[function(require,module,exports){ +var MaterialPassMode = (function () { + function MaterialPassMode() { } - return ShaderRegisterData; + MaterialPassMode.EFFECTS = 0x01; + /** + * + */ + MaterialPassMode.LIGHTING = 0x02; + /** + * + */ + MaterialPassMode.SUPER_SHADER = 0x03; + return MaterialPassMode; })(); -module.exports = ShaderRegisterData; +module.exports = MaterialPassMode; -},{}],"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement":[function(require,module,exports){ +},{}],"awayjs-stagegl/lib/materials/passes/SkyboxPass":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); /** - * A single register element (an entire register or a single register's component) used by the RegisterPool. + * SkyboxPass provides a material pass exclusively used to render sky boxes from a cube texture. */ -var ShaderRegisterElement = (function () { +var SkyboxPass = (function (_super) { + __extends(SkyboxPass, _super); /** - * Creates a new ShaderRegisterElement object. + * Creates a new SkyboxPass object. * - * @param regName The name of the register. - * @param index The index of the register. - * @param component The register's component, if not the entire register is represented. + * @param material The material to which this pass belongs. */ - function ShaderRegisterElement(regName, index, component) { - if (component === void 0) { component = -1; } - this._component = component; - this._regName = regName; - this._index = index; - this._toStr = this._regName; - if (this._index >= 0) - this._toStr += this._index; - if (component > -1) - this._toStr += "." + ShaderRegisterElement.COMPONENTS[component]; + function SkyboxPass() { + _super.call(this); } - /** - * Converts the register or the components AGAL string representation. - */ - ShaderRegisterElement.prototype.toString = function () { - return this._toStr; + SkyboxPass.prototype._iIncludeDependencies = function (shaderObject) { + shaderObject.useMipmapping = false; }; - Object.defineProperty(ShaderRegisterElement.prototype, "regName", { - /** - * The register's name. - */ - get: function () { - return this._regName; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShaderRegisterElement.prototype, "index", { - /** - * The register's index. - */ - get: function () { - return this._index; - }, - enumerable: true, - configurable: true - }); - ShaderRegisterElement.COMPONENTS = ["x", "y", "z", "w"]; - return ShaderRegisterElement; -})(); -module.exports = ShaderRegisterElement; + return SkyboxPass; +})(MaterialPassBase); +module.exports = SkyboxPass; -},{}],"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod":[function(require,module,exports){ +},{"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined}],"awayjs-stagegl/lib/materials/passes/TriangleBasicPass":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** - * AmbientBasicMethod provides the default shading method for uniform ambient lighting. + * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, + * using material methods to define their appearance. */ -var AmbientBasicMethod = (function (_super) { - __extends(AmbientBasicMethod, _super); +var TriangleBasicPass = (function (_super) { + __extends(TriangleBasicPass, _super); /** - * Creates a new AmbientBasicMethod object. + * Creates a new CompiledPass object. + * + * @param material The material to which this pass belongs. */ - function AmbientBasicMethod() { + function TriangleBasicPass() { _super.call(this); - this._color = 0xffffff; - this._alpha = 1; - this._colorR = 1; - this._colorG = 1; - this._colorB = 1; - this._ambient = 1; + this._diffuseColor = 0xffffff; + this._diffuseR = 1; + this._diffuseG = 1; + this._diffuseB = 1; + this._diffuseA = 1; } - /** - * @inheritDoc - */ - AmbientBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { - methodVO.needsUV = Boolean(shaderObject.texture != null); - }; - /** - * @inheritDoc - */ - AmbientBasicMethod.prototype.iInitConstants = function (shaderObject, methodVO) { - if (!methodVO.needsUV) { - this._color = shaderObject.color; - this.updateColor(); - } - }; - Object.defineProperty(AmbientBasicMethod.prototype, "ambient", { + Object.defineProperty(TriangleBasicPass.prototype, "diffuseAlpha", { /** - * The strength of the ambient reflection of the surface. + * The alpha component of the diffuse reflection. */ get: function () { - return this._ambient; + return this._diffuseA; }, set: function (value) { - if (this._ambient == value) - return; - this._ambient = value; - this.updateColor(); + this._diffuseA = value; }, enumerable: true, configurable: true }); - Object.defineProperty(AmbientBasicMethod.prototype, "alpha", { + Object.defineProperty(TriangleBasicPass.prototype, "diffuseColor", { /** - * The alpha component of the surface. + * The color of the diffuse reflection when not using a texture. */ get: function () { - return this._alpha; + return this._diffuseColor; }, - set: function (value) { - if (this._alpha == value) - return; - this._alpha = value; - this.updateColor(); + set: function (diffuseColor) { + this._diffuseColor = diffuseColor; + this._diffuseR = ((this._diffuseColor >> 16) & 0xff) / 0xff; + this._diffuseG = ((this._diffuseColor >> 8) & 0xff) / 0xff; + this._diffuseB = (this._diffuseColor & 0xff) / 0xff; }, enumerable: true, configurable: true @@ -9740,2959 +9658,3041 @@ var AmbientBasicMethod = (function (_super) { /** * @inheritDoc */ - AmbientBasicMethod.prototype.copyFrom = function (method) { - var m = method; - var b = m; - }; - /** - * @inheritDoc - */ - AmbientBasicMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { + TriangleBasicPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { var code = ""; - var ambientInputRegister; - if (methodVO.needsUV) { - ambientInputRegister = registerCache.getFreeTextureReg(); - methodVO.texturesIndex = ambientInputRegister.index; - code += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, ambientInputRegister, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); + var targetReg = sharedReg.shadedTarget; + var diffuseInputReg; + if (shaderObject.texture != null) { + diffuseInputReg = regCache.getFreeTextureReg(); + this._texturesIndex = diffuseInputReg.index; + code += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedReg, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); if (shaderObject.alphaThreshold > 0) { - var cutOffReg = registerCache.getFreeFragmentConstant(); - methodVO.fragmentConstantsIndex = cutOffReg.index * 4; + var cutOffReg = regCache.getFreeFragmentConstant(); + this._fragmentConstantsIndex = cutOffReg.index * 4; code += "sub " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n" + "kil " + targetReg + ".w\n" + "add " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n"; } } else { - ambientInputRegister = registerCache.getFreeFragmentConstant(); - methodVO.fragmentConstantsIndex = ambientInputRegister.index * 4; - code += "mov " + targetReg + ", " + ambientInputRegister + "\n"; + diffuseInputReg = regCache.getFreeFragmentConstant(); + this._fragmentConstantsIndex = diffuseInputReg.index * 4; + code += "mov " + targetReg + ", " + diffuseInputReg + "\n"; } return code; }; + TriangleBasicPass.prototype._iIncludeDependencies = function (dependencyCounter) { + if (dependencyCounter.texture != null) + dependencyCounter.uvDependencies++; + }; /** * @inheritDoc */ - AmbientBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { - if (methodVO.needsUV) { - stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - stage.context.activateTexture(methodVO.texturesIndex, shaderObject.texture); + TriangleBasicPass.prototype._iActivate = function (pass, stage, camera) { + _super.prototype._iActivate.call(this, pass, stage, camera); + var shaderObject = pass.shaderObject; + if (shaderObject.texture != null) { + stage.context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); + stage.context.activateTexture(this._texturesIndex, shaderObject.texture); if (shaderObject.alphaThreshold > 0) - shaderObject.fragmentConstantData[methodVO.fragmentConstantsIndex] = shaderObject.alphaThreshold; + shaderObject.fragmentConstantData[this._fragmentConstantsIndex] = shaderObject.alphaThreshold; } else { - var index = methodVO.fragmentConstantsIndex; + var index = this._fragmentConstantsIndex; var data = shaderObject.fragmentConstantData; - data[index] = this._colorR; - data[index + 1] = this._colorG; - data[index + 2] = this._colorB; - data[index + 3] = this._alpha; + data[index] = this._diffuseR; + data[index + 1] = this._diffuseG; + data[index + 2] = this._diffuseB; + data[index + 3] = this._diffuseA; } }; - /** - * Updates the ambient color data used by the render state. - */ - AmbientBasicMethod.prototype.updateColor = function () { - this._colorR = ((this._color >> 16) & 0xff) / 0xff * this._ambient; - this._colorG = ((this._color >> 8) & 0xff) / 0xff * this._ambient; - this._colorB = (this._color & 0xff) / 0xff * this._ambient; - }; - return AmbientBasicMethod; -})(ShadingMethodBase); -module.exports = AmbientBasicMethod; + return TriangleBasicPass; +})(MaterialPassBase); +module.exports = TriangleBasicPass; -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod":[function(require,module,exports){ +},{"awayjs-stagegl/lib/base/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/base/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/base/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/TriangleMethodPass":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +var ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); +var MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); +var ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); +var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +var EffectColorTransformMethod = require("awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod"); +var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); /** - * DiffuseBasicMethod provides the default shading method for Lambert (dot3) diffuse lighting. + * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, + * using material methods to define their appearance. */ -var DiffuseBasicMethod = (function (_super) { - __extends(DiffuseBasicMethod, _super); +var TriangleMethodPass = (function (_super) { + __extends(TriangleMethodPass, _super); /** - * Creates a new DiffuseBasicMethod object. + * Creates a new CompiledPass object. + * + * @param material The material to which this pass belongs. */ - function DiffuseBasicMethod() { - _super.call(this); - this._multiply = true; - this._diffuseColor = 0xffffff; - this._ambientColor = 0xffffff; - this._diffuseR = 1; - this._diffuseG = 1; - this._diffuseB = 1; - this._ambientR = 1; - this._ambientG = 1; - this._ambientB = 1; + function TriangleMethodPass(passMode) { + var _this = this; + if (passMode === void 0) { passMode = 0x03; } + _super.call(this, passMode); + this._iMethodVOs = new Array(); + this._numEffectDependencies = 0; + this._onShaderInvalidatedDelegate = function (event) { return _this.onShaderInvalidated(event); }; } - DiffuseBasicMethod.prototype.iIsUsed = function (shaderObject) { - if (!shaderObject.numLights) - return false; - return true; - }; - Object.defineProperty(DiffuseBasicMethod.prototype, "multiply", { - /** - * Set internally if diffuse color component multiplies or replaces the ambient color - */ - get: function () { - return this._multiply; - }, - set: function (value) { - if (this._multiply == value) - return; - this._multiply = value; - this.iInvalidateShaderProgram(); - }, - enumerable: true, - configurable: true - }); - DiffuseBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { - methodVO.needsUV = this._pUseTexture; - methodVO.needsNormals = shaderObject.numLights > 0; + /** + * Factory method to create a concrete shader object for this pass. + * + * @param profile The compatibility profile used by the renderer. + */ + TriangleMethodPass.prototype.createShaderObject = function (profile) { + if (this._pLightPicker && (this.passMode & MaterialPassMode.LIGHTING)) + return new ShaderLightingObject(profile); + return new ShaderObjectBase(profile); }; /** - * Forces the creation of the texture. - * @param stage The Stage used by the renderer + * Initializes the unchanging constant data for this material. */ - DiffuseBasicMethod.prototype.generateMip = function (stage) { - if (this._pUseTexture) - stage.context.activateTexture(0, this._texture); + TriangleMethodPass.prototype._iInitConstantData = function (shaderObject) { + _super.prototype._iInitConstantData.call(this, shaderObject); + //Updates method constants if they have changed. + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) + this._iMethodVOs[i].method.iInitConstants(shaderObject, this._iMethodVOs[i]); }; - Object.defineProperty(DiffuseBasicMethod.prototype, "diffuseColor", { + Object.defineProperty(TriangleMethodPass.prototype, "colorTransform", { /** - * The color of the diffuse reflection when not using a texture. + * The ColorTransform object to transform the colour of the material with. Defaults to null. */ get: function () { - return this._diffuseColor; + return this.colorTransformMethod ? this.colorTransformMethod.colorTransform : null; }, set: function (value) { - if (this._diffuseColor == value) - return; - this._diffuseColor = value; - this.updateDiffuse(); + if (value) { + if (this.colorTransformMethod == null) + this.colorTransformMethod = new EffectColorTransformMethod(); + this.colorTransformMethod.colorTransform = value; + } + else if (!value) { + if (this.colorTransformMethod) + this.colorTransformMethod = null; + } }, enumerable: true, configurable: true }); - Object.defineProperty(DiffuseBasicMethod.prototype, "ambientColor", { + Object.defineProperty(TriangleMethodPass.prototype, "colorTransformMethod", { /** - * The color of the ambient reflection + * The EffectColorTransformMethod object to transform the colour of the material with. Defaults to null. */ get: function () { - return this._ambientColor; + return this._iColorTransformMethodVO ? this._iColorTransformMethodVO.method : null; }, set: function (value) { - if (this._ambientColor == value) + if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.method == value) return; - this._ambientColor = value; - this.updateAmbient(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DiffuseBasicMethod.prototype, "texture", { - /** - * The bitmapData to use to define the diffuse reflection color per texel. - */ - get: function () { - return this._texture; - }, - set: function (value) { - var b = (value != null); - if (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) - this.iInvalidateShaderProgram(); - this._pUseTexture = b; - this._texture = value; + if (this._iColorTransformMethodVO) { + this._removeDependency(this._iColorTransformMethodVO); + this._iColorTransformMethodVO = null; + } + if (value) { + this._iColorTransformMethodVO = new MethodVO(value); + this._addDependency(this._iColorTransformMethodVO); + } }, enumerable: true, configurable: true }); - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.dispose = function () { - this._texture = null; - }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.copyFrom = function (method) { - var diff = method; - this.texture = diff.texture; - this.multiply = diff.multiply; - this.diffuseColor = diff.diffuseColor; - this.ambientColor = diff.ambientColor; - }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.iCleanCompilationData = function () { - _super.prototype.iCleanCompilationData.call(this); - this._pTotalLightColorReg = null; - this._pDiffuseInputRegister = null; - }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { - var code = ""; - this._pIsFirstLight = true; - this._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(this._pTotalLightColorReg, 1); - return code; - }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { - var code = ""; - var t; - // write in temporary if not first light, so we can add to total diffuse colour - if (this._pIsFirstLight) { - t = this._pTotalLightColorReg; - } - else { - t = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(t, 1); - } - code += "dp3 " + t + ".x, " + lightDirReg + ", " + sharedRegisters.normalFragment + "\n" + "max " + t + ".w, " + t + ".x, " + sharedRegisters.commons + ".y\n"; - if (shaderObject.usesLightFallOff) - code += "mul " + t + ".w, " + t + ".w, " + lightDirReg + ".w\n"; - if (this._iModulateMethod != null) - code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); - code += "mul " + t + ", " + t + ".w, " + lightColReg + "\n"; - if (!this._pIsFirstLight) { - code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; - registerCache.removeFragmentTempUsage(t); - } - this._pIsFirstLight = false; - return code; - }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { - var code = ""; - var t; - // write in temporary if not first light, so we can add to total diffuse colour - if (this._pIsFirstLight) { - t = this._pTotalLightColorReg; - } - else { - t = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(t, 1); - } - code += "tex " + t + ", " + sharedRegisters.normalFragment + ", " + cubeMapReg + " \n" + "mul " + t + ".xyz, " + t + ".xyz, " + weightRegister + "\n"; - if (this._iModulateMethod != null) - code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); - if (!this._pIsFirstLight) { - code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; - registerCache.removeFragmentTempUsage(t); - } - this._pIsFirstLight = false; - return code; + TriangleMethodPass.prototype._removeDependency = function (methodVO, effectsDependency) { + if (effectsDependency === void 0) { effectsDependency = false; } + var index = this._iMethodVOs.indexOf(methodVO); + if (!effectsDependency) + this._numEffectDependencies--; + methodVO.method.removeEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate); + this._iMethodVOs.splice(index, 1); + this._pInvalidatePass(); }; - /** - * @inheritDoc - */ - DiffuseBasicMethod.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - var code = ""; - var albedo; - var cutOffReg; - // incorporate input from ambient - if (sharedRegisters.shadowTarget) - code += this.pApplyShadow(shaderObject, methodVO, registerCache, sharedRegisters); - albedo = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(albedo, 1); - var ambientColorRegister = registerCache.getFreeFragmentConstant(); - methodVO.fragmentConstantsIndex = ambientColorRegister.index * 4; - if (this._pUseTexture) { - this._pDiffuseInputRegister = registerCache.getFreeTextureReg(); - methodVO.texturesIndex = this._pDiffuseInputRegister.index; - code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, this._pDiffuseInputRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); - } - else { - this._pDiffuseInputRegister = registerCache.getFreeFragmentConstant(); - code += "mov " + albedo + ", " + this._pDiffuseInputRegister + "\n"; - } - code += "sat " + this._pTotalLightColorReg + ", " + this._pTotalLightColorReg + "\n" + "mul " + albedo + ".xyz, " + albedo + ", " + this._pTotalLightColorReg + "\n"; - if (this._multiply) { - code += "add " + albedo + ".xyz, " + albedo + ", " + ambientColorRegister + "\n" + "mul " + targetReg + ".xyz, " + targetReg + ", " + albedo + "\n"; + TriangleMethodPass.prototype._addDependency = function (methodVO, effectsDependency, index) { + if (effectsDependency === void 0) { effectsDependency = false; } + if (index === void 0) { index = -1; } + methodVO.method.addEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate); + if (effectsDependency) { + if (index != -1) + this._iMethodVOs.splice(index + this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO); + else + this._iMethodVOs.push(methodVO); + this._numEffectDependencies++; } else { - code += "mul " + targetReg + ".xyz, " + targetReg + ", " + ambientColorRegister + "\n" + "mul " + this._pTotalLightColorReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n" + "sub " + targetReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n" + "add " + targetReg + ".xyz, " + targetReg + ", " + albedo + "\n"; + this._iMethodVOs.splice(this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO); } - registerCache.removeFragmentTempUsage(this._pTotalLightColorReg); - registerCache.removeFragmentTempUsage(albedo); - return code; + this._pInvalidatePass(); }; /** - * Generate the code that applies the calculated shadow to the diffuse light - * @param methodVO The MethodVO object for which the compilation is currently happening. - * @param regCache The register cache the compiler is currently using for the register management. + * Appends an "effect" shading method to the shader. Effect methods are those that do not influence the lighting + * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the + * methods added prior. */ - DiffuseBasicMethod.prototype.pApplyShadow = function (shaderObject, methodVO, regCache, sharedRegisters) { - return "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + sharedRegisters.shadowTarget + ".w\n"; + TriangleMethodPass.prototype.addEffectMethod = function (method) { + this._addDependency(new MethodVO(method), true); }; + Object.defineProperty(TriangleMethodPass.prototype, "numEffectMethods", { + /** + * The number of "effect" methods added to the material. + */ + get: function () { + return this._numEffectDependencies; + }, + enumerable: true, + configurable: true + }); /** - * @inheritDoc + * Queries whether a given effects method was added to the material. + * + * @param method The method to be queried. + * @return true if the method was added to the material, false otherwise. */ - DiffuseBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { - if (this._pUseTexture) { - stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - stage.context.activateTexture(methodVO.texturesIndex, this._texture); - } - else { - var index = methodVO.fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index + 4] = this._diffuseR; - data[index + 5] = this._diffuseG; - data[index + 6] = this._diffuseB; - data[index + 7] = 1; - } + TriangleMethodPass.prototype.hasEffectMethod = function (method) { + return this.getDependencyForMethod(method) != null; }; /** - * Updates the diffuse color data used by the render state. + * Returns the method added at the given index. + * @param index The index of the method to retrieve. + * @return The method at the given index. */ - DiffuseBasicMethod.prototype.updateDiffuse = function () { - this._diffuseR = ((this._diffuseColor >> 16) & 0xff) / 0xff; - this._diffuseG = ((this._diffuseColor >> 8) & 0xff) / 0xff; - this._diffuseB = (this._diffuseColor & 0xff) / 0xff; + TriangleMethodPass.prototype.getEffectMethodAt = function (index) { + if (index < 0 || index > this._numEffectDependencies - 1) + return null; + return this._iMethodVOs[index + this._iMethodVOs.length - this._numEffectDependencies].method; }; /** - * Updates the ambient color data used by the render state. + * Adds an effect method at the specified index amongst the methods already added to the material. Effect + * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines, + * etc. The method will be applied to the result of the methods with a lower index. */ - DiffuseBasicMethod.prototype.updateAmbient = function () { - this._ambientR = ((this._ambientColor >> 16) & 0xff) / 0xff; - this._ambientG = ((this._ambientColor >> 8) & 0xff) / 0xff; - this._ambientB = (this._ambientColor & 0xff) / 0xff; + TriangleMethodPass.prototype.addEffectMethodAt = function (method, index) { + this._addDependency(new MethodVO(method), true, index); }; /** - * @inheritDoc + * Removes an effect method from the material. + * @param method The method to be removed. */ - DiffuseBasicMethod.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { - //TODO move this to Activate (ambientR/G/B currently calc'd in render state) - if (shaderObject.numLights > 0) { - var index = methodVO.fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = shaderObject.ambientR * this._ambientR; - data[index + 1] = shaderObject.ambientG * this._ambientG; - data[index + 2] = shaderObject.ambientB * this._ambientB; - data[index + 3] = 1; - } + TriangleMethodPass.prototype.removeEffectMethod = function (method) { + var methodVO = this.getDependencyForMethod(method); + if (methodVO != null) + this._removeDependency(methodVO, true); }; - return DiffuseBasicMethod; -})(LightingMethodBase); -module.exports = DiffuseBasicMethod; - - -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/LightingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var EffectMethodBase = require("awayjs-stagegl/lib/materials/methods/EffectMethodBase"); -/** - * EffectColorTransformMethod provides a shading method that changes the colour of a material analogous to a - * ColorTransform object. - */ -var EffectColorTransformMethod = (function (_super) { - __extends(EffectColorTransformMethod, _super); - /** - * Creates a new EffectColorTransformMethod. - */ - function EffectColorTransformMethod() { - _super.call(this); - } - Object.defineProperty(EffectColorTransformMethod.prototype, "colorTransform", { + TriangleMethodPass.prototype.getDependencyForMethod = function (method) { + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) + if (this._iMethodVOs[i].method == method) + return this._iMethodVOs[i]; + return null; + }; + Object.defineProperty(TriangleMethodPass.prototype, "normalMethod", { /** - * The ColorTransform object to transform the colour of the material with. + * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod. */ get: function () { - return this._colorTransform; + return this._iNormalMethodVO ? this._iNormalMethodVO.method : null; }, set: function (value) { - this._colorTransform = value; + if (this._iNormalMethodVO && this._iNormalMethodVO.method == value) + return; + if (this._iNormalMethodVO) { + this._removeDependency(this._iNormalMethodVO); + this._iNormalMethodVO = null; + } + if (value) { + this._iNormalMethodVO = new MethodVO(value); + this._addDependency(this._iNormalMethodVO); + } }, enumerable: true, configurable: true }); - /** - * @inheritDoc - */ - EffectColorTransformMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - var code = ""; - var colorMultReg = registerCache.getFreeFragmentConstant(); - var colorOffsReg = registerCache.getFreeFragmentConstant(); - methodVO.fragmentConstantsIndex = colorMultReg.index * 4; - //TODO: AGAL <> GLSL - code += "mul " + targetReg + ", " + targetReg + ", " + colorMultReg + "\n" + "add " + targetReg + ", " + targetReg + ", " + colorOffsReg + "\n"; - return code; - }; - /** - * @inheritDoc - */ - EffectColorTransformMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { - var inv = 1 / 0xff; - var index = methodVO.fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = this._colorTransform.redMultiplier; - data[index + 1] = this._colorTransform.greenMultiplier; - data[index + 2] = this._colorTransform.blueMultiplier; - data[index + 3] = this._colorTransform.alphaMultiplier; - data[index + 4] = this._colorTransform.redOffset * inv; - data[index + 5] = this._colorTransform.greenOffset * inv; - data[index + 6] = this._colorTransform.blueOffset * inv; - data[index + 7] = this._colorTransform.alphaOffset * inv; - }; - return EffectColorTransformMethod; -})(EffectMethodBase); -module.exports = EffectColorTransformMethod; - - -},{"awayjs-stagegl/lib/materials/methods/EffectMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/EffectMethodBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var AssetType = require("awayjs-core/lib/library/AssetType"); -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); -/** - * EffectMethodBase forms an abstract base class for shader methods that are not dependent on light sources, - * and are in essence post-process effects on the materials. - */ -var EffectMethodBase = (function (_super) { - __extends(EffectMethodBase, _super); - function EffectMethodBase() { - _super.call(this); - } - Object.defineProperty(EffectMethodBase.prototype, "assetType", { + Object.defineProperty(TriangleMethodPass.prototype, "ambientMethod", { /** - * @inheritDoc + * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod. */ get: function () { - return AssetType.EFFECTS_METHOD; + return this._iAmbientMethodVO ? this._iAmbientMethodVO.method : null; + }, + set: function (value) { + if (this._iAmbientMethodVO && this._iAmbientMethodVO.method == value) + return; + if (this._iAmbientMethodVO) { + this._removeDependency(this._iAmbientMethodVO); + this._iAmbientMethodVO = null; + } + if (value) { + this._iAmbientMethodVO = new MethodVO(value); + this._addDependency(this._iAmbientMethodVO); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodPass.prototype, "shadowMethod", { + /** + * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null. + */ + get: function () { + return this._iShadowMethodVO ? this._iShadowMethodVO.method : null; + }, + set: function (value) { + if (this._iShadowMethodVO && this._iShadowMethodVO.method == value) + return; + if (this._iShadowMethodVO) { + this._removeDependency(this._iShadowMethodVO); + this._iShadowMethodVO = null; + } + if (value) { + this._iShadowMethodVO = new MethodVO(value); + this._addDependency(this._iShadowMethodVO); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodPass.prototype, "diffuseMethod", { + /** + * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod. + */ + get: function () { + return this._iDiffuseMethodVO ? this._iDiffuseMethodVO.method : null; + }, + set: function (value) { + if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.method == value) + return; + if (this._iDiffuseMethodVO) { + this._removeDependency(this._iDiffuseMethodVO); + this._iDiffuseMethodVO = null; + } + if (value) { + this._iDiffuseMethodVO = new MethodVO(value); + this._addDependency(this._iDiffuseMethodVO); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TriangleMethodPass.prototype, "specularMethod", { + /** + * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod. + */ + get: function () { + return this._iSpecularMethodVO ? this._iSpecularMethodVO.method : null; + }, + set: function (value) { + if (this._iSpecularMethodVO && this._iSpecularMethodVO.method == value) + return; + if (this._iSpecularMethodVO) { + this._removeDependency(this._iSpecularMethodVO); + this._iSpecularMethodVO = null; + } + if (value) { + this._iSpecularMethodVO = new MethodVO(value); + this._addDependency(this._iSpecularMethodVO); + } }, enumerable: true, configurable: true }); /** - * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register. - * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. - * @param regCache The register cache used during the compilation. - * @param targetReg The register that will be containing the method's output. - * @private + * @inheritDoc */ - EffectMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - throw new AbstractMethodError(); - return ""; + TriangleMethodPass.prototype.dispose = function () { + _super.prototype.dispose.call(this); + while (this._iMethodVOs.length) + this._removeDependency(this._iMethodVOs[0]); + this._iMethodVOs = null; }; - return EffectMethodBase; -})(ShadingMethodBase); -module.exports = EffectMethodBase; - - -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/library/AssetType":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/LightingMethodBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); -/** - * LightingMethodBase provides an abstract base method for shading methods that uses lights. - * Used for diffuse and specular shaders only. - */ -var LightingMethodBase = (function (_super) { - __extends(LightingMethodBase, _super); - /** - * Creates a new LightingMethodBase. - */ - function LightingMethodBase() { - _super.call(this); - } /** - * Get the fragment shader code that will be needed before any per-light code is added. - * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. - * @param regCache The register cache used during the compilation. - * @private + * Called when any method's shader code is invalidated. */ - LightingMethodBase.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { - return ""; + TriangleMethodPass.prototype.onShaderInvalidated = function (event) { + this._pInvalidatePass(); }; + // RENDER LOOP /** - * Get the fragment shader code that will generate the code relevant to a single light. - * - * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. - * @param lightDirReg The register containing the light direction vector. - * @param lightColReg The register containing the light colour. - * @param regCache The register cache used during the compilation. + * @inheritDoc */ - LightingMethodBase.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { - return ""; + TriangleMethodPass.prototype._iActivate = function (pass, stage, camera) { + _super.prototype._iActivate.call(this, pass, stage, camera); + var methodVO; + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod) + methodVO.method.iActivate(pass.shaderObject, methodVO, stage); + } }; /** - * Get the fragment shader code that will generate the code relevant to a single light probe object. * - * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. - * @param cubeMapReg The register containing the cube map for the current probe - * @param weightRegister A string representation of the register + component containing the current weight - * @param regCache The register cache providing any necessary registers to the shader - */ - LightingMethodBase.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { - return ""; - }; - /** - * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register. * - * @param methodVO The MethodVO object containing the method data for the currently compiled material pass. - * @param regCache The register cache used during the compilation. - * @param targetReg The register containing the final shading output. - * @private - */ - LightingMethodBase.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - return ""; - }; - return LightingMethodBase; -})(ShadingMethodBase); -module.exports = LightingMethodBase; - - -},{"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/NormalBasicMethod":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); -/** - * NormalBasicMethod is the default method for standard tangent-space normal mapping. - */ -var NormalBasicMethod = (function (_super) { - __extends(NormalBasicMethod, _super); - /** - * Creates a new NormalBasicMethod object. + * @param renderable + * @param stage + * @param camera */ - function NormalBasicMethod() { - _super.call(this); - } - NormalBasicMethod.prototype.iIsUsed = function (shaderObject) { - if (!this._useTexture || !shaderObject.normalDependencies) - return false; - return true; + TriangleMethodPass.prototype.setRenderState = function (pass, renderable, stage, camera, viewProjection) { + _super.prototype.setRenderState.call(this, pass, renderable, stage, camera, viewProjection); + var methodVO; + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod) + methodVO.method.iSetRenderState(pass.shaderObject, methodVO, renderable, stage, camera); + } }; /** * @inheritDoc */ - NormalBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { - methodVO.needsUV = this._useTexture; + TriangleMethodPass.prototype._iDeactivate = function (pass, stage) { + _super.prototype._iDeactivate.call(this, pass, stage); + var methodVO; + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod) + methodVO.method.iDeactivate(pass.shaderObject, methodVO, stage); + } }; - /** - * Indicates whether or not this method outputs normals in tangent space. Override for object-space normals. - */ - NormalBasicMethod.prototype.iOutputsTangentNormals = function () { - return true; + TriangleMethodPass.prototype._iIncludeDependencies = function (shaderObject) { + var i; + var len = this._iMethodVOs.length; + for (i = 0; i < len; ++i) + this.setupAndCountDependencies(shaderObject, this._iMethodVOs[i]); + for (i = 0; i < len; ++i) + this._iMethodVOs[i].useMethod = this._iMethodVOs[i].method.iIsUsed(shaderObject); + _super.prototype._iIncludeDependencies.call(this, shaderObject); }; /** - * @inheritDoc + * Counts the dependencies for a given method. + * @param method The method to count the dependencies for. + * @param methodVO The method's data for this material. */ - NormalBasicMethod.prototype.copyFrom = function (method) { - var s = method; - var bnm = method; - if (bnm.normalMap != null) - this.normalMap = bnm.normalMap; + TriangleMethodPass.prototype.setupAndCountDependencies = function (shaderObject, methodVO) { + methodVO.reset(); + methodVO.method.iInitVO(shaderObject, methodVO); + if (methodVO.needsProjection) + shaderObject.projectionDependencies++; + if (methodVO.needsGlobalVertexPos) { + shaderObject.globalPosDependencies++; + if (methodVO.needsGlobalFragmentPos) + shaderObject.usesGlobalPosFragment = true; + } + else if (methodVO.needsGlobalFragmentPos) { + shaderObject.globalPosDependencies++; + shaderObject.usesGlobalPosFragment = true; + } + if (methodVO.needsNormals) + shaderObject.normalDependencies++; + if (methodVO.needsTangents) + shaderObject.tangentDependencies++; + if (methodVO.needsView) + shaderObject.viewDirDependencies++; + if (methodVO.needsUV) + shaderObject.uvDependencies++; + if (methodVO.needsSecondaryUV) + shaderObject.secondaryUVDependencies++; }; - Object.defineProperty(NormalBasicMethod.prototype, "normalMap", { - /** - * The texture containing the normals per pixel. - */ - get: function () { - return this._texture; - }, - set: function (value) { - var b = (value != null); - if (b != this._useTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) - this.iInvalidateShaderProgram(); - this._useTexture = b; - this._texture = value; - }, - enumerable: true, - configurable: true - }); - /** - * @inheritDoc - */ - NormalBasicMethod.prototype.iCleanCompilationData = function () { - _super.prototype.iCleanCompilationData.call(this); - this._pNormalTextureRegister = null; + TriangleMethodPass.prototype._iGetPreLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + if (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) + code += this._iAmbientMethodVO.method.iGetVertexCode(shaderObject, this._iAmbientMethodVO, registerCache, sharedRegisters); + if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) + code += this._iDiffuseMethodVO.method.iGetVertexCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters); + if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) + code += this._iSpecularMethodVO.method.iGetVertexCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters); + return code; + }; + TriangleMethodPass.prototype._iGetPreLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + if (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) { + code += this._iAmbientMethodVO.method.iGetFragmentCode(shaderObject, this._iAmbientMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); + if (this._iAmbientMethodVO.needsNormals) + registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); + if (this._iAmbientMethodVO.needsView) + registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + } + if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) + code += this._iDiffuseMethodVO.method.iGetFragmentPreLightingCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters); + if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) + code += this._iSpecularMethodVO.method.iGetFragmentPreLightingCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters); + return code; + }; + TriangleMethodPass.prototype._iGetPerLightDiffuseFragmentCode = function (shaderObject, lightDirReg, diffuseColorReg, registerCache, sharedRegisters) { + return this._iDiffuseMethodVO.method.iGetFragmentCodePerLight(shaderObject, this._iDiffuseMethodVO, lightDirReg, diffuseColorReg, registerCache, sharedRegisters); + }; + TriangleMethodPass.prototype._iGetPerLightSpecularFragmentCode = function (shaderObject, lightDirReg, specularColorReg, registerCache, sharedRegisters) { + return this._iSpecularMethodVO.method.iGetFragmentCodePerLight(shaderObject, this._iSpecularMethodVO, lightDirReg, specularColorReg, registerCache, sharedRegisters); + }; + TriangleMethodPass.prototype._iGetPerProbeDiffuseFragmentCode = function (shaderObject, texReg, weightReg, registerCache, sharedRegisters) { + return this._iDiffuseMethodVO.method.iGetFragmentCodePerProbe(shaderObject, this._iDiffuseMethodVO, texReg, weightReg, registerCache, sharedRegisters); + }; + TriangleMethodPass.prototype._iGetPerProbeSpecularFragmentCode = function (shaderObject, texReg, weightReg, registerCache, sharedRegisters) { + return this._iSpecularMethodVO.method.iGetFragmentCodePerProbe(shaderObject, this._iSpecularMethodVO, texReg, weightReg, registerCache, sharedRegisters); + }; + TriangleMethodPass.prototype._iGetPostLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + if (this._iShadowMethodVO) + code += this._iShadowMethodVO.method.iGetVertexCode(shaderObject, this._iShadowMethodVO, registerCache, sharedRegisters); + return code; }; - /** - * @inheritDoc - */ - NormalBasicMethod.prototype.dispose = function () { - if (this._texture) - this._texture = null; + TriangleMethodPass.prototype._iGetPostLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + var code = ""; + if (shaderObject.useAlphaPremultiplied && this._pEnableBlending) { + code += "add " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.commons + ".z\n" + "div " + sharedRegisters.shadedTarget + ".xyz, " + sharedRegisters.shadedTarget + ", " + sharedRegisters.shadedTarget + ".w\n" + "sub " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.commons + ".z\n" + "sat " + sharedRegisters.shadedTarget + ".xyz, " + sharedRegisters.shadedTarget + "\n"; + } + if (this._iShadowMethodVO) + code += this._iShadowMethodVO.method.iGetFragmentCode(shaderObject, this._iShadowMethodVO, sharedRegisters.shadowTarget, registerCache, sharedRegisters); + if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) { + code += this._iDiffuseMethodVO.method.iGetFragmentPostLightingCode(shaderObject, this._iDiffuseMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); + // resolve other dependencies as well? + if (this._iDiffuseMethodVO.needsNormals) + registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); + if (this._iDiffuseMethodVO.needsView) + registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + } + if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) { + code += this._iSpecularMethodVO.method.iGetFragmentPostLightingCode(shaderObject, this._iSpecularMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); + if (this._iSpecularMethodVO.needsNormals) + registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); + if (this._iSpecularMethodVO.needsView) + registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + } + if (this._iShadowMethodVO) + registerCache.removeFragmentTempUsage(sharedRegisters.shadowTarget); + return code; }; /** - * @inheritDoc + * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space + * dependencies exist. */ - NormalBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { - if (methodVO.texturesIndex >= 0) { - stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - stage.context.activateTexture(methodVO.texturesIndex, this._texture); + TriangleMethodPass.prototype._pUsesTangentSpace = function (shaderObject) { + if (shaderObject.usesProbes) + return false; + var methodVO; + var len = this._iMethodVOs.length; + for (var i = 0; i < len; ++i) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod && !methodVO.method.iUsesTangentSpace()) + return false; } + return true; }; /** - * @inheritDoc + * Indicates whether or not normals are output in tangent space. */ - NormalBasicMethod.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - this._pNormalTextureRegister = registerCache.getFreeTextureReg(); - methodVO.texturesIndex = this._pNormalTextureRegister.index; - return ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, this._pNormalTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping) + "sub " + targetReg + ".xyz, " + targetReg + ".xyz, " + sharedRegisters.commons + ".xxx\n" + "nrm " + targetReg + ".xyz, " + targetReg + "\n"; + TriangleMethodPass.prototype._pOutputsTangentNormals = function (shaderObject) { + return this._iNormalMethodVO.method.iOutputsTangentNormals(); }; - return NormalBasicMethod; -})(ShadingMethodBase); -module.exports = NormalBasicMethod; - - -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); -var ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); -/** - * ShadingMethodBase provides an abstract base method for shading methods, used by compiled passes to compile - * the final shading program. - */ -var ShadingMethodBase = (function (_super) { - __extends(ShadingMethodBase, _super); /** - * Create a new ShadingMethodBase object. + * Indicates whether or not normals are output by the pass. */ - function ShadingMethodBase() { - _super.call(this); - } - ShadingMethodBase.prototype.iIsUsed = function (shaderObject) { - return true; + TriangleMethodPass.prototype._pOutputsNormals = function (shaderObject) { + return this._iNormalMethodVO && this._iNormalMethodVO.useMethod; }; - /** - * Initializes the properties for a MethodVO, including register and texture indices. - * - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * - * @internal - */ - ShadingMethodBase.prototype.iInitVO = function (shaderObject, methodVO) { + TriangleMethodPass.prototype._iGetNormalVertexCode = function (shaderObject, registerCache, sharedRegisters) { + return this._iNormalMethodVO.method.iGetVertexCode(shaderObject, this._iNormalMethodVO, registerCache, sharedRegisters); }; - /** - * Initializes unchanging shader constants using the data from a MethodVO. - * - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * - * @internal - */ - ShadingMethodBase.prototype.iInitConstants = function (shaderObject, methodVO) { + TriangleMethodPass.prototype._iGetNormalFragmentCode = function (shaderObject, registerCache, sharedRegisters) { + var code = this._iNormalMethodVO.method.iGetFragmentCode(shaderObject, this._iNormalMethodVO, sharedRegisters.normalFragment, registerCache, sharedRegisters); + if (this._iNormalMethodVO.needsView) + registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + if (this._iNormalMethodVO.needsGlobalFragmentPos || this._iNormalMethodVO.needsGlobalVertexPos) + registerCache.removeVertexTempUsage(sharedRegisters.globalPositionVertex); + return code; }; /** - * Indicates whether or not this method expects normals in tangent space. Override for object-space normals. + * @inheritDoc */ - ShadingMethodBase.prototype.iUsesTangentSpace = function () { - return true; + TriangleMethodPass.prototype._iGetVertexCode = function (shaderObject, regCache, sharedReg) { + var code = ""; + var methodVO; + var len = this._iMethodVOs.length; + for (var i = len - this._numEffectDependencies; i < len; i++) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod) { + code += methodVO.method.iGetVertexCode(shaderObject, methodVO, regCache, sharedReg); + if (methodVO.needsGlobalVertexPos || methodVO.needsGlobalFragmentPos) + regCache.removeVertexTempUsage(sharedReg.globalPositionVertex); + } + } + if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod) + code += this._iColorTransformMethodVO.method.iGetVertexCode(shaderObject, this._iColorTransformMethodVO, regCache, sharedReg); + return code; }; - Object.defineProperty(ShadingMethodBase.prototype, "passes", { - /** - * Any passes required that render to a texture used by this method. - */ - get: function () { - return this._passes; - }, - enumerable: true, - configurable: true - }); /** - * Cleans up any resources used by the current object. + * @inheritDoc */ - ShadingMethodBase.prototype.dispose = function () { + TriangleMethodPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { + var code = ""; + var alphaReg; + if (this.preserveAlpha && this._numEffectDependencies > 0) { + alphaReg = regCache.getFreeFragmentSingleTemp(); + regCache.addFragmentTempUsages(alphaReg, 1); + code += "mov " + alphaReg + ", " + sharedReg.shadedTarget + ".w\n"; + } + var methodVO; + var len = this._iMethodVOs.length; + for (var i = len - this._numEffectDependencies; i < len; i++) { + methodVO = this._iMethodVOs[i]; + if (methodVO.useMethod) { + code += methodVO.method.iGetFragmentCode(shaderObject, methodVO, sharedReg.shadedTarget, regCache, sharedReg); + if (methodVO.needsNormals) + regCache.removeFragmentTempUsage(sharedReg.normalFragment); + if (methodVO.needsView) + regCache.removeFragmentTempUsage(sharedReg.viewDirFragment); + } + } + if (this.preserveAlpha && this._numEffectDependencies > 0) { + code += "mov " + sharedReg.shadedTarget + ".w, " + alphaReg + "\n"; + regCache.removeFragmentTempUsage(alphaReg); + } + if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod) + code += this._iColorTransformMethodVO.method.iGetFragmentCode(shaderObject, this._iColorTransformMethodVO, sharedReg.shadedTarget, regCache, sharedReg); + return code; }; /** - * Resets the compilation state of the method. - * - * @internal + * Indicates whether the shader uses any shadows. */ - ShadingMethodBase.prototype.iReset = function () { - this.iCleanCompilationData(); + TriangleMethodPass.prototype._iUsesShadows = function () { + return Boolean(this._iShadowMethodVO || this.lightPicker.castingDirectionalLights.length > 0 || this.lightPicker.castingPointLights.length > 0); }; /** - * Resets the method's state for compilation. - * - * @internal + * Indicates whether the shader uses any specular component. */ - ShadingMethodBase.prototype.iCleanCompilationData = function () { + TriangleMethodPass.prototype._iUsesSpecular = function () { + return Boolean(this._iSpecularMethodVO); }; - /** - * Get the vertex shader code for this method. - * @param vo The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. - * - * @internal - */ - ShadingMethodBase.prototype.iGetVertexCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { - return ""; + return TriangleMethodPass; +})(MaterialPassBase); +module.exports = TriangleMethodPass; + + +},{"awayjs-stagegl/lib/events/ShadingMethodEvent":undefined,"awayjs-stagegl/lib/materials/compilation/MethodVO":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined,"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager":[function(require,module,exports){ +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var AssetType = require("awayjs-core/lib/library/AssetType"); +var BitmapTexture = require("awayjs-core/lib/textures/BitmapTexture"); +var LineBasicMaterial = require("awayjs-stagegl/lib/materials/LineBasicMaterial"); +var TriangleBasicMaterial = require("awayjs-stagegl/lib/materials/TriangleBasicMaterial"); +var DefaultMaterialManager = (function () { + function DefaultMaterialManager() { + } + DefaultMaterialManager.getDefaultMaterial = function (materialOwner) { + if (materialOwner === void 0) { materialOwner = null; } + if (materialOwner != null && materialOwner.assetType == AssetType.LINE_SUB_MESH) { + if (!DefaultMaterialManager._defaultLineMaterial) + DefaultMaterialManager.createDefaultLineMaterial(); + return DefaultMaterialManager._defaultLineMaterial; + } + else { + if (!DefaultMaterialManager._defaultTriangleMaterial) + DefaultMaterialManager.createDefaultTriangleMaterial(); + return DefaultMaterialManager._defaultTriangleMaterial; + } }; - /** - * @inheritDoc - */ - ShadingMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - return null; + DefaultMaterialManager.getDefaultTexture = function (materialOwner) { + if (materialOwner === void 0) { materialOwner = null; } + if (!DefaultMaterialManager._defaultTexture) + DefaultMaterialManager.createDefaultTexture(); + return DefaultMaterialManager._defaultTexture; }; - /** - * Sets the render state for this method. - * - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param stage The Stage object currently used for rendering. - * - * @internal - */ - ShadingMethodBase.prototype.iActivate = function (shaderObject, methodVO, stage) { + DefaultMaterialManager.createDefaultTexture = function () { + DefaultMaterialManager._defaultBitmapData = DefaultMaterialManager.createCheckeredBitmapData(); + DefaultMaterialManager._defaultTexture = new BitmapTexture(DefaultMaterialManager._defaultBitmapData, true); + DefaultMaterialManager._defaultTexture.name = "defaultTexture"; + }; + DefaultMaterialManager.createCheckeredBitmapData = function () { + var b = new BitmapData(8, 8, false, 0x000000); + //create chekerboard + var i, j; + for (i = 0; i < 8; i++) { + for (j = 0; j < 8; j++) { + if ((j & 1) ^ (i & 1)) { + b.setPixel(i, j, 0XFFFFFF); + } + } + } + return b; + }; + DefaultMaterialManager.createDefaultTriangleMaterial = function () { + if (!DefaultMaterialManager._defaultTexture) + DefaultMaterialManager.createDefaultTexture(); + DefaultMaterialManager._defaultTriangleMaterial = new TriangleBasicMaterial(DefaultMaterialManager._defaultTexture); + DefaultMaterialManager._defaultTriangleMaterial.mipmap = false; + DefaultMaterialManager._defaultTriangleMaterial.smooth = false; + DefaultMaterialManager._defaultTriangleMaterial.name = "defaultTriangleMaterial"; + }; + DefaultMaterialManager.createDefaultLineMaterial = function () { + DefaultMaterialManager._defaultLineMaterial = new LineBasicMaterial(); + DefaultMaterialManager._defaultLineMaterial.name = "defaultSegmentMaterial"; }; + return DefaultMaterialManager; +})(); +module.exports = DefaultMaterialManager; + + +},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/library/AssetType":undefined,"awayjs-core/lib/textures/BitmapTexture":undefined,"awayjs-stagegl/lib/materials/LineBasicMaterial":undefined,"awayjs-stagegl/lib/materials/TriangleBasicMaterial":undefined}],"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":[function(require,module,exports){ +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +var ShaderCompilerHelper = (function () { + function ShaderCompilerHelper() { + } /** - * Sets the render state for a single renderable. - * + * A helper method that generates standard code for sampling from a texture using the normal uv coordinates. * @param vo The MethodVO object linking this method with the pass currently being compiled. - * @param renderable The renderable currently being rendered. - * @param stage The Stage object currently used for rendering. - * @param camera The camera from which the scene is currently rendered. + * @param sharedReg The shared register object for the shader. + * @param inputReg The texture stream register. + * @param texture The texture which will be assigned to the given slot. + * @param uvReg An optional uv register if coordinates different from the primary uv coordinates are to be used. + * @param forceWrap If true, texture wrapping is enabled regardless of the material setting. + * @return The fragment code that performs the sampling. * - * @internal + * @protected */ - ShadingMethodBase.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { + ShaderCompilerHelper.getTex2DSampleCode = function (targetReg, sharedReg, inputReg, texture, smooth, repeat, mipmaps, uvReg, forceWrap) { + if (uvReg === void 0) { uvReg = null; } + if (forceWrap === void 0) { forceWrap = null; } + var wrap = forceWrap || (repeat ? "wrap" : "clamp"); + var format = ShaderCompilerHelper.getFormatStringForTexture(texture); + var enableMipMaps = mipmaps && texture.hasMipmaps; + var filter = (smooth) ? (enableMipMaps ? "linear,miplinear" : "linear") : (enableMipMaps ? "nearest,mipnearest" : "nearest"); + if (uvReg == null) + uvReg = sharedReg.uvVarying; + return "tex " + targetReg + ", " + uvReg + ", " + inputReg + " <2d," + filter + "," + format + wrap + ">\n"; }; /** - * Clears the render state for this method. + * A helper method that generates standard code for sampling from a cube texture. * @param vo The MethodVO object linking this method with the pass currently being compiled. - * @param stage The Stage object currently used for rendering. + * @param targetReg The register in which to store the sampled colour. + * @param inputReg The texture stream register. + * @param texture The cube map which will be assigned to the given slot. + * @param uvReg The direction vector with which to sample the cube map. * - * @internal + * @protected */ - ShadingMethodBase.prototype.iDeactivate = function (shaderObject, methodVO, stage) { + ShaderCompilerHelper.getTexCubeSampleCode = function (targetReg, inputReg, texture, smooth, mipmaps, uvReg) { + var filter; + var format = ShaderCompilerHelper.getFormatStringForTexture(texture); + var enableMipMaps = mipmaps && texture.hasMipmaps; + var filter = (smooth) ? (enableMipMaps ? "linear,miplinear" : "linear") : (enableMipMaps ? "nearest,mipnearest" : "nearest"); + return "tex " + targetReg + ", " + uvReg + ", " + inputReg + " \n"; }; /** - * Marks the shader program as invalid, so it will be recompiled before the next render. + * Generates a texture format string for the sample instruction. + * @param texture The texture for which to get the format string. + * @return * - * @internal - */ - ShadingMethodBase.prototype.iInvalidateShaderProgram = function () { - this.dispatchEvent(new ShadingMethodEvent(ShadingMethodEvent.SHADER_INVALIDATED)); - }; - /** - * Copies the state from a ShadingMethodBase object into the current object. + * @protected */ - ShadingMethodBase.prototype.copyFrom = function (method) { + ShaderCompilerHelper.getFormatStringForTexture = function (texture) { + switch (texture.format) { + case ContextGLTextureFormat.COMPRESSED: + return "dxt1,"; + break; + case ContextGLTextureFormat.COMPRESSED_ALPHA: + return "dxt5,"; + break; + default: + return ""; + } }; - return ShadingMethodBase; -})(NamedAssetBase); -module.exports = ShadingMethodBase; + return ShaderCompilerHelper; +})(); +module.exports = ShaderCompilerHelper; -},{"awayjs-core/lib/library/NamedAssetBase":undefined,"awayjs-stagegl/lib/events/ShadingMethodEvent":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowHardMethod":[function(require,module,exports){ +},{"awayjs-stagegl/lib/base/ContextGLTextureFormat":undefined}],"awayjs-stagegl/lib/pool/BillboardRenderable":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ShadowMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadowMethodBase"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** - * ShadowHardMethod provides the cheapest shadow map method by using a single tap without any filtering. + * @class away.pool.RenderableListItem */ -var ShadowHardMethod = (function (_super) { - __extends(ShadowHardMethod, _super); +var BillboardRenderable = (function (_super) { + __extends(BillboardRenderable, _super); /** - * Creates a new ShadowHardMethod object. + * //TODO + * + * @param pool + * @param billboard */ - function ShadowHardMethod(castingLight) { - _super.call(this, castingLight); + function BillboardRenderable(pool, billboard) { + _super.call(this, pool, billboard, billboard); + this._billboard = billboard; } /** - * @inheritDoc + * //TODO + * + * @returns {away.base.TriangleSubGeometry} */ - ShadowHardMethod.prototype._pGetPlanarFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { - var depthMapRegister = regCache.getFreeTextureReg(); - var decReg = regCache.getFreeFragmentConstant(); - // needs to be reserved anyway. DO NOT REMOVE - var dataReg = regCache.getFreeFragmentConstant(); - var depthCol = regCache.getFreeFragmentVectorTemp(); - var code = ""; - methodVO.fragmentConstantsIndex = decReg.index * 4; - methodVO.texturesIndex = depthMapRegister.index; - code += "tex " + depthCol + ", " + this._pDepthMapCoordReg + ", " + depthMapRegister + " <2d, nearest, clamp>\n" + "dp4 " + depthCol + ".z, " + depthCol + ", " + decReg + "\n" + "slt " + targetReg + ".w, " + this._pDepthMapCoordReg + ".z, " + depthCol + ".z\n"; // 0 if in shadow - return code; + BillboardRenderable.prototype._pGetSubGeometry = function () { + var material = this._billboard.material; + var geometry = BillboardRenderable._materialGeometry[material.id]; + if (!geometry) { + geometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true); + geometry.autoDeriveNormals = false; + geometry.autoDeriveTangents = false; + geometry.updateIndices(Array(0, 1, 2, 0, 2, 3)); + geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); + geometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0)); + geometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1)); + geometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1)); + } + else { + geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); + } + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; + return geometry; + }; + BillboardRenderable._materialGeometry = new Object(); + /** + * + */ + BillboardRenderable.id = "billboard"; + return BillboardRenderable; +})(RenderableBase); +module.exports = BillboardRenderable; + + +},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/pool/IndexDataPool":[function(require,module,exports){ +var IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +/** + * + */ +var IndexDataPool = (function () { + function IndexDataPool() { + } + IndexDataPool.getItem = function (subGeometry, level, indexOffset) { + var subGeometryData = (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array())); + var indexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level)); + indexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices); + return indexData; + }; + IndexDataPool.disposeItem = function (id, level) { + var subGeometryData = this._pool[id]; + subGeometryData[level].dispose(); + subGeometryData[level] = null; + }; + IndexDataPool.prototype.disposeData = function (id) { + var subGeometryData = IndexDataPool._pool[id]; + var len = subGeometryData.length; + for (var i = 0; i < len; i++) { + subGeometryData[i].dispose(); + subGeometryData[i] = null; + } + IndexDataPool._pool[id] = null; + }; + IndexDataPool._pool = new Object(); + return IndexDataPool; +})(); +module.exports = IndexDataPool; + + +},{"awayjs-stagegl/lib/pool/IndexData":undefined}],"awayjs-stagegl/lib/pool/IndexData":[function(require,module,exports){ +/** + * + */ +var IndexData = (function () { + function IndexData(level) { + this._dataDirty = true; + this.invalid = new Array(8); + this.contexts = new Array(8); + this.buffers = new Array(8); + this.level = level; + } + IndexData.prototype.updateData = function (offset, indices, numVertices) { + if (this._dataDirty) { + this._dataDirty = false; + if (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) { + //shortcut for those buffers that fit into the maximum buffer sizes + this.indexMappings = null; + this.originalIndices = null; + this.setData(indices); + this.offset = indices.length; + } + else { + var i; + var len; + var outIndex; + var j; + var k; + var splitIndices = new Array(); + this.indexMappings = new Array(indices.length); + this.originalIndices = new Array(); + i = this.indexMappings.length; + while (i--) + this.indexMappings[i] = -1; + var originalIndex; + var splitIndex; + // Loop over all triangles + outIndex = 0; + len = indices.length; + i = offset; + k = 0; + while (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) { + for (j = 0; j < 3; j++) { + originalIndex = indices[i + j]; + if (this.indexMappings[originalIndex] >= 0) { + splitIndex = this.indexMappings[originalIndex]; + } + else { + // This vertex does not yet exist in the split list and + // needs to be copied from the long list. + splitIndex = k++; + this.indexMappings[originalIndex] = splitIndex; + this.originalIndices.push(originalIndex); + } + // Store new index, which may have come from the mapping look-up, + // or from copying a new set of vertex data from the original vector + splitIndices[outIndex + j] = splitIndex; + } + outIndex += 3; + i += 3; + } + this.setData(splitIndices); + this.offset = i; + } + } + }; + IndexData.prototype.invalidateData = function () { + this._dataDirty = true; + }; + IndexData.prototype.dispose = function () { + for (var i = 0; i < 8; ++i) { + if (this.contexts[i]) { + this.contexts[i].disposeIndexData(this); + this.contexts[i] = null; + } + } }; /** - * @inheritDoc + * @private */ - ShadowHardMethod.prototype._pGetPointFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { - var depthMapRegister = regCache.getFreeTextureReg(); - var decReg = regCache.getFreeFragmentConstant(); - var epsReg = regCache.getFreeFragmentConstant(); - var posReg = regCache.getFreeFragmentConstant(); - var depthSampleCol = regCache.getFreeFragmentVectorTemp(); - regCache.addFragmentTempUsages(depthSampleCol, 1); - var lightDir = regCache.getFreeFragmentVectorTemp(); - var code = ""; - methodVO.fragmentConstantsIndex = decReg.index * 4; - methodVO.texturesIndex = depthMapRegister.index; - code += "sub " + lightDir + ", " + sharedRegisters.globalPositionVarying + ", " + posReg + "\n" + "dp3 " + lightDir + ".w, " + lightDir + ".xyz, " + lightDir + ".xyz\n" + "mul " + lightDir + ".w, " + lightDir + ".w, " + posReg + ".w\n" + "nrm " + lightDir + ".xyz, " + lightDir + ".xyz\n" + "tex " + depthSampleCol + ", " + lightDir + ", " + depthMapRegister + " \n" + "dp4 " + depthSampleCol + ".z, " + depthSampleCol + ", " + decReg + "\n" + "add " + targetReg + ".w, " + lightDir + ".w, " + epsReg + ".x\n" + "slt " + targetReg + ".w, " + targetReg + ".w, " + depthSampleCol + ".z\n"; // 0 if in shadow - regCache.removeFragmentTempUsage(depthSampleCol); - return code; + IndexData.prototype.disposeBuffers = function () { + for (var i = 0; i < 8; ++i) { + if (this.buffers[i]) { + this.buffers[i].dispose(); + this.buffers[i] = null; + } + } }; /** - * @inheritDoc + * @private */ - ShadowHardMethod.prototype._iGetCascadeFragmentCode = function (shaderObject, methodVO, decodeRegister, depthTexture, depthProjection, targetRegister, registerCache, sharedRegisters) { - var temp = registerCache.getFreeFragmentVectorTemp(); - return "tex " + temp + ", " + depthProjection + ", " + depthTexture + " <2d, nearest, clamp>\n" + "dp4 " + temp + ".z, " + temp + ", " + decodeRegister + "\n" + "slt " + targetRegister + ".w, " + depthProjection + ".z, " + temp + ".z\n"; // 0 if in shadow + IndexData.prototype.invalidateBuffers = function () { + for (var i = 0; i < 8; ++i) + this.invalid[i] = true; }; /** - * @inheritDoc + * + * @param data + * @private */ - ShadowHardMethod.prototype.iActivateForCascade = function (shaderObject, methodVO, stage) { + IndexData.prototype.setData = function (data) { + if (this.data && this.data.length != data.length) + this.disposeBuffers(); + else + this.invalidateBuffers(); + this.data = data; }; - return ShadowHardMethod; -})(ShadowMethodBase); -module.exports = ShadowHardMethod; + IndexData.LIMIT_VERTS = 0xffff; + IndexData.LIMIT_INDICES = 0xffffff; + return IndexData; +})(); +module.exports = IndexData; -},{"awayjs-stagegl/lib/materials/methods/ShadowMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase":[function(require,module,exports){ +},{}],"awayjs-stagegl/lib/pool/LineSubMeshRenderable":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var AssetType = require("awayjs-core/lib/library/AssetType"); -var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); +var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** - * ShadowMapMethodBase provides an abstract base method for shadow map methods. + * @class away.pool.LineSubMeshRenderable */ -var ShadowMapMethodBase = (function (_super) { - __extends(ShadowMapMethodBase, _super); +var LineSubMeshRenderable = (function (_super) { + __extends(LineSubMeshRenderable, _super); /** - * Creates a new ShadowMapMethodBase object. - * @param castingLight The light used to cast shadows. + * //TODO + * + * @param pool + * @param subMesh + * @param level + * @param dataOffset */ - function ShadowMapMethodBase(castingLight) { - _super.call(this); - this._pEpsilon = .02; - this._pAlpha = 1; - this._pCastingLight = castingLight; - castingLight.castsShadows = true; - this._pShadowMapper = castingLight.shadowMapper; + function LineSubMeshRenderable(pool, subMesh, level, indexOffset) { + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); + this.subMesh = subMesh; } - Object.defineProperty(ShadowMapMethodBase.prototype, "assetType", { - /** - * @inheritDoc - */ - get: function () { - return AssetType.SHADOW_MAP_METHOD; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShadowMapMethodBase.prototype, "alpha", { - /** - * The "transparency" of the shadows. This allows making shadows less strong. - */ - get: function () { - return this._pAlpha; - }, - set: function (value) { - this._pAlpha = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShadowMapMethodBase.prototype, "castingLight", { - /** - * The light casting the shadows. - */ - get: function () { - return this._pCastingLight; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShadowMapMethodBase.prototype, "epsilon", { - /** - * A small value to counter floating point precision errors when comparing values in the shadow map with the - * calculated depth value. Increase this if shadow banding occurs, decrease it if the shadow seems to be too detached. - */ - get: function () { - return this._pEpsilon; - }, - set: function (value) { - this._pEpsilon = value; - }, - enumerable: true, - configurable: true - }); - return ShadowMapMethodBase; -})(ShadingMethodBase); -module.exports = ShadowMapMethodBase; + /** + * //TODO + * + * @returns {base.LineSubGeometry} + * @protected + */ + LineSubMeshRenderable.prototype._pGetSubGeometry = function () { + var subGeometry = this.subMesh.subGeometry; + this._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true; + this._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true; + if (subGeometry.thickness) + this._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true; + if (subGeometry.startColors) + this._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true; + return subGeometry; + }; + /** + * //TODO + * + * @param pool + * @param materialOwner + * @param level + * @param indexOffset + * @returns {away.pool.LineSubMeshRenderable} + * @private + */ + LineSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + return new LineSubMeshRenderable(pool, materialOwner, level, indexOffset); + }; + /** + * + */ + LineSubMeshRenderable.id = "linesubmesh"; + return LineSubMeshRenderable; +})(RenderableBase); +module.exports = LineSubMeshRenderable; -},{"awayjs-core/lib/library/AssetType":undefined,"awayjs-stagegl/lib/materials/methods/ShadingMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/ShadowMethodBase":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var PointLight = require("awayjs-display/lib/entities/PointLight"); -var ShadowMapMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase"); +},{"awayjs-display/lib/base/LineSubGeometry":undefined,"awayjs-stagegl/lib/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/pool/MaterialDataPool":[function(require,module,exports){ +var MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); /** - * ShadowMethodBase provides an abstract method for simple (non-wrapping) shadow map methods. + * @class away.pool.MaterialDataPool */ -var ShadowMethodBase = (function (_super) { - __extends(ShadowMethodBase, _super); +var MaterialDataPool = (function () { /** - * Creates a new ShadowMethodBase object. - * @param castingLight The light used to cast shadows. + * //TODO + * + * @param textureDataClass */ - function ShadowMethodBase(castingLight) { - this._pUsePoint = (castingLight instanceof PointLight); - _super.call(this, castingLight); + function MaterialDataPool(context) { + this._pool = new Object(); + this._context = context; } /** - * @inheritDoc + * //TODO + * + * @param materialOwner + * @returns ITexture */ - ShadowMethodBase.prototype.iInitVO = function (shaderObject, methodVO) { - methodVO.needsView = true; - methodVO.needsGlobalVertexPos = true; - methodVO.needsGlobalFragmentPos = this._pUsePoint; - methodVO.needsNormals = shaderObject.numLights > 0; + MaterialDataPool.prototype.getItem = function (material) { + return (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material)))); }; /** - * @inheritDoc + * //TODO + * + * @param materialOwner */ - ShadowMethodBase.prototype.iInitConstants = function (shaderObject, methodVO) { - var fragmentData = shaderObject.fragmentConstantData; - var vertexData = shaderObject.vertexConstantData; - var index = methodVO.fragmentConstantsIndex; - fragmentData[index] = 1.0; - fragmentData[index + 1] = 1 / 255.0; - fragmentData[index + 2] = 1 / 65025.0; - fragmentData[index + 3] = 1 / 16581375.0; - fragmentData[index + 6] = 0; - fragmentData[index + 7] = 1; - if (this._pUsePoint) { - fragmentData[index + 8] = 0; - fragmentData[index + 9] = 0; - fragmentData[index + 10] = 0; - fragmentData[index + 11] = 1; + MaterialDataPool.prototype.disposeItem = function (material) { + material._iRemoveMaterialData(this._pool[material.id]); + this._pool[material.id] = null; + }; + return MaterialDataPool; +})(); +module.exports = MaterialDataPool; + + +},{"awayjs-stagegl/lib/pool/MaterialData":undefined}],"awayjs-stagegl/lib/pool/MaterialData":[function(require,module,exports){ +var MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); +/** + * + * @class away.pool.MaterialData + */ +var MaterialData = (function () { + function MaterialData(pool, context, material) { + this.invalidAnimation = true; + this._pool = pool; + this.context = context; + this.material = material; + this._materialPassDataPool = new MaterialPassDataPool(material); + } + MaterialData.prototype.getMaterialPass = function (materialPass, profile) { + var materialPassData = this._materialPassDataPool.getItem(materialPass); + if (!materialPassData.shaderObject) { + materialPassData.shaderObject = materialPass.createShaderObject(profile); + materialPassData.invalid = true; } - index = methodVO.vertexConstantsIndex; - if (index != -1) { - vertexData[index] = .5; - vertexData[index + 1] = .5; - vertexData[index + 2] = 0.0; - vertexData[index + 3] = 1.0; + if (materialPassData.invalid) { + materialPassData.invalid = false; + var compiler = materialPassData.shaderObject.createCompiler(this.material, materialPass); + compiler.compile(); + materialPassData.shadedTarget = compiler.shadedTarget; + materialPassData.vertexCode = compiler.vertexCode; + materialPassData.fragmentCode = compiler.fragmentCode; + materialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode; + materialPassData.key = ""; } + return materialPassData; + }; + MaterialData.prototype.getMaterialPasses = function (profile) { + if (this._passes == null) { + var passes = this.material._iScreenPasses; + var numPasses = passes.length; + //reset the material passes in MaterialData + this._passes = new Array(numPasses); + for (var i = 0; i < numPasses; i++) + this._passes[i] = this.getMaterialPass(passes[i], profile); + } + return this._passes; }; - Object.defineProperty(ShadowMethodBase.prototype, "_iDepthMapCoordReg", { - /** - * Wrappers that override the vertex shader need to set this explicitly - */ - get: function () { - return this._pDepthMapCoordReg; - }, - set: function (value) { - this._pDepthMapCoordReg = value; - }, - enumerable: true, - configurable: true - }); /** - * @inheritDoc + * */ - ShadowMethodBase.prototype.iCleanCompilationData = function () { - _super.prototype.iCleanCompilationData.call(this); - this._pDepthMapCoordReg = null; + MaterialData.prototype.dispose = function () { + this._materialPassDataPool.disposePool(); + this._materialPassDataPool = null; + this._pool.disposeItem(this.material); + this._passes = null; }; /** - * @inheritDoc + * */ - ShadowMethodBase.prototype.iGetVertexCode = function (shaderObject, methodVO, regCache, sharedRegisters) { - return this._pUsePoint ? this._pGetPointVertexCode(methodVO, regCache, sharedRegisters) : this.pGetPlanarVertexCode(methodVO, regCache, sharedRegisters); + MaterialData.prototype.invalidateMaterial = function () { + this._passes = null; + this.invalidateAnimation(); }; /** - * Gets the vertex code for shadow mapping with a point light. * - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. */ - ShadowMethodBase.prototype._pGetPointVertexCode = function (methodVO, regCache, sharedRegisters) { - methodVO.vertexConstantsIndex = -1; - return ""; + MaterialData.prototype.invalidateAnimation = function () { + this.invalidAnimation = true; }; + return MaterialData; +})(); +module.exports = MaterialData; + + +},{"awayjs-stagegl/lib/pool/MaterialPassDataPool":undefined}],"awayjs-stagegl/lib/pool/MaterialPassDataPool":[function(require,module,exports){ +var MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +/** + * @class away.pool.MaterialPassDataPool + */ +var MaterialPassDataPool = (function () { /** - * Gets the vertex code for shadow mapping with a planar shadow map (fe: directional lights). + * //TODO * - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. + * @param textureDataClass */ - ShadowMethodBase.prototype.pGetPlanarVertexCode = function (methodVO, regCache, sharedRegisters) { - var code = ""; - var temp = regCache.getFreeVertexVectorTemp(); - var dataReg = regCache.getFreeVertexConstant(); - var depthMapProj = regCache.getFreeVertexConstant(); - regCache.getFreeVertexConstant(); - regCache.getFreeVertexConstant(); - regCache.getFreeVertexConstant(); - this._pDepthMapCoordReg = regCache.getFreeVarying(); - methodVO.vertexConstantsIndex = dataReg.index * 4; - // todo: can epsilon be applied here instead of fragment shader? - code += "m44 " + temp + ", " + sharedRegisters.globalPositionVertex + ", " + depthMapProj + "\n" + "div " + temp + ", " + temp + ", " + temp + ".w\n" + "mul " + temp + ".xy, " + temp + ".xy, " + dataReg + ".xy\n" + "add " + this._pDepthMapCoordReg + ", " + temp + ", " + dataReg + ".xxwz\n"; - //"sub " + this._pDepthMapCoordReg + ".z, " + this._pDepthMapCoordReg + ".z, " + this._pDepthMapCoordReg + ".w\n"; - return code; - }; + function MaterialPassDataPool(material) { + this._pool = new Object(); + this._material = material; + } /** - * @inheritDoc + * //TODO + * + * @param materialOwner + * @returns ITexture */ - ShadowMethodBase.prototype.iGetFragmentCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - var code = this._pUsePoint ? this._pGetPointFragmentCode(methodVO, targetReg, registerCache, sharedRegisters) : this._pGetPlanarFragmentCode(methodVO, targetReg, registerCache, sharedRegisters); - code += "add " + targetReg + ".w, " + targetReg + ".w, fc" + (methodVO.fragmentConstantsIndex / 4 + 1) + ".y\n" + "sat " + targetReg + ".w, " + targetReg + ".w\n"; - return code; + MaterialPassDataPool.prototype.getItem = function (materialPass) { + return (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass))))); }; /** - * Gets the fragment code for shadow mapping with a planar shadow map. - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. - * @param targetReg The register to contain the shadow coverage - * @return + * //TODO + * + * @param materialOwner */ - ShadowMethodBase.prototype._pGetPlanarFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { - throw new AbstractMethodError(); - return ""; + MaterialPassDataPool.prototype.disposeItem = function (materialPass) { + materialPass._iRemoveMaterialPassData(this._pool[materialPass.id]); + delete this._pool[materialPass.id]; + }; + MaterialPassDataPool.prototype.disposePool = function () { + for (var id in this._pool) + this._pool[id].materialPass._iRemoveMaterialPassData(this._pool[id]); + delete this._pool; }; + return MaterialPassDataPool; +})(); +module.exports = MaterialPassDataPool; + + +},{"awayjs-stagegl/lib/pool/MaterialPassData":undefined}],"awayjs-stagegl/lib/pool/MaterialPassData":[function(require,module,exports){ +/** + * + * @class away.pool.MaterialPassData + */ +var MaterialPassData = (function () { + function MaterialPassData(pool, material, materialPass) { + this.animationVertexCode = ""; + this.animationFragmentCode = ""; + this._pool = pool; + this.material = material; + this.materialPass = materialPass; + } /** - * Gets the fragment code for shadow mapping with a point light. - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. - * @param targetReg The register to contain the shadow coverage - * @return + * */ - ShadowMethodBase.prototype._pGetPointFragmentCode = function (methodVO, targetReg, regCache, sharedRegisters) { - throw new AbstractMethodError(); - return ""; + MaterialPassData.prototype.dispose = function () { + this._pool.disposeItem(this.materialPass); + this.shaderObject.dispose(); + this.shaderObject = null; + this.programData.dispose(); + this.programData = null; }; /** - * @inheritDoc + * */ - ShadowMethodBase.prototype.iSetRenderState = function (shaderObject, methodVO, renderable, stage, camera) { - if (!this._pUsePoint) - this._pShadowMapper.iDepthProjection.copyRawDataTo(shaderObject.vertexConstantData, methodVO.vertexConstantsIndex + 4, true); + MaterialPassData.prototype.invalidate = function () { + this.invalid = true; }; + return MaterialPassData; +})(); +module.exports = MaterialPassData; + + +},{}],"awayjs-stagegl/lib/pool/ProgramDataPool":[function(require,module,exports){ +var ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); +/** + * @class away.pool.ProgramDataPool + */ +var ProgramDataPool = (function () { /** - * Gets the fragment code for combining this method with a cascaded shadow map method. - * @param methodVO The MethodVO object linking this method with the pass currently being compiled. - * @param regCache The register cache used during the compilation. - * @param decodeRegister The register containing the data to decode the shadow map depth value. - * @param depthTexture The texture containing the shadow map. - * @param depthProjection The projection of the fragment relative to the light. - * @param targetRegister The register to contain the shadow coverage - * @return + * //TODO + * + * @param textureDataClass */ - ShadowMethodBase.prototype._iGetCascadeFragmentCode = function (shaderObject, methodVO, decodeRegister, depthTexture, depthProjection, targetRegister, registerCache, sharedRegisters) { - throw new Error("This shadow method is incompatible with cascade shadows"); + function ProgramDataPool(context) { + this._pool = new Object(); + this._context = context; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + ProgramDataPool.prototype.getItem = function (key) { + return this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key)); }; /** - * @inheritDoc + * //TODO + * + * @param materialOwner */ - ShadowMethodBase.prototype.iActivate = function (shaderObject, methodVO, stage) { - var fragmentData = shaderObject.fragmentConstantData; - var index = methodVO.fragmentConstantsIndex; - if (this._pUsePoint) - fragmentData[index + 4] = -Math.pow(1 / (this._pCastingLight.fallOff * this._pEpsilon), 2); - else - shaderObject.vertexConstantData[methodVO.vertexConstantsIndex + 3] = -1 / (this._pShadowMapper.depth * this._pEpsilon); - fragmentData[index + 5] = 1 - this._pAlpha; - if (this._pUsePoint) { - var pos = this._pCastingLight.scenePosition; - fragmentData[index + 8] = pos.x; - fragmentData[index + 9] = pos.y; - fragmentData[index + 10] = pos.z; - // used to decompress distance - var f = this._pCastingLight.fallOff; - fragmentData[index + 11] = 1 / (2 * f * f); - } - if (!this._pUsePoint) - stage.context.activateRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap); - //else - // ( stage.context).activateCubeRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap); + ProgramDataPool.prototype.disposeItem = function (key) { + this._pool[key] = null; }; + return ProgramDataPool; +})(); +module.exports = ProgramDataPool; + + +},{"awayjs-stagegl/lib/pool/ProgramData":undefined}],"awayjs-stagegl/lib/pool/ProgramData":[function(require,module,exports){ +/** + * + * @class away.pool.ProgramDataBase + */ +var ProgramData = (function () { + function ProgramData(pool, context, key) { + this.usages = 0; + this._pool = pool; + this.context = context; + this._key = key; + this.context.registerProgram(this); + } /** - * Sets the method state for cascade shadow mapping. + * */ - ShadowMethodBase.prototype.iActivateForCascade = function (shaderObject, methodVO, stage) { - throw new Error("This shadow method is incompatible with cascade shadows"); + ProgramData.prototype.dispose = function () { + this.usages--; + if (!this.usages) { + this._pool.disposeItem(this._key); + this.context.unRegisterProgram(this); + if (this.program) + this.program.dispose(); + } + this.program = null; }; - return ShadowMethodBase; -})(ShadowMapMethodBase); -module.exports = ShadowMethodBase; + ProgramData.PROGRAMDATA_ID_COUNT = 0; + return ProgramData; +})(); +module.exports = ProgramData; -},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-display/lib/entities/PointLight":undefined,"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase":undefined}],"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +},{}],"awayjs-stagegl/lib/pool/RenderableBase":[function(require,module,exports){ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); +var IndexDataPool = require("awayjs-stagegl/lib/pool/IndexDataPool"); +var VertexDataPool = require("awayjs-stagegl/lib/pool/VertexDataPool"); /** - * SpecularBasicMethod provides the default shading method for Blinn-Phong specular highlights (an optimized but approximated - * version of Phong specularity). + * @class RenderableListItem */ -var SpecularBasicMethod = (function (_super) { - __extends(SpecularBasicMethod, _super); +var RenderableBase = (function () { /** - * Creates a new SpecularBasicMethod object. + * + * @param sourceEntity + * @param materialOwner + * @param subGeometry + * @param animationSubGeometry */ - function SpecularBasicMethod() { - _super.call(this); - this._gloss = 50; - this._specular = 1; - this._specularColor = 0xffffff; - this._iSpecularR = 1; - this._iSpecularG = 1; - this._iSpecularB = 1; + function RenderableBase(pool, sourceEntity, materialOwner, level, indexOffset) { + var _this = this; + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + this._geometryDirty = true; + this._indexDataDirty = true; + this._vertexData = new Object(); + this._pVertexDataDirty = new Object(); + this._vertexOffset = new Object(); + this._onIndicesUpdatedDelegate = function (event) { return _this._onIndicesUpdated(event); }; + this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; + //store a reference to the pool for later disposal + this._pool = pool; + //reference to level of overflow + this._level = level; + //reference to the offset on indices (if this is an overflow renderable) + this._indexOffset = indexOffset; + this.sourceEntity = sourceEntity; + this.materialOwner = materialOwner; } - SpecularBasicMethod.prototype.iIsUsed = function (shaderObject) { - if (!shaderObject.numLights) - return false; - return true; - }; - /** - * @inheritDoc - */ - SpecularBasicMethod.prototype.iInitVO = function (shaderObject, methodVO) { - methodVO.needsUV = this._pUseTexture; - methodVO.needsNormals = shaderObject.numLights > 0; - methodVO.needsView = shaderObject.numLights > 0; - }; - Object.defineProperty(SpecularBasicMethod.prototype, "gloss", { - /** - * The sharpness of the specular highlight. - */ - get: function () { - return this._gloss; - }, - set: function (value) { - this._gloss = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpecularBasicMethod.prototype, "specular", { - /** - * The overall strength of the specular highlights. - */ - get: function () { - return this._specular; - }, - set: function (value) { - if (value == this._specular) - return; - this._specular = value; - this.updateSpecular(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpecularBasicMethod.prototype, "specularColor", { + Object.defineProperty(RenderableBase.prototype, "overflow", { /** - * The colour of the specular reflection of the surface. + * */ get: function () { - return this._specularColor; - }, - set: function (value) { - if (this._specularColor == value) - return; - // specular is now either enabled or disabled - if (this._specularColor == 0 || value == 0) - this.iInvalidateShaderProgram(); - this._specularColor = value; - this.updateSpecular(); + if (this._indexDataDirty) + this._updateIndexData(); + return this._overflow; }, enumerable: true, configurable: true }); - Object.defineProperty(SpecularBasicMethod.prototype, "texture", { + Object.defineProperty(RenderableBase.prototype, "numTriangles", { /** - * The bitmapData that encodes the specular highlight strength per texel in the red channel, and the sharpness - * in the green channel. You can use SpecularBitmapTexture if you want to easily set specular and gloss maps - * from grayscale images, but prepared images are preferred. + * */ get: function () { - return this._texture; - }, - set: function (value) { - var b = (value != null); - if (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format))) - this.iInvalidateShaderProgram(); - this._pUseTexture = b; - this._texture = value; + return this._numTriangles; }, enumerable: true, configurable: true }); /** - * @inheritDoc + * */ - SpecularBasicMethod.prototype.copyFrom = function (method) { - var m = method; - var bsm = method; - var spec = bsm; //SpecularBasicMethod(method); - this.texture = spec.texture; - this.specular = spec.specular; - this.specularColor = spec.specularColor; - this.gloss = spec.gloss; + RenderableBase.prototype.getIndexData = function () { + if (this._indexDataDirty) + this._updateIndexData(); + return this._indexData; }; /** - * @inheritDoc + * */ - SpecularBasicMethod.prototype.iCleanCompilationData = function () { - _super.prototype.iCleanCompilationData.call(this); - this._pTotalLightColorReg = null; - this._pSpecularTextureRegister = null; - this._pSpecularTexData = null; - this._pSpecularDataRegister = null; + RenderableBase.prototype.getVertexData = function (dataType) { + if (this._indexDataDirty) + this._updateIndexData(); + if (this._pVertexDataDirty[dataType]) + this._updateVertexData(dataType); + return this._vertexData[this._concatenateArrays ? TriangleSubGeometry.VERTEX_DATA : dataType]; }; /** - * @inheritDoc + * */ - SpecularBasicMethod.prototype.iGetFragmentPreLightingCode = function (shaderObject, methodVO, registerCache, sharedRegisters) { - var code = ""; - this._pIsFirstLight = true; - this._pSpecularDataRegister = registerCache.getFreeFragmentConstant(); - methodVO.fragmentConstantsIndex = this._pSpecularDataRegister.index * 4; - if (this._pUseTexture) { - this._pSpecularTexData = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(this._pSpecularTexData, 1); - this._pSpecularTextureRegister = registerCache.getFreeTextureReg(); - methodVO.texturesIndex = this._pSpecularTextureRegister.index; - code = ShaderCompilerHelper.getTex2DSampleCode(this._pSpecularTexData, sharedRegisters, this._pSpecularTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); + RenderableBase.prototype.getVertexOffset = function (dataType) { + if (this._indexDataDirty) + this._updateIndexData(); + if (this._pVertexDataDirty[dataType]) + this._updateVertexData(dataType); + return this._vertexOffset[dataType]; + }; + RenderableBase.prototype.dispose = function () { + this._pool.disposeItem(this.materialOwner); + this._indexData.dispose(); + this._indexData = null; + for (var dataType in this._vertexData) { + this._vertexData[dataType].dispose(); + this._vertexData[dataType] = null; } - else { - this._pSpecularTextureRegister = null; + if (this._overflow) { + this._overflow.dispose(); + this._overflow = null; } - this._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(this._pTotalLightColorReg, 1); - return code; + }; + RenderableBase.prototype.invalidateGeometry = function () { + this._geometryDirty = true; + //invalidate indices + if (this._level == 0) + this._indexDataDirty = true; + if (this._overflow) + this._overflow.invalidateGeometry(); }; /** - * @inheritDoc + * */ - SpecularBasicMethod.prototype.iGetFragmentCodePerLight = function (shaderObject, methodVO, lightDirReg, lightColReg, registerCache, sharedRegisters) { - var code = ""; - var t; - if (this._pIsFirstLight) { - t = this._pTotalLightColorReg; - } - else { - t = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(t, 1); - } - var viewDirReg = sharedRegisters.viewDirFragment; - var normalReg = sharedRegisters.normalFragment; - // blinn-phong half vector model - code += "add " + t + ", " + lightDirReg + ", " + viewDirReg + "\n" + "nrm " + t + ".xyz, " + t + "\n" + "dp3 " + t + ".w, " + normalReg + ", " + t + "\n" + "sat " + t + ".w, " + t + ".w\n"; - if (this._pUseTexture) { - // apply gloss modulation from texture - code += "mul " + this._pSpecularTexData + ".w, " + this._pSpecularTexData + ".y, " + this._pSpecularDataRegister + ".w\n" + "pow " + t + ".w, " + t + ".w, " + this._pSpecularTexData + ".w\n"; - } - else { - code += "pow " + t + ".w, " + t + ".w, " + this._pSpecularDataRegister + ".w\n"; + RenderableBase.prototype.invalidateIndexData = function () { + this._indexDataDirty = true; + }; + /** + * //TODO + * + * @param dataType + */ + RenderableBase.prototype.invalidateVertexData = function (dataType) { + this._pVertexDataDirty[dataType] = true; + }; + RenderableBase.prototype._pGetSubGeometry = function () { + throw new AbstractMethodError(); + }; + /** + * //TODO + * + * @param subGeometry + * @param offset + * @internal + */ + RenderableBase.prototype._iFillIndexData = function (indexOffset) { + if (this._geometryDirty) + this._updateGeometry(); + this._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset); + this._numTriangles = this._indexData.data.length / 3; + indexOffset = this._indexData.offset; + //check if there is more to split + if (indexOffset < this._subGeometry.indices.length) { + if (!this._overflow) + this._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1); + this._overflow._iFillIndexData(indexOffset); } - // attenuate - if (shaderObject.usesLightFallOff) - code += "mul " + t + ".w, " + t + ".w, " + lightDirReg + ".w\n"; - if (this._iModulateMethod != null) - code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); - code += "mul " + t + ".xyz, " + lightColReg + ", " + t + ".w\n"; - if (!this._pIsFirstLight) { - code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; - registerCache.removeFragmentTempUsage(t); + else if (this._overflow) { + this._overflow.dispose(); + this._overflow = null; } - this._pIsFirstLight = false; - return code; + }; + RenderableBase.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + throw new AbstractMethodError(); }; /** - * @inheritDoc + * //TODO + * + * @private */ - SpecularBasicMethod.prototype.iGetFragmentCodePerProbe = function (shaderObject, methodVO, cubeMapReg, weightRegister, registerCache, sharedRegisters) { - var code = ""; - var t; - // write in temporary if not first light, so we can add to total diffuse colour - if (this._pIsFirstLight) { - t = this._pTotalLightColorReg; - } - else { - t = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(t, 1); + RenderableBase.prototype._updateGeometry = function () { + if (this._subGeometry) { + if (this._level == 0) + this._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); + this._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); } - var normalReg = sharedRegisters.normalFragment; - var viewDirReg = sharedRegisters.viewDirFragment; - code += "dp3 " + t + ".w, " + normalReg + ", " + viewDirReg + "\n" + "add " + t + ".w, " + t + ".w, " + t + ".w\n" + "mul " + t + ", " + t + ".w, " + normalReg + "\n" + "sub " + t + ", " + t + ", " + viewDirReg + "\n" + "tex " + t + ", " + t + ", " + cubeMapReg + " \n" + "mul " + t + ".xyz, " + t + ", " + weightRegister + "\n"; - if (this._iModulateMethod != null) - code += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters); - if (!this._pIsFirstLight) { - code += "add " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + t + "\n"; - registerCache.removeFragmentTempUsage(t); + this._subGeometry = this._pGetSubGeometry(); + this._concatenateArrays = this._subGeometry.concatenateArrays; + if (this._subGeometry) { + if (this._level == 0) + this._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); + this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); } - this._pIsFirstLight = false; - return code; + //dispose + // if (this._indexData) { + // this._indexData.dispose(); //TODO where is a good place to dispose? + // this._indexData = null; + // } + // for (var dataType in this._vertexData) { + // ( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose? + // this._vertexData[dataType] = null; + // } + this._geometryDirty = false; + //specific vertex data types have to be invalidated in the specific renderable }; /** - * @inheritDoc + * //TODO + * + * @private */ - SpecularBasicMethod.prototype.iGetFragmentPostLightingCode = function (shaderObject, methodVO, targetReg, registerCache, sharedRegisters) { - var code = ""; - if (sharedRegisters.shadowTarget) - code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + sharedRegisters.shadowTarget + ".w\n"; - if (this._pUseTexture) { - // apply strength modulation from texture - code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + this._pSpecularTexData + ".x\n"; - registerCache.removeFragmentTempUsage(this._pSpecularTexData); - } - // apply material's specular reflection - code += "mul " + this._pTotalLightColorReg + ".xyz, " + this._pTotalLightColorReg + ", " + this._pSpecularDataRegister + "\n" + "add " + targetReg + ".xyz, " + targetReg + ", " + this._pTotalLightColorReg + "\n"; - registerCache.removeFragmentTempUsage(this._pTotalLightColorReg); - return code; + RenderableBase.prototype._updateIndexData = function () { + this._iFillIndexData(this._indexOffset); + this._indexDataDirty = false; }; /** - * @inheritDoc + * //TODO + * + * @param dataType + * @private */ - SpecularBasicMethod.prototype.iActivate = function (shaderObject, methodVO, stage) { - if (this._pUseTexture) { - stage.context.setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - stage.context.activateTexture(methodVO.texturesIndex, this._texture); - } - var index = methodVO.fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = this._iSpecularR; - data[index + 1] = this._iSpecularG; - data[index + 2] = this._iSpecularB; - data[index + 3] = this._gloss; + RenderableBase.prototype._updateVertexData = function (dataType) { + this._vertexOffset[dataType] = this._subGeometry.getOffset(dataType); + if (this._subGeometry.concatenateArrays) + dataType = SubGeometryBase.VERTEX_DATA; + this._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType); + this._pVertexDataDirty[dataType] = false; }; /** - * Updates the specular color data used by the render state. + * //TODO + * + * @param event + * @private */ - SpecularBasicMethod.prototype.updateSpecular = function () { - this._iSpecularR = ((this._specularColor >> 16) & 0xff) / 0xff * this._specular; - this._iSpecularG = ((this._specularColor >> 8) & 0xff) / 0xff * this._specular; - this._iSpecularB = (this._specularColor & 0xff) / 0xff * this._specular; + RenderableBase.prototype._onIndicesUpdated = function (event) { + this.invalidateIndexData(); }; - return SpecularBasicMethod; -})(LightingMethodBase); -module.exports = SpecularBasicMethod; + /** + * //TODO + * + * @param event + * @private + */ + RenderableBase.prototype._onVerticesUpdated = function (event) { + this._concatenateArrays = event.target.concatenateArrays; + this.invalidateVertexData(event.dataType); + }; + return RenderableBase; +})(); +module.exports = RenderableBase; -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/methods/LightingMethodBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/DepthMapPass":[function(require,module,exports){ +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-display/lib/events/SubGeometryEvent":undefined,"awayjs-stagegl/lib/pool/IndexDataPool":undefined,"awayjs-stagegl/lib/pool/VertexDataPool":undefined}],"awayjs-stagegl/lib/pool/SkyboxRenderable":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** - * DepthMapPass is a pass that writes depth values to a depth map as a 32-bit value exploded over the 4 texture channels. - * This is used to render shadow maps, depth maps, etc. + * @class away.pool.SkyboxRenderable */ -var DepthMapPass = (function (_super) { - __extends(DepthMapPass, _super); +var SkyboxRenderable = (function (_super) { + __extends(SkyboxRenderable, _super); /** - * Creates a new DepthMapPass object. + * //TODO * - * @param material The material to which this pass belongs. + * @param pool + * @param skybox */ - function DepthMapPass() { - _super.call(this); + function SkyboxRenderable(pool, skybox) { + _super.call(this, pool, skybox, skybox); } /** - * Initializes the unchanging constant data for this material. + * //TODO + * + * @returns {away.base.TriangleSubGeometry} + * @private */ - DepthMapPass.prototype._iInitConstantData = function (shaderObject) { - _super.prototype._iInitConstantData.call(this, shaderObject); - var index = this._fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = 1.0; - data[index + 1] = 255.0; - data[index + 2] = 65025.0; - data[index + 3] = 16581375.0; - data[index + 4] = 1.0 / 255.0; - data[index + 5] = 1.0 / 255.0; - data[index + 6] = 1.0 / 255.0; - data[index + 7] = 0.0; + SkyboxRenderable.prototype._pGetSubGeometry = function () { + var geometry = SkyboxRenderable._geometry; + if (!geometry) { + geometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true); + geometry.autoDeriveNormals = false; + geometry.autoDeriveTangents = false; + geometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2)); + geometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1)); + } + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + return geometry; }; - DepthMapPass.prototype._iIncludeDependencies = function (shaderObject) { - shaderObject.projectionDependencies++; - if (shaderObject.alphaThreshold > 0) - shaderObject.uvDependencies++; + /** + * + */ + SkyboxRenderable.id = "skybox"; + return SkyboxRenderable; +})(RenderableBase); +module.exports = SkyboxRenderable; + + +},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/pool/TextureDataPool":[function(require,module,exports){ +var TextureData = require("awayjs-stagegl/lib/pool/TextureData"); +/** + * @class away.pool.TextureDataPool + */ +var TextureDataPool = (function () { + /** + * //TODO + * + * @param textureDataClass + */ + function TextureDataPool(context) { + this._pool = new Object(); + this._context = context; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + TextureDataPool.prototype.getItem = function (textureProxy) { + return (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy)))); }; /** - * @inheritDoc + * //TODO + * + * @param materialOwner */ - DepthMapPass.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - var targetReg = sharedRegisters.shadedTarget; - var diffuseInputReg = registerCache.getFreeTextureReg(); - var dataReg1 = registerCache.getFreeFragmentConstant(); - var dataReg2 = registerCache.getFreeFragmentConstant(); - this._fragmentConstantsIndex = dataReg1.index * 4; - var temp1 = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(temp1, 1); - var temp2 = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(temp2, 1); - code += "div " + temp1 + ", " + sharedRegisters.projectionFragment + ", " + sharedRegisters.projectionFragment + ".w\n" + "mul " + temp1 + ", " + dataReg1 + ", " + temp1 + ".z\n" + "frc " + temp1 + ", " + temp1 + "\n" + "mul " + temp2 + ", " + temp1 + ".yzww, " + dataReg2 + "\n"; - //codeF += "mov ft1.w, fc1.w \n" + - // "mov ft0.w, fc0.x \n"; - if (shaderObject.alphaThreshold > 0) { - diffuseInputReg = registerCache.getFreeTextureReg(); - this._texturesIndex = diffuseInputReg.index; - var albedo = registerCache.getFreeFragmentVectorTemp(); - code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); - var cutOffReg = registerCache.getFreeFragmentConstant(); - code += "sub " + albedo + ".w, " + albedo + ".w, " + cutOffReg + ".x\n" + "kil " + albedo + ".w\n"; - } - code += "sub " + targetReg + ", " + temp1 + ", " + temp2 + "\n"; - registerCache.removeFragmentTempUsage(temp1); - registerCache.removeFragmentTempUsage(temp2); - return code; + TextureDataPool.prototype.disposeItem = function (textureProxy) { + textureProxy._iRemoveTextureData(this._pool[textureProxy.id]); + this._pool[textureProxy.id] = null; }; - DepthMapPass.prototype._iRender = function (pass, renderable, stage, camera, viewProjection) { - //this.setRenderState(pass, renderable, stage, camera, viewProjection); + return TextureDataPool; +})(); +module.exports = TextureDataPool; + + +},{"awayjs-stagegl/lib/pool/TextureData":undefined}],"awayjs-stagegl/lib/pool/TextureData":[function(require,module,exports){ +/** + * + * @class away.pool.TextureDataBase + */ +var TextureData = (function () { + function TextureData(pool, context, textureProxy) { + this._pool = pool; + this.context = context; + this.textureProxy = textureProxy; + } + /** + * + */ + TextureData.prototype.dispose = function () { + this._pool.disposeItem(this.textureProxy); + this.texture.dispose(); + this.texture = null; }; /** - * @inheritDoc + * */ - DepthMapPass.prototype._iActivate = function (pass, stage, camera) { - _super.prototype._iActivate.call(this, pass, stage, camera); - var context = stage.context; - var shaderObject = pass.shaderObject; - if (shaderObject.alphaThreshold > 0) { - context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - context.activateTexture(this._texturesIndex, shaderObject.texture); - shaderObject.fragmentConstantData[this._fragmentConstantsIndex + 8] = pass.shaderObject.alphaThreshold; - } + TextureData.prototype.invalidate = function () { + this.invalid = true; }; - return DepthMapPass; -})(MaterialPassBase); -module.exports = DepthMapPass; + return TextureData; +})(); +module.exports = TextureData; -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/DistanceMapPass":[function(require,module,exports){ +},{}],"awayjs-stagegl/lib/pool/TriangleSubMeshRenderable":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); /** - * DistanceMapPass is a pass that writes distance values to a depth map as a 32-bit value exploded over the 4 texture channels. - * This is used to render omnidirectional shadow maps. + * @class away.pool.TriangleSubMeshRenderable */ -var DistanceMapPass = (function (_super) { - __extends(DistanceMapPass, _super); +var TriangleSubMeshRenderable = (function (_super) { + __extends(TriangleSubMeshRenderable, _super); /** - * Creates a new DistanceMapPass object. + * //TODO * - * @param material The material to which this pass belongs. + * @param pool + * @param subMesh + * @param level + * @param indexOffset */ - function DistanceMapPass() { - _super.call(this); + function TriangleSubMeshRenderable(pool, subMesh, level, indexOffset) { + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); + this.subMesh = subMesh; } /** - * Initializes the unchanging constant data for this material. + * + * @returns {SubGeometryBase} + * @protected */ - DistanceMapPass.prototype._iInitConstantData = function (shaderObject) { - _super.prototype._iInitConstantData.call(this, shaderObject); - var index = this._fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index + 4] = 1.0 / 255.0; - data[index + 5] = 1.0 / 255.0; - data[index + 6] = 1.0 / 255.0; - data[index + 7] = 0.0; + TriangleSubMeshRenderable.prototype._pGetSubGeometry = function () { + var subGeometry; + if (this.subMesh.animator) + subGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry); + else + subGeometry = this.subMesh.subGeometry; + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + if (subGeometry.vertexNormals) + this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; + if (subGeometry.vertexTangents) + this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; + if (subGeometry.uvs) + this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; + if (subGeometry.secondaryUVs) + this._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true; + if (subGeometry.jointIndices) + this._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true; + if (subGeometry.jointWeights) + this._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true; + switch (subGeometry.jointsPerVertex) { + case 1: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1; + break; + case 2: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2; + break; + case 3: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3; + break; + case 4: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4; + break; + default: + } + return subGeometry; }; - DistanceMapPass.prototype._iIncludeDependencies = function (shaderObject) { - shaderObject.projectionDependencies++; - shaderObject.viewDirDependencies++; - if (shaderObject.alphaThreshold > 0) - shaderObject.uvDependencies++; - shaderObject.addWorldSpaceDependencies(false); + /** + * //TODO + * + * @param pool + * @param materialOwner + * @param level + * @param indexOffset + * @returns {away.pool.TriangleSubMeshRenderable} + * @protected + */ + TriangleSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + return new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset); }; /** - * @inheritDoc + * */ - DistanceMapPass.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - var code; - var targetReg = sharedRegisters.shadedTarget; - var diffuseInputReg = registerCache.getFreeTextureReg(); - var dataReg1 = registerCache.getFreeFragmentConstant(); - var dataReg2 = registerCache.getFreeFragmentConstant(); - this._fragmentConstantsIndex = dataReg1.index * 4; - var temp1 = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(temp1, 1); - var temp2 = registerCache.getFreeFragmentVectorTemp(); - registerCache.addFragmentTempUsages(temp2, 1); - // squared distance to view - code = "dp3 " + temp1 + ".z, " + sharedRegisters.viewDirVarying + ".xyz, " + sharedRegisters.viewDirVarying + ".xyz\n" + "mul " + temp1 + ", " + dataReg1 + ", " + temp1 + ".z\n" + "frc " + temp1 + ", " + temp1 + "\n" + "mul " + temp2 + ", " + temp1 + ".yzww, " + dataReg2 + "\n"; - if (shaderObject.alphaThreshold > 0) { - diffuseInputReg = registerCache.getFreeTextureReg(); - this._texturesIndex = diffuseInputReg.index; - var albedo = registerCache.getFreeFragmentVectorTemp(); - code += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); - var cutOffReg = registerCache.getFreeFragmentConstant(); - code += "sub " + albedo + ".w, " + albedo + ".w, " + cutOffReg + ".x\n" + "kil " + albedo + ".w\n"; + TriangleSubMeshRenderable.id = "trianglesubmesh"; + return TriangleSubMeshRenderable; +})(RenderableBase); +module.exports = TriangleSubMeshRenderable; + + +},{"awayjs-display/lib/base/TriangleSubGeometry":undefined,"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat":undefined,"awayjs-stagegl/lib/pool/RenderableBase":undefined}],"awayjs-stagegl/lib/pool/VertexDataPool":[function(require,module,exports){ +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var VertexData = require("awayjs-stagegl/lib/pool/VertexData"); +/** + * + */ +var VertexDataPool = (function () { + function VertexDataPool() { + } + VertexDataPool.getItem = function (subGeometry, indexData, dataType) { + if (subGeometry.concatenateArrays) + dataType = SubGeometryBase.VERTEX_DATA; + var subGeometryDictionary = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object())); + var subGeometryData = (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array())); + var vertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType)); + vertexData.updateData(indexData.originalIndices, indexData.indexMappings); + return vertexData; + }; + VertexDataPool.disposeItem = function (subGeometry, level, dataType) { + var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; + var subGeometryData = subGeometryDictionary[dataType]; + subGeometryData[level].dispose(); + subGeometryData[level] = null; + }; + VertexDataPool.prototype.disposeData = function (subGeometry) { + var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; + for (var key in subGeometryDictionary) { + var subGeometryData = subGeometryDictionary[key]; + var len = subGeometryData.length; + for (var i = 0; i < len; i++) { + subGeometryData[i].dispose(); + subGeometryData[i] = null; + } + } + VertexDataPool._pool[subGeometry.id] = null; + }; + VertexDataPool._pool = new Object(); + return VertexDataPool; +})(); +module.exports = VertexDataPool; + + +},{"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-stagegl/lib/pool/VertexData":undefined}],"awayjs-stagegl/lib/pool/VertexData":[function(require,module,exports){ +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); +/** + * + */ +var VertexData = (function () { + function VertexData(subGeometry, dataType) { + var _this = this; + this._dataDirty = true; + this.invalid = new Array(8); + this.buffers = new Array(8); + this.contexts = new Array(8); + this._subGeometry = subGeometry; + this._dataType = dataType; + this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; + this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + } + VertexData.prototype.updateData = function (originalIndices, indexMappings) { + if (originalIndices === void 0) { originalIndices = null; } + if (indexMappings === void 0) { indexMappings = null; } + if (this._dataDirty) { + this._dataDirty = false; + this.dataPerVertex = this._subGeometry.getStride(this._dataType); + var vertices = this._subGeometry[this._dataType]; + if (indexMappings == null) { + this.setData(vertices); + } + else { + var splitVerts = new Array(originalIndices.length * this.dataPerVertex); + var originalIndex; + var splitIndex; + var i = 0; + var j = 0; + while (i < originalIndices.length) { + originalIndex = originalIndices[i]; + splitIndex = indexMappings[originalIndex] * this.dataPerVertex; + originalIndex *= this.dataPerVertex; + for (j = 0; j < this.dataPerVertex; j++) + splitVerts[splitIndex + j] = vertices[originalIndex + j]; + i++; + } + this.setData(splitVerts); + } + } + }; + VertexData.prototype.dispose = function () { + for (var i = 0; i < 8; ++i) { + if (this.contexts[i]) { + this.contexts[i].disposeVertexData(this); + this.contexts[i] = null; + } + } + }; + /** + * @private + */ + VertexData.prototype.disposeBuffers = function () { + for (var i = 0; i < 8; ++i) { + if (this.buffers[i]) { + this.buffers[i].dispose(); + this.buffers[i] = null; + } } - code += "sub " + targetReg + ", " + temp1 + ", " + temp2 + "\n"; - return code; }; /** - * @inheritDoc + * @private */ - DistanceMapPass.prototype._iActivate = function (pass, stage, camera) { - _super.prototype._iActivate.call(this, pass, stage, camera); - var context = stage.context; - var shaderObject = pass.shaderObject; - var f = camera.projection.far; - f = 1 / (2 * f * f); - // sqrt(f*f+f*f) is largest possible distance for any frustum, so we need to divide by it. Rarely a tight fit, but with 32 bits precision, it's enough. - var index = this._fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = 1.0 * f; - data[index + 1] = 255.0 * f; - data[index + 2] = 65025.0 * f; - data[index + 3] = 16581375.0 * f; - if (shaderObject.alphaThreshold > 0) { - context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - context.activateTexture(this._texturesIndex, shaderObject.texture); - data[index + 8] = pass.shaderObject.alphaThreshold; - } + VertexData.prototype.invalidateBuffers = function () { + for (var i = 0; i < 8; ++i) + this.invalid[i] = true; }; - return DistanceMapPass; -})(MaterialPassBase); -module.exports = DistanceMapPass; - - -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL":[function(require,module,exports){ - - - -},{}],"awayjs-stagegl/lib/materials/passes/LineBasicPass":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -/** - * LineBasicPass is a material pass that draws wireframe segments. - */ -var LineBasicPass = (function (_super) { - __extends(LineBasicPass, _super); /** - * Creates a new SegmentPass object. * - * @param material The material to which this pass belongs. + * @param data + * @param dataPerVertex + * @private */ - function LineBasicPass() { - _super.call(this); - } + VertexData.prototype.setData = function (data) { + if (this.data && this.data.length != data.length) + this.disposeBuffers(); + else + this.invalidateBuffers(); + this.data = data; + }; /** - * @inheritDoc + * //TODO + * + * @param event + * @private */ - LineBasicPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { - var targetReg = sharedReg.shadedTarget; - return "mov " + targetReg + ", v0\n"; + VertexData.prototype._onVerticesUpdated = function (event) { + var dataType = this._subGeometry.concatenateArrays ? SubGeometryBase.VERTEX_DATA : event.dataType; + if (dataType == this._dataType) + this._dataDirty = true; }; - return LineBasicPass; -})(MaterialPassBase); -module.exports = LineBasicPass; + return VertexData; +})(); +module.exports = VertexData; -},{"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined}],"awayjs-stagegl/lib/materials/passes/MaterialPassBase":[function(require,module,exports){ +},{"awayjs-display/lib/base/SubGeometryBase":undefined,"awayjs-display/lib/events/SubGeometryEvent":undefined}],"awayjs-stagegl/lib/render/DefaultRenderer":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); -var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); -var Event = require("awayjs-core/lib/events/Event"); -var BlendMode = require("awayjs-display/lib/base/BlendMode"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); -var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); +var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); +var Vector3D = require("awayjs-core/lib/geom/Vector3D"); +var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); +var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); +var SkyboxRenderable = require("awayjs-stagegl/lib/pool/SkyboxRenderable"); +var DepthRenderer = require("awayjs-stagegl/lib/render/DepthRenderer"); +var Filter3DRenderer = require("awayjs-stagegl/lib/render/Filter3DRenderer"); +var RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); +var StageManager = require("awayjs-stagegl/lib/managers/StageManager"); +var DepthMapPass = require("awayjs-stagegl/lib/materials/passes/DepthMapPass"); +var DistanceMapPass = require("awayjs-stagegl/lib/materials/passes/DistanceMapPass"); /** - * MaterialPassBase provides an abstract base class for material shader passes. A material pass constitutes at least - * a render call per required renderable. + * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the + * materials assigned to them. + * + * @class away.render.DefaultRenderer */ -var MaterialPassBase = (function (_super) { - __extends(MaterialPassBase, _super); +var DefaultRenderer = (function (_super) { + __extends(DefaultRenderer, _super); /** - * Creates a new MaterialPassBase object. + * Creates a new DefaultRenderer object. + * + * @param antiAlias The amount of anti-aliasing to use. + * @param renderMode The render mode to use. */ - function MaterialPassBase(passMode) { - var _this = this; - if (passMode === void 0) { passMode = 0x03; } + function DefaultRenderer(forceSoftware, profile, mode) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } _super.call(this); - this._materialPassData = new Array(); - this._maxLights = 3; - this._preserveAlpha = true; - this._includeCasters = true; - this._forceSeparateMVP = false; - this._directionalLightsOffset = 0; - this._pointLightsOffset = 0; - this._lightProbesOffset = 0; - this._pNumPointLights = 0; - this._pNumDirectionalLights = 0; - this._pNumLightProbes = 0; - this._pNumLights = 0; - this._depthCompareMode = ContextGLCompareMode.LESS_EQUAL; - this._blendFactorSource = ContextGLBlendFactor.ONE; - this._blendFactorDest = ContextGLBlendFactor.ZERO; - this._pEnableBlending = false; - this._writeDepth = true; - this._passMode = passMode; - this._onLightsChangeDelegate = function (event) { return _this.onLightsChange(event); }; + this._skyboxProjection = new Matrix3D(); + this._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable); + this._pDepthRenderer = new DepthRenderer(new DepthMapPass()); + this._pDistanceRenderer = new DepthRenderer(new DistanceMapPass()); + if (this._pStage == null) + this.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode); + this._pRttBufferManager = RTTBufferManager.getInstance(this._pStage); + if (this._width == 0) + this.width = window.innerWidth; + else + this._pRttBufferManager.viewWidth = this._width; + if (this._height == 0) + this.height = window.innerHeight; + else + this._pRttBufferManager.viewHeight = this._height; } - Object.defineProperty(MaterialPassBase.prototype, "preserveAlpha", { - /** - * Indicates whether the output alpha value should remain unchanged compared to the material's original alpha. - */ - get: function () { - return this._preserveAlpha; - }, - set: function (value) { - if (this._preserveAlpha == value) - return; - this._preserveAlpha = value; - this._pInvalidatePass(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "includeCasters", { - /** - * Indicates whether or not shadow casting lights need to be included. - */ - get: function () { - return this._includeCasters; - }, - set: function (value) { - if (this._includeCasters == value) - return; - this._includeCasters = value; - this._pInvalidatePass(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "forceSeparateMVP", { - /** - * Indicates whether the screen projection should be calculated by forcing a separate scene matrix and - * view-projection matrix. This is used to prevent rounding errors when using multiple passes with different - * projection code. - */ - get: function () { - return this._forceSeparateMVP; - }, - set: function (value) { - if (this._forceSeparateMVP == value) - return; - this._forceSeparateMVP = value; - this._pInvalidatePass(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "directionalLightsOffset", { - /** - * Indicates the offset in the light picker's directional light vector for which to start including lights. - * This needs to be set before the light picker is assigned. - */ - get: function () { - return this._directionalLightsOffset; - }, - set: function (value) { - this._directionalLightsOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "pointLightsOffset", { - /** - * Indicates the offset in the light picker's point light vector for which to start including lights. - * This needs to be set before the light picker is assigned. - */ - get: function () { - return this._pointLightsOffset; - }, - set: function (value) { - this._pointLightsOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "lightProbesOffset", { - /** - * Indicates the offset in the light picker's light probes vector for which to start including lights. - * This needs to be set before the light picker is assigned. - */ - get: function () { - return this._lightProbesOffset; - }, - set: function (value) { - this._lightProbesOffset = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "passMode", { - /** - * - */ + Object.defineProperty(DefaultRenderer.prototype, "antiAlias", { get: function () { - return this._passMode; + return this._antiAlias; }, set: function (value) { - this._passMode = value; - this._pInvalidatePass(); + if (this._antiAlias == value) + return; + this._antiAlias = value; + this._pBackBufferInvalid = true; }, enumerable: true, configurable: true }); - /** - * Factory method to create a concrete shader object for this pass. - * - * @param profile The compatibility profile used by the renderer. - */ - MaterialPassBase.prototype.createShaderObject = function (profile) { - return new ShaderObjectBase(profile); - }; - Object.defineProperty(MaterialPassBase.prototype, "writeDepth", { + Object.defineProperty(DefaultRenderer.prototype, "depthPrepass", { /** - * Indicate whether this pass should write to the depth buffer or not. Ignored when blending is enabled. + * */ get: function () { - return this._writeDepth; + return this._depthPrepass; }, set: function (value) { - this._writeDepth = value; + this._depthPrepass = value; }, enumerable: true, configurable: true }); - Object.defineProperty(MaterialPassBase.prototype, "depthCompareMode", { + Object.defineProperty(DefaultRenderer.prototype, "filters3d", { /** - * The depth compare mode used to render the renderables using this material. * - * @see away.stagegl.ContextGLCompareMode + * @returns {*} */ get: function () { - return this._depthCompareMode; + return this._pFilter3DRenderer ? this._pFilter3DRenderer.filters : null; }, set: function (value) { - this._depthCompareMode = value; + if (value && value.length == 0) + value = null; + if (this._pFilter3DRenderer && !value) { + this._pFilter3DRenderer.dispose(); + this._pFilter3DRenderer = null; + } + else if (!this._pFilter3DRenderer && value) { + this._pFilter3DRenderer = new Filter3DRenderer(this._pStage); + this._pFilter3DRenderer.filters = value; + } + if (this._pFilter3DRenderer) { + this._pFilter3DRenderer.filters = value; + this._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender; + } + else { + this._pRequireDepthRender = false; + if (this._pDepthRender) { + this._pDepthRender.dispose(); + this._pDepthRender = null; + } + } }, enumerable: true, configurable: true }); + DefaultRenderer.prototype.render = function (entityCollector) { + _super.prototype.render.call(this, entityCollector); + if (!this._pStage.recoverFromDisposal()) { + this._pBackBufferInvalid = true; + return; + } + if (this._pBackBufferInvalid) + this.pUpdateBackBuffer(); + if (this._shareContext && this._pContext) + this._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH); + if (this._pFilter3DRenderer) { + this.textureRatioX = this._pRttBufferManager.textureRatioX; + this.textureRatioY = this._pRttBufferManager.textureRatioY; + } + else { + this.textureRatioX = 1; + this.textureRatioY = 1; + } + if (this._pRequireDepthRender) + this.pRenderSceneDepthToTexture(entityCollector); + if (this._depthPrepass) + this.pRenderDepthPrepass(entityCollector); + if (this._pFilter3DRenderer && this._pContext) { + } + else { + if (this._shareContext) + this._iRender(entityCollector, null, this._pScissorRect); + else + this._iRender(entityCollector); + } + _super.prototype.render.call(this, entityCollector); + if (!this._shareContext && this._pContext) + this._pContext.present(); + // register that a view has been rendered + this._pStage.bufferClear = false; + }; + DefaultRenderer.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + this.updateLights(entityCollector); + // otherwise RTT will interfere with other RTTs + if (target) { + this.pCollectRenderables(entityCollector); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); + } + _super.prototype.pExecuteRender.call(this, entityCollector, target, scissorRect, surfaceSelector); + }; + DefaultRenderer.prototype.updateLights = function (entityCollector) { + var dirLights = entityCollector.directionalLights; + var pointLights = entityCollector.pointLights; + var len, i; + var light; + var shadowMapper; + len = dirLights.length; + for (i = 0; i < len; ++i) { + light = dirLights[i]; + shadowMapper = light.shadowMapper; + if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) + shadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer); + } + len = pointLights.length; + for (i = 0; i < len; ++i) { + light = pointLights[i]; + shadowMapper = light.shadowMapper; + if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) + shadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer); + } + }; /** - * Cleans up any resources used by the current object. - * @param deep Indicates whether other resources should be cleaned up, that could potentially be shared across different instances. + * @inheritDoc */ - MaterialPassBase.prototype.dispose = function () { - if (this._pLightPicker) - this._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate); - while (this._materialPassData.length) - this._materialPassData[0].dispose(); - this._materialPassData = null; + DefaultRenderer.prototype.pDraw = function (entityCollector, target) { + if (!target) + this.pCollectRenderables(entityCollector); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + if (entityCollector.skyBox) { + this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); + this.drawSkybox(entityCollector); + } + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); }; /** - * Renders an object to the current render target. + * Draw the skybox if present. * - * @private + * @param entityCollector The EntityCollector containing all potentially visible information. */ - MaterialPassBase.prototype._iRender = function (pass, renderable, stage, camera, viewProjection) { - this.setRenderState(pass, renderable, stage, camera, viewProjection); + DefaultRenderer.prototype.drawSkybox = function (entityCollector) { + var skyBox = this._skyboxRenderablePool.getItem(entityCollector.skyBox); + var material = entityCollector.skyBox.material; + var camera = entityCollector.camera; + this.updateSkyboxProjection(camera); + var activePass = this._pStage.context.getMaterial(material, this._pStage.profile).getMaterialPass(material._iScreenPasses[0], this._pStage.profile); + material._iActivatePass(activePass, this._pStage, camera); + material._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection); + material._iDeactivatePass(activePass, this._pStage); + }; + DefaultRenderer.prototype.updateSkyboxProjection = function (camera) { + var near = new Vector3D(); + this._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix); + this._skyboxProjection.copyRowTo(2, near); + var camPos = camera.scenePosition; + var cx = near.x; + var cy = near.y; + var cz = near.z; + var cw = -(near.x * camPos.x + near.y * camPos.y + near.z * camPos.z + Math.sqrt(cx * cx + cy * cy + cz * cz)); + var signX = cx >= 0 ? 1 : -1; + var signY = cy >= 0 ? 1 : -1; + var p = new Vector3D(signX, signY, 1, 1); + var inverse = this._skyboxProjection.clone(); + inverse.invert(); + var q = inverse.transformVector(p); + this._skyboxProjection.copyRowTo(3, p); + var a = (q.x * p.x + q.y * p.y + q.z * p.z + q.w * p.w) / (cx * q.x + cy * q.y + cz * q.z + cw * q.w); + this._skyboxProjection.copyRowFrom(2, new Vector3D(cx * a, cy * a, cz * a, cw * a)); }; /** + * Draw a list of renderables. * - * - * @param renderable - * @param stage - * @param camera + * @param renderables The renderables to draw. + * @param entityCollector The EntityCollector containing all potentially visible information. */ - MaterialPassBase.prototype.setRenderState = function (pass, renderable, stage, camera, viewProjection) { - pass.shaderObject.setRenderState(renderable, stage, camera, viewProjection); + DefaultRenderer.prototype.drawRenderables = function (renderable, entityCollector) { + var i; + var len; + var passes; + var activePass; + var activeMaterial; + var context = this._pStage.context; + var camera = entityCollector.camera; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + //iterate through each screen pass + passes = renderable.material._iScreenPasses; + len = renderable.material._iNumScreenPasses(); + for (i = 0; i < len; i++) { + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(passes[i], this._pStage.profile); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + renderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); + activeMaterial.material._iDeactivatePass(activePass, this._pStage); + } + renderable = renderable2; + } + }; + DefaultRenderer.prototype.dispose = function () { + if (!this._shareContext) + this._pStage.dispose(); + this._pDepthRenderer.dispose(); + this._pDistanceRenderer.dispose(); + this._pDepthRenderer = null; + this._pDistanceRenderer = null; + this._pDepthRender = null; + _super.prototype.dispose.call(this); }; /** - * The blend mode to use when drawing this renderable. The following blend modes are supported: - *
    - *
  • BlendMode.NORMAL: No blending, unless the material inherently needs it
  • - *
  • BlendMode.LAYER: Force blending. This will draw the object the same as NORMAL, but without writing depth writes.
  • - *
  • BlendMode.MULTIPLY
  • - *
  • BlendMode.ADD
  • - *
  • BlendMode.ALPHA
  • - *
+ * */ - MaterialPassBase.prototype.setBlendMode = function (value) { - switch (value) { - case BlendMode.NORMAL: - this._blendFactorSource = ContextGLBlendFactor.ONE; - this._blendFactorDest = ContextGLBlendFactor.ZERO; - this._pEnableBlending = false; - break; - case BlendMode.LAYER: - this._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA; - this._blendFactorDest = ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA; - this._pEnableBlending = true; - break; - case BlendMode.MULTIPLY: - this._blendFactorSource = ContextGLBlendFactor.ZERO; - this._blendFactorDest = ContextGLBlendFactor.SOURCE_COLOR; - this._pEnableBlending = true; - break; - case BlendMode.ADD: - this._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA; - this._blendFactorDest = ContextGLBlendFactor.ONE; - this._pEnableBlending = true; - break; - case BlendMode.ALPHA: - this._blendFactorSource = ContextGLBlendFactor.ZERO; - this._blendFactorDest = ContextGLBlendFactor.SOURCE_ALPHA; - this._pEnableBlending = true; - break; - default: - throw new ArgumentError("Unsupported blend mode!"); + DefaultRenderer.prototype.pRenderDepthPrepass = function (entityCollector) { + this._pDepthRenderer.disableColor = true; + if (this._pFilter3DRenderer) { + } + else { + this._pDepthRenderer.textureRatioX = 1; + this._pDepthRenderer.textureRatioY = 1; + this._pDepthRenderer._iRender(entityCollector); } + this._pDepthRenderer.disableColor = false; }; /** - * Sets the render state for the pass that is independent of the rendered object. This needs to be called before - * calling renderPass. Before activating a pass, the previously used pass needs to be deactivated. - * @param stage The Stage object which is currently used for rendering. - * @param camera The camera from which the scene is viewed. - * @private + * */ - MaterialPassBase.prototype._iActivate = function (pass, stage, camera) { - var context = stage.context; - context.setDepthTest((this._writeDepth && !this._pEnableBlending), this._depthCompareMode); - if (this._pEnableBlending) - context.setBlendFactors(this._blendFactorSource, this._blendFactorDest); - context.activateMaterialPass(pass, stage, camera); + DefaultRenderer.prototype.pRenderSceneDepthToTexture = function (entityCollector) { + if (this._pDepthTextureInvalid || !this._pDepthRender) + this.initDepthTexture(this._pStage.context); + this._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX; + this._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY; + this._pDepthRenderer._iRender(entityCollector, this._pDepthRender); }; /** - * Clears the render state for the pass. This needs to be called before activating another pass. - * @param stage The Stage used for rendering - * - * @private + * Updates the backbuffer dimensions. */ - MaterialPassBase.prototype._iDeactivate = function (pass, stage) { - stage.context.deactivateMaterialPass(pass, stage); - stage.context.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); // TODO : imeplement + DefaultRenderer.prototype.pUpdateBackBuffer = function () { + // No reason trying to configure back buffer if there is no context available. + // Doing this anyway (and relying on _stage to cache width/height for + // context does get available) means usesSoftwareRendering won't be reliable. + if (this._pStage.context && !this._shareContext) { + if (this._width && this._height) { + this._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true); + this._pBackBufferInvalid = false; + } + } + }; + DefaultRenderer.prototype.iSetStage = function (value) { + _super.prototype.iSetStage.call(this, value); + this._pDistanceRenderer.iSetStage(value); + this._pDepthRenderer.iSetStage(value); }; /** - * Marks the shader program as invalid, so it will be recompiled before the next render. * - * @param updateMaterial Indicates whether the invalidation should be performed on the entire material. Should always pass "true" unless it's called from the material itself. */ - MaterialPassBase.prototype._pInvalidatePass = function () { - var len = this._materialPassData.length; - for (var i = 0; i < len; i++) - this._materialPassData[i].invalidate(); - this.dispatchEvent(new Event(Event.CHANGE)); + DefaultRenderer.prototype.initDepthTexture = function (context) { + this._pDepthTextureInvalid = false; + if (this._pDepthRender) + this._pDepthRender.dispose(); + this._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight); }; - Object.defineProperty(MaterialPassBase.prototype, "lightPicker", { - /** - * The light picker used by the material to provide lights to the material if it supports lighting. - * - * @see away.materials.LightPickerBase - * @see away.materials.StaticLightPicker - */ + return DefaultRenderer; +})(RendererBase); +module.exports = DefaultRenderer; + + +},{"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-core/lib/geom/Vector3D":undefined,"awayjs-core/lib/textures/RenderTexture":undefined,"awayjs-display/lib/pool/RenderablePool":undefined,"awayjs-stagegl/lib/base/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/base/ContextGLClearMask":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/managers/RTTBufferManager":undefined,"awayjs-stagegl/lib/managers/StageManager":undefined,"awayjs-stagegl/lib/materials/passes/DepthMapPass":undefined,"awayjs-stagegl/lib/materials/passes/DistanceMapPass":undefined,"awayjs-stagegl/lib/pool/SkyboxRenderable":undefined,"awayjs-stagegl/lib/render/DepthRenderer":undefined,"awayjs-stagegl/lib/render/Filter3DRenderer":undefined,"awayjs-stagegl/lib/render/RendererBase":undefined}],"awayjs-stagegl/lib/render/DepthRenderer":[function(require,module,exports){ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +/** + * The DepthRenderer class renders 32-bit depth information encoded as RGBA + * + * @class away.render.DepthRenderer + */ +var DepthRenderer = (function (_super) { + __extends(DepthRenderer, _super); + /** + * Creates a new DepthRenderer object. + * @param renderBlended Indicates whether semi-transparent objects should be rendered. + * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based + */ + function DepthRenderer(pass, renderBlended) { + if (renderBlended === void 0) { renderBlended = false; } + _super.call(this); + this._pass = pass; + this._renderBlended = renderBlended; + this._iBackgroundR = 1; + this._iBackgroundG = 1; + this._iBackgroundB = 1; + } + Object.defineProperty(DepthRenderer.prototype, "disableColor", { get: function () { - return this._pLightPicker; + return this._disableColor; }, set: function (value) { - if (this._pLightPicker) - this._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate); - this._pLightPicker = value; - if (this._pLightPicker) - this._pLightPicker.addEventListener(Event.CHANGE, this._onLightsChangeDelegate); - this.pUpdateLights(); + this._disableColor = value; }, enumerable: true, configurable: true }); + DepthRenderer.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { + this.pCollectRenderables(entityCollector); + this._pContext.setRenderTarget(target, true, 0); + this._pContext.clear(1, 1, 1, 1, 1, 0); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); + var head = this._pOpaqueRenderableHead; + var first = true; + for (var i = numCascades - 1; i >= 0; --i) { + this._pStage.scissorRect = scissorRects[i]; + this.drawCascadeRenderables(head, cameras[i], first ? null : cameras[i].frustumPlanes); + first = false; + } + //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! + this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); + this._pStage.scissorRect = null; + }; + DepthRenderer.prototype.drawCascadeRenderables = function (renderable, camera, cullPlanes) { + var activePass; + var activeMaterial; + var context = this._pStage.context; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); + //TODO: generalise this test + if (activePass.key == "") + this._pContext.calcAnimationCode(renderable.material, activePass); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + // if completely in front, it will fall in a different cascade + // do not use near and far planes + if (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) { + renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + } + else { + renderable2.cascaded = true; + } + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded); + renderable.material._iDeactivatePass(activePass, this._pStage); + renderable = renderable2; + } + }; /** - * Called when the light picker's configuration changes. + * @inheritDoc */ - MaterialPassBase.prototype.onLightsChange = function (event) { - this.pUpdateLights(); + DepthRenderer.prototype.pDraw = function (entityCollector, target) { + this.pCollectRenderables(entityCollector); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + if (this._disableColor) + this._pContext.setColorMask(false, false, false, false); + if (this._renderBlended) + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); + if (this._disableColor) + this._pContext.setColorMask(true, true, true, true); }; /** - * Implemented by subclasses if the pass uses lights to update the shader. + * Draw a list of renderables. + * @param renderables The renderables to draw. + * @param entityCollector The EntityCollector containing all potentially visible information. */ - MaterialPassBase.prototype.pUpdateLights = function () { - var numDirectionalLightsOld = this._pNumDirectionalLights; - var numPointLightsOld = this._pNumPointLights; - var numLightProbesOld = this._pNumLightProbes; - if (this._pLightPicker && (this._passMode & MaterialPassMode.LIGHTING)) { - this._pNumDirectionalLights = this.calculateNumDirectionalLights(this._pLightPicker.numDirectionalLights); - this._pNumPointLights = this.calculateNumPointLights(this._pLightPicker.numPointLights); - this._pNumLightProbes = this.calculateNumProbes(this._pLightPicker.numLightProbes); - if (this._includeCasters) { - this._pNumDirectionalLights += this._pLightPicker.numCastingDirectionalLights; - this._pNumPointLights += this._pLightPicker.numCastingPointLights; + DepthRenderer.prototype.drawRenderables = function (renderable, entityCollector) { + var activePass; + var activeMaterial; + var context = this._pStage.context; + var camera = entityCollector.camera; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + // otherwise this would result in depth rendered anyway because fragment shader kil is ignored + if (this._disableColor && renderable.material.alphaThreshold != 0) { + renderable2 = renderable; + do { + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); } + else { + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); + //TODO: generalise this test + if (activePass.key == "") + this._pContext.calcAnimationCode(renderable.material, activePass); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); + renderable.material._iDeactivatePass(activePass, this._pStage); + } + renderable = renderable2; } - else { - this._pNumDirectionalLights = 0; - this._pNumPointLights = 0; - this._pNumLightProbes = 0; - } - this._pNumLights = this._pNumDirectionalLights + this._pNumPointLights; - if (numDirectionalLightsOld != this._pNumDirectionalLights || numPointLightsOld != this._pNumPointLights || numLightProbesOld != this._pNumLightProbes) - this._pInvalidatePass(); - }; - MaterialPassBase.prototype._iIncludeDependencies = function (shaderObject) { - if (this._forceSeparateMVP) - shaderObject.globalPosDependencies++; - shaderObject.outputsNormals = this._pOutputsNormals(shaderObject); - shaderObject.outputsTangentNormals = shaderObject.outputsNormals && this._pOutputsTangentNormals(shaderObject); - shaderObject.usesTangentSpace = shaderObject.outputsTangentNormals && this._pUsesTangentSpace(shaderObject); - if (!shaderObject.usesTangentSpace) - shaderObject.addWorldSpaceDependencies(Boolean(this._passMode & MaterialPassMode.EFFECTS)); - }; - MaterialPassBase.prototype._iInitConstantData = function (shaderObject) { - }; - MaterialPassBase.prototype._iGetPreLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; - }; - MaterialPassBase.prototype._iGetPreLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; - }; - MaterialPassBase.prototype._iGetVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; - }; - MaterialPassBase.prototype._iGetFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; }; - MaterialPassBase.prototype._iGetNormalVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; - }; - MaterialPassBase.prototype._iGetNormalFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - return ""; + return DepthRenderer; +})(RendererBase); +module.exports = DepthRenderer; + + +},{"awayjs-stagegl/lib/base/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/render/RendererBase":undefined}],"awayjs-stagegl/lib/render/Filter3DRenderer":[function(require,module,exports){ +var Event = require("awayjs-core/lib/events/Event"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); +/** + * @class away.render.Filter3DRenderer + */ +var Filter3DRenderer = (function () { + function Filter3DRenderer(stage) { + var _this = this; + this._filterSizesInvalid = true; + this._onRTTResizeDelegate = function (event) { return _this.onRTTResize(event); }; + this._stage = stage; + this._rttManager = RTTBufferManager.getInstance(stage); + this._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate); + } + Filter3DRenderer.prototype.onRTTResize = function (event) { + this._filterSizesInvalid = true; }; - Object.defineProperty(MaterialPassBase.prototype, "iNumPointLights", { - /** - * The amount of point lights that need to be supported. - */ + Object.defineProperty(Filter3DRenderer.prototype, "requireDepthRender", { get: function () { - return this._pNumPointLights; + return this._requireDepthRender; }, enumerable: true, configurable: true }); - Object.defineProperty(MaterialPassBase.prototype, "iNumDirectionalLights", { - /** - * The amount of directional lights that need to be supported. - */ + Filter3DRenderer.prototype.getMainInputTexture = function (stage) { + if (this._filterTasksInvalid) { + this.updateFilterTasks(stage); + } + return this._mainInputTexture; + }; + Object.defineProperty(Filter3DRenderer.prototype, "filters", { get: function () { - return this._pNumDirectionalLights; + return this._filters; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MaterialPassBase.prototype, "iNumLightProbes", { - /** - * The amount of light probes that need to be supported. - */ - get: function () { - return this._pNumLightProbes; + set: function (value) { + this._filters = value; + this._filterTasksInvalid = true; + this._requireDepthRender = false; + if (!this._filters) { + return; + } + for (var i = 0; i < this._filters.length; ++i) { + // TODO: check logic: + // this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender ) + var s = this._filters[i]; + var b = (s.requireDepthRender == null) ? false : s.requireDepthRender; + this._requireDepthRender = this._requireDepthRender || b; + } + this._filterSizesInvalid = true; }, enumerable: true, configurable: true }); - /** - * Indicates whether or not normals are calculated at all. - */ - MaterialPassBase.prototype._pOutputsNormals = function (shaderObject) { - return false; - }; - /** - * Indicates whether or not normals are calculated in tangent space. - */ - MaterialPassBase.prototype._pOutputsTangentNormals = function (shaderObject) { - return false; - }; - /** - * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space - * dependencies exist. - */ - MaterialPassBase.prototype._pUsesTangentSpace = function (shaderObject) { - return false; - }; - /** - * Calculates the amount of directional lights this material will support. - * @param numDirectionalLights The maximum amount of directional lights to support. - * @return The amount of directional lights this material will support, bounded by the amount necessary. - */ - MaterialPassBase.prototype.calculateNumDirectionalLights = function (numDirectionalLights) { - return Math.min(numDirectionalLights - this._directionalLightsOffset, this._maxLights); - }; - /** - * Calculates the amount of point lights this material will support. - * @param numDirectionalLights The maximum amount of point lights to support. - * @return The amount of point lights this material will support, bounded by the amount necessary. - */ - MaterialPassBase.prototype.calculateNumPointLights = function (numPointLights) { - var numFree = this._maxLights - this._pNumDirectionalLights; - return Math.min(numPointLights - this._pointLightsOffset, numFree); + Filter3DRenderer.prototype.updateFilterTasks = function (stage) { + var len; + if (this._filterSizesInvalid) { + this.updateFilterSizes(); + } + if (!this._filters) { + this._tasks = null; + return; + } + this._tasks = new Array(); + len = this._filters.length - 1; + var filter; + for (var i = 0; i <= len; ++i) { + // make sure all internal tasks are linked together + filter = this._filters[i]; + // TODO: check logic + // filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage); + filter.setRenderTargets(i == len ? null : this._filters[i + 1].getMainInputTexture(stage), stage); + this._tasks = this._tasks.concat(filter.tasks); + } + this._mainInputTexture = this._filters[0].getMainInputTexture(stage); }; - /** - * Calculates the amount of light probes this material will support. - * @param numDirectionalLights The maximum amount of light probes to support. - * @return The amount of light probes this material will support, bounded by the amount necessary. - */ - MaterialPassBase.prototype.calculateNumProbes = function (numLightProbes) { - var numChannels = 0; - // if ((this._pSpecularLightSources & LightSources.PROBES) != 0) - // ++numChannels; - // - // if ((this._pDiffuseLightSources & LightSources.PROBES) != 0) - // ++numChannels; - // 4 channels available - return Math.min(numLightProbes - this._lightProbesOffset, (4 / numChannels) | 0); + Filter3DRenderer.prototype.render = function (stage, camera, depthTexture) { + var len; + var i; + var task; + var context = stage.context; + var indexBuffer = this._rttManager.indexBuffer; + var vertexBuffer = this._rttManager.renderToTextureVertexBuffer; + if (!this._filters) { + return; + } + if (this._filterSizesInvalid) { + this.updateFilterSizes(); + } + if (this._filterTasksInvalid) { + this.updateFilterTasks(stage); + } + len = this._filters.length; + for (i = 0; i < len; ++i) { + this._filters[i].update(stage, camera); + } + len = this._tasks.length; + if (len > 1) { + context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); + context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); + } + for (i = 0; i < len; ++i) { + task = this._tasks[i]; + //stage.setRenderTarget(task.target); //TODO + if (!task.target) { + stage.scissorRect = null; + vertexBuffer = this._rttManager.renderToScreenVertexBuffer; + context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); + context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); + } + context.setTextureAt(0, task.getMainInputTexture(stage)); + context.setProgram(task.getProgram(stage)); + context.clear(0.0, 0.0, 0.0, 0.0); + task.activate(stage, camera, depthTexture); + context.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + context.drawTriangles(indexBuffer, 0, 2); + task.deactivate(stage); + } + context.setTextureAt(0, null); + context.setVertexBufferAt(0, null); + context.setVertexBufferAt(1, null); }; - MaterialPassBase.prototype._iAddMaterialPassData = function (materialPassData) { - this._materialPassData.push(materialPassData); - return materialPassData; + Filter3DRenderer.prototype.updateFilterSizes = function () { + for (var i = 0; i < this._filters.length; ++i) { + this._filters[i].textureWidth = this._rttManager.textureWidth; + this._filters[i].textureHeight = this._rttManager.textureHeight; + } + this._filterSizesInvalid = true; }; - MaterialPassBase.prototype._iRemoveMaterialPassData = function (materialPassData) { - this._materialPassData.splice(this._materialPassData.indexOf(materialPassData), 1); - return materialPassData; + Filter3DRenderer.prototype.dispose = function () { + this._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate); + this._rttManager = null; + this._stage = null; }; - return MaterialPassBase; -})(NamedAssetBase); -module.exports = MaterialPassBase; - - -},{"awayjs-core/lib/errors/ArgumentError":undefined,"awayjs-core/lib/events/Event":undefined,"awayjs-core/lib/library/NamedAssetBase":undefined,"awayjs-display/lib/base/BlendMode":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/passes/MaterialPassMode":[function(require,module,exports){ -var MaterialPassMode = (function () { - function MaterialPassMode() { - } - MaterialPassMode.EFFECTS = 0x01; - /** - * - */ - MaterialPassMode.LIGHTING = 0x02; - /** - * - */ - MaterialPassMode.SUPER_SHADER = 0x03; - return MaterialPassMode; + return Filter3DRenderer; })(); -module.exports = MaterialPassMode; - - -},{}],"awayjs-stagegl/lib/materials/passes/SkyboxPass":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -/** - * SkyboxPass provides a material pass exclusively used to render sky boxes from a cube texture. - */ -var SkyboxPass = (function (_super) { - __extends(SkyboxPass, _super); - /** - * Creates a new SkyboxPass object. - * - * @param material The material to which this pass belongs. - */ - function SkyboxPass() { - _super.call(this); - } - SkyboxPass.prototype._iIncludeDependencies = function (shaderObject) { - shaderObject.useMipmapping = false; - }; - return SkyboxPass; -})(MaterialPassBase); -module.exports = SkyboxPass; +module.exports = Filter3DRenderer; -},{"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined}],"awayjs-stagegl/lib/materials/passes/TriangleBasicPass":[function(require,module,exports){ +},{"awayjs-core/lib/events/Event":undefined,"awayjs-stagegl/lib/base/ContextGLBlendFactor":undefined,"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat":undefined,"awayjs-stagegl/lib/managers/RTTBufferManager":undefined}],"awayjs-stagegl/lib/render/RendererBase":[function(require,module,exports){ var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); +var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); +var Point = require("awayjs-core/lib/geom/Point"); +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); +var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); +var RenderableMergeSort = require("awayjs-display/lib/sort/RenderableMergeSort"); +var RendererEvent = require("awayjs-display/lib/events/RendererEvent"); +var StageEvent = require("awayjs-display/lib/events/StageEvent"); +var EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); +var BillboardRenderable = require("awayjs-stagegl/lib/pool/BillboardRenderable"); +var LineSubMeshRenderable = require("awayjs-stagegl/lib/pool/LineSubMeshRenderable"); +var TriangleSubMeshRenderable = require("awayjs-stagegl/lib/pool/TriangleSubMeshRenderable"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); /** - * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, - * using material methods to define their appearance. + * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the + * contents of a partition + * + * @class away.render.RendererBase */ -var TriangleBasicPass = (function (_super) { - __extends(TriangleBasicPass, _super); +var RendererBase = (function (_super) { + __extends(RendererBase, _super); /** - * Creates a new CompiledPass object. - * - * @param material The material to which this pass belongs. + * Creates a new RendererBase object. */ - function TriangleBasicPass() { + function RendererBase() { + var _this = this; _super.call(this); - this._diffuseColor = 0xffffff; - this._diffuseR = 1; - this._diffuseG = 1; - this._diffuseB = 1; - this._diffuseA = 1; + this._viewPort = new Rectangle(); + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this._depthPrepass = false; + this._backgroundR = 0; + this._backgroundG = 0; + this._backgroundB = 0; + this._backgroundAlpha = 1; + this._shareContext = false; + this.textureRatioX = 1; + this.textureRatioY = 1; + this._pRttViewProjectionMatrix = new Matrix3D(); + this._localPos = new Point(); + this._globalPos = new Point(); + this._pScissorRect = new Rectangle(); + this._pNumTriangles = 0; + this._onViewportUpdatedDelegate = function (event) { return _this.onViewportUpdated(event); }; + this._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable); + this._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable); + this._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable); + this._onContextUpdateDelegate = function (event) { return _this.onContextUpdate(event); }; + //default sorting algorithm + this.renderableSorter = new RenderableMergeSort(); } - Object.defineProperty(TriangleBasicPass.prototype, "diffuseAlpha", { + Object.defineProperty(RendererBase.prototype, "numTriangles", { /** - * The alpha component of the diffuse reflection. + * */ get: function () { - return this._diffuseA; - }, - set: function (value) { - this._diffuseA = value; + return this._pNumTriangles; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleBasicPass.prototype, "diffuseColor", { + Object.defineProperty(RendererBase.prototype, "viewPort", { /** - * The color of the diffuse reflection when not using a texture. + * A viewPort rectangle equivalent of the Stage size and position. */ get: function () { - return this._diffuseColor; + return this._viewPort; }, - set: function (diffuseColor) { - this._diffuseColor = diffuseColor; - this._diffuseR = ((this._diffuseColor >> 16) & 0xff) / 0xff; - this._diffuseG = ((this._diffuseColor >> 8) & 0xff) / 0xff; - this._diffuseB = (this._diffuseColor & 0xff) / 0xff; + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "scissorRect", { + /** + * A scissor rectangle equivalent of the view size and position. + */ + get: function () { + return this._pScissorRect; }, enumerable: true, configurable: true }); - /** - * @inheritDoc - */ - TriangleBasicPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { - var code = ""; - var targetReg = sharedReg.shadedTarget; - var diffuseInputReg; - if (shaderObject.texture != null) { - diffuseInputReg = regCache.getFreeTextureReg(); - this._texturesIndex = diffuseInputReg.index; - code += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedReg, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping); - if (shaderObject.alphaThreshold > 0) { - var cutOffReg = regCache.getFreeFragmentConstant(); - this._fragmentConstantsIndex = cutOffReg.index * 4; - code += "sub " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n" + "kil " + targetReg + ".w\n" + "add " + targetReg + ".w, " + targetReg + ".w, " + cutOffReg + ".x\n"; - } - } - else { - diffuseInputReg = regCache.getFreeFragmentConstant(); - this._fragmentConstantsIndex = diffuseInputReg.index * 4; - code += "mov " + targetReg + ", " + diffuseInputReg + "\n"; - } - return code; - }; - TriangleBasicPass.prototype._iIncludeDependencies = function (dependencyCounter) { - if (dependencyCounter.texture != null) - dependencyCounter.uvDependencies++; - }; - /** - * @inheritDoc - */ - TriangleBasicPass.prototype._iActivate = function (pass, stage, camera) { - _super.prototype._iActivate.call(this, pass, stage, camera); - var shaderObject = pass.shaderObject; - if (shaderObject.texture != null) { - stage.context.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures ? ContextGLWrapMode.REPEAT : ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures ? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping ? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE); - stage.context.activateTexture(this._texturesIndex, shaderObject.texture); - if (shaderObject.alphaThreshold > 0) - shaderObject.fragmentConstantData[this._fragmentConstantsIndex] = shaderObject.alphaThreshold; - } - else { - var index = this._fragmentConstantsIndex; - var data = shaderObject.fragmentConstantData; - data[index] = this._diffuseR; - data[index + 1] = this._diffuseG; - data[index + 2] = this._diffuseB; - data[index + 3] = this._diffuseA; - } - }; - return TriangleBasicPass; -})(MaterialPassBase); -module.exports = TriangleBasicPass; - - -},{"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter":undefined,"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":undefined}],"awayjs-stagegl/lib/materials/passes/TriangleMethodPass":[function(require,module,exports){ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); -var MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); -var ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); -var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); -var EffectColorTransformMethod = require("awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod"); -var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); -/** - * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, - * using material methods to define their appearance. - */ -var TriangleMethodPass = (function (_super) { - __extends(TriangleMethodPass, _super); - /** - * Creates a new CompiledPass object. - * - * @param material The material to which this pass belongs. - */ - function TriangleMethodPass(passMode) { - var _this = this; - if (passMode === void 0) { passMode = 0x03; } - _super.call(this, passMode); - this._iMethodVOs = new Array(); - this._numEffectDependencies = 0; - this._onShaderInvalidatedDelegate = function (event) { return _this.onShaderInvalidated(event); }; - } - /** - * Factory method to create a concrete shader object for this pass. - * - * @param profile The compatibility profile used by the renderer. - */ - TriangleMethodPass.prototype.createShaderObject = function (profile) { - if (this._pLightPicker && (this.passMode & MaterialPassMode.LIGHTING)) - return new ShaderLightingObject(profile); - return new ShaderObjectBase(profile); - }; - /** - * Initializes the unchanging constant data for this material. - */ - TriangleMethodPass.prototype._iInitConstantData = function (shaderObject) { - _super.prototype._iInitConstantData.call(this, shaderObject); - //Updates method constants if they have changed. - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) - this._iMethodVOs[i].method.iInitConstants(shaderObject, this._iMethodVOs[i]); - }; - Object.defineProperty(TriangleMethodPass.prototype, "colorTransform", { + Object.defineProperty(RendererBase.prototype, "x", { /** - * The ColorTransform object to transform the colour of the material with. Defaults to null. + * */ get: function () { - return this.colorTransformMethod ? this.colorTransformMethod.colorTransform : null; + return this._localPos.x; }, set: function (value) { - if (value) { - if (this.colorTransformMethod == null) - this.colorTransformMethod = new EffectColorTransformMethod(); - this.colorTransformMethod.colorTransform = value; - } - else if (!value) { - if (this.colorTransformMethod) - this.colorTransformMethod = null; - } + if (this.x == value) + return; + this._globalPos.x = this._localPos.x = value; + this.updateGlobalPos(); }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodPass.prototype, "colorTransformMethod", { + Object.defineProperty(RendererBase.prototype, "y", { /** - * The EffectColorTransformMethod object to transform the colour of the material with. Defaults to null. + * */ get: function () { - return this._iColorTransformMethodVO ? this._iColorTransformMethodVO.method : null; + return this._localPos.y; }, set: function (value) { - if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.method == value) + if (this.y == value) return; - if (this._iColorTransformMethodVO) { - this._removeDependency(this._iColorTransformMethodVO); - this._iColorTransformMethodVO = null; - } - if (value) { - this._iColorTransformMethodVO = new MethodVO(value); - this._addDependency(this._iColorTransformMethodVO); - } + this._globalPos.y = this._localPos.y = value; + this.updateGlobalPos(); }, enumerable: true, configurable: true }); - TriangleMethodPass.prototype._removeDependency = function (methodVO, effectsDependency) { - if (effectsDependency === void 0) { effectsDependency = false; } - var index = this._iMethodVOs.indexOf(methodVO); - if (!effectsDependency) - this._numEffectDependencies--; - methodVO.method.removeEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate); - this._iMethodVOs.splice(index, 1); - this._pInvalidatePass(); - }; - TriangleMethodPass.prototype._addDependency = function (methodVO, effectsDependency, index) { - if (effectsDependency === void 0) { effectsDependency = false; } - if (index === void 0) { index = -1; } - methodVO.method.addEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate); - if (effectsDependency) { - if (index != -1) - this._iMethodVOs.splice(index + this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO); - else - this._iMethodVOs.push(methodVO); - this._numEffectDependencies++; - } - else { - this._iMethodVOs.splice(this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO); - } - this._pInvalidatePass(); - }; - /** - * Appends an "effect" shading method to the shader. Effect methods are those that do not influence the lighting - * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the - * methods added prior. - */ - TriangleMethodPass.prototype.addEffectMethod = function (method) { - this._addDependency(new MethodVO(method), true); - }; - Object.defineProperty(TriangleMethodPass.prototype, "numEffectMethods", { + Object.defineProperty(RendererBase.prototype, "width", { /** - * The number of "effect" methods added to the material. + * */ get: function () { - return this._numEffectDependencies; + return this._width; + }, + set: function (value) { + if (this._width == value) + return; + this._width = value; + this._pScissorRect.width = value; + if (this._pRttBufferManager) + this._pRttBufferManager.viewWidth = value; + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this.notifyScissorUpdate(); }, enumerable: true, configurable: true }); - /** - * Queries whether a given effects method was added to the material. - * - * @param method The method to be queried. - * @return true if the method was added to the material, false otherwise. - */ - TriangleMethodPass.prototype.hasEffectMethod = function (method) { - return this.getDependencyForMethod(method) != null; - }; - /** - * Returns the method added at the given index. - * @param index The index of the method to retrieve. - * @return The method at the given index. - */ - TriangleMethodPass.prototype.getEffectMethodAt = function (index) { - if (index < 0 || index > this._numEffectDependencies - 1) - return null; - return this._iMethodVOs[index + this._iMethodVOs.length - this._numEffectDependencies].method; - }; - /** - * Adds an effect method at the specified index amongst the methods already added to the material. Effect - * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines, - * etc. The method will be applied to the result of the methods with a lower index. - */ - TriangleMethodPass.prototype.addEffectMethodAt = function (method, index) { - this._addDependency(new MethodVO(method), true, index); - }; - /** - * Removes an effect method from the material. - * @param method The method to be removed. - */ - TriangleMethodPass.prototype.removeEffectMethod = function (method) { - var methodVO = this.getDependencyForMethod(method); - if (methodVO != null) - this._removeDependency(methodVO, true); - }; - TriangleMethodPass.prototype.getDependencyForMethod = function (method) { - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) - if (this._iMethodVOs[i].method == method) - return this._iMethodVOs[i]; - return null; - }; - Object.defineProperty(TriangleMethodPass.prototype, "normalMethod", { + Object.defineProperty(RendererBase.prototype, "height", { /** - * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod. + * */ get: function () { - return this._iNormalMethodVO ? this._iNormalMethodVO.method : null; + return this._height; }, set: function (value) { - if (this._iNormalMethodVO && this._iNormalMethodVO.method == value) + if (this._height == value) return; - if (this._iNormalMethodVO) { - this._removeDependency(this._iNormalMethodVO); - this._iNormalMethodVO = null; - } - if (value) { - this._iNormalMethodVO = new MethodVO(value); - this._addDependency(this._iNormalMethodVO); - } + this._height = value; + this._pScissorRect.height = value; + if (this._pRttBufferManager) + this._pRttBufferManager.viewHeight = value; + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this.notifyScissorUpdate(); }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodPass.prototype, "ambientMethod", { + RendererBase.prototype._iCreateEntityCollector = function () { + return new EntityCollector(); + }; + Object.defineProperty(RendererBase.prototype, "_iBackgroundR", { /** - * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod. + * The background color's red component, used when clearing. + * + * @private */ get: function () { - return this._iAmbientMethodVO ? this._iAmbientMethodVO.method : null; + return this._backgroundR; }, set: function (value) { - if (this._iAmbientMethodVO && this._iAmbientMethodVO.method == value) + if (this._backgroundR == value) return; - if (this._iAmbientMethodVO) { - this._removeDependency(this._iAmbientMethodVO); - this._iAmbientMethodVO = null; - } - if (value) { - this._iAmbientMethodVO = new MethodVO(value); - this._addDependency(this._iAmbientMethodVO); - } + this._backgroundR = value; + this._pBackBufferInvalid = true; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodPass.prototype, "shadowMethod", { + Object.defineProperty(RendererBase.prototype, "_iBackgroundG", { /** - * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null. + * The background color's green component, used when clearing. + * + * @private */ get: function () { - return this._iShadowMethodVO ? this._iShadowMethodVO.method : null; + return this._backgroundG; }, set: function (value) { - if (this._iShadowMethodVO && this._iShadowMethodVO.method == value) + if (this._backgroundG == value) return; - if (this._iShadowMethodVO) { - this._removeDependency(this._iShadowMethodVO); - this._iShadowMethodVO = null; - } - if (value) { - this._iShadowMethodVO = new MethodVO(value); - this._addDependency(this._iShadowMethodVO); - } + this._backgroundG = value; + this._pBackBufferInvalid = true; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodPass.prototype, "diffuseMethod", { + Object.defineProperty(RendererBase.prototype, "_iBackgroundB", { /** - * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod. + * The background color's blue component, used when clearing. + * + * @private */ get: function () { - return this._iDiffuseMethodVO ? this._iDiffuseMethodVO.method : null; + return this._backgroundB; }, set: function (value) { - if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.method == value) + if (this._backgroundB == value) return; - if (this._iDiffuseMethodVO) { - this._removeDependency(this._iDiffuseMethodVO); - this._iDiffuseMethodVO = null; - } - if (value) { - this._iDiffuseMethodVO = new MethodVO(value); - this._addDependency(this._iDiffuseMethodVO); - } + this._backgroundB = value; + this._pBackBufferInvalid = true; }, enumerable: true, configurable: true }); - Object.defineProperty(TriangleMethodPass.prototype, "specularMethod", { + Object.defineProperty(RendererBase.prototype, "stage", { /** - * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod. + * The Stage that will provide the ContextGL used for rendering. */ get: function () { - return this._iSpecularMethodVO ? this._iSpecularMethodVO.method : null; + return this._pStage; }, set: function (value) { - if (this._iSpecularMethodVO && this._iSpecularMethodVO.method == value) + if (value == this._pStage) return; - if (this._iSpecularMethodVO) { - this._removeDependency(this._iSpecularMethodVO); - this._iSpecularMethodVO = null; - } - if (value) { - this._iSpecularMethodVO = new MethodVO(value); - this._addDependency(this._iSpecularMethodVO); - } + this.iSetStage(value); }, enumerable: true, configurable: true }); - /** - * @inheritDoc - */ - TriangleMethodPass.prototype.dispose = function () { - _super.prototype.dispose.call(this); - while (this._iMethodVOs.length) - this._removeDependency(this._iMethodVOs[0]); - this._iMethodVOs = null; - }; - /** - * Called when any method's shader code is invalidated. - */ - TriangleMethodPass.prototype.onShaderInvalidated = function (event) { - this._pInvalidatePass(); - }; - // RENDER LOOP - /** - * @inheritDoc - */ - TriangleMethodPass.prototype._iActivate = function (pass, stage, camera) { - _super.prototype._iActivate.call(this, pass, stage, camera); - var methodVO; - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod) - methodVO.method.iActivate(pass.shaderObject, methodVO, stage); + RendererBase.prototype.iSetStage = function (value) { + if (this._pStage) { + this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); } - }; - /** - * - * - * @param renderable - * @param stage - * @param camera - */ - TriangleMethodPass.prototype.setRenderState = function (pass, renderable, stage, camera, viewProjection) { - _super.prototype.setRenderState.call(this, pass, renderable, stage, camera, viewProjection); - var methodVO; - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod) - methodVO.method.iSetRenderState(pass.shaderObject, methodVO, renderable, stage, camera); + if (!value) { + this._pStage = null; + this._pContext = null; } - }; - /** - * @inheritDoc - */ - TriangleMethodPass.prototype._iDeactivate = function (pass, stage) { - _super.prototype._iDeactivate.call(this, pass, stage); - var methodVO; - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod) - methodVO.method.iDeactivate(pass.shaderObject, methodVO, stage); + else { + this._pStage = value; + this._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); + /* + if (_backgroundImageRenderer) + _backgroundImageRenderer.stage = value; + */ + if (this._pStage.context) + this._pContext = this._pStage.context; } + this._pBackBufferInvalid = true; + this.updateGlobalPos(); }; - TriangleMethodPass.prototype._iIncludeDependencies = function (shaderObject) { - var i; - var len = this._iMethodVOs.length; - for (i = 0; i < len; ++i) - this.setupAndCountDependencies(shaderObject, this._iMethodVOs[i]); - for (i = 0; i < len; ++i) - this._iMethodVOs[i].useMethod = this._iMethodVOs[i].method.iIsUsed(shaderObject); - _super.prototype._iIncludeDependencies.call(this, shaderObject); - }; + Object.defineProperty(RendererBase.prototype, "shareContext", { + /** + * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks + * to share the same ContextGL object. + */ + get: function () { + return this._shareContext; + }, + set: function (value) { + if (this._shareContext == value) + return; + this._shareContext = value; + this.updateGlobalPos(); + }, + enumerable: true, + configurable: true + }); /** - * Counts the dependencies for a given method. - * @param method The method to count the dependencies for. - * @param methodVO The method's data for this material. + * Disposes the resources used by the RendererBase. */ - TriangleMethodPass.prototype.setupAndCountDependencies = function (shaderObject, methodVO) { - methodVO.reset(); - methodVO.method.iInitVO(shaderObject, methodVO); - if (methodVO.needsProjection) - shaderObject.projectionDependencies++; - if (methodVO.needsGlobalVertexPos) { - shaderObject.globalPosDependencies++; - if (methodVO.needsGlobalFragmentPos) - shaderObject.usesGlobalPosFragment = true; - } - else if (methodVO.needsGlobalFragmentPos) { - shaderObject.globalPosDependencies++; - shaderObject.usesGlobalPosFragment = true; - } - if (methodVO.needsNormals) - shaderObject.normalDependencies++; - if (methodVO.needsTangents) - shaderObject.tangentDependencies++; - if (methodVO.needsView) - shaderObject.viewDirDependencies++; - if (methodVO.needsUV) - shaderObject.uvDependencies++; - if (methodVO.needsSecondaryUV) - shaderObject.secondaryUVDependencies++; + RendererBase.prototype.dispose = function () { + if (this._pRttBufferManager) + this._pRttBufferManager.dispose(); + this._pRttBufferManager = null; + this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); + this._pStage = null; + /* + if (_backgroundImageRenderer) { + _backgroundImageRenderer.dispose(); + _backgroundImageRenderer = null; + } + */ }; - TriangleMethodPass.prototype._iGetPreLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - if (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) - code += this._iAmbientMethodVO.method.iGetVertexCode(shaderObject, this._iAmbientMethodVO, registerCache, sharedRegisters); - if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) - code += this._iDiffuseMethodVO.method.iGetVertexCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters); - if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) - code += this._iSpecularMethodVO.method.iGetVertexCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters); - return code; + RendererBase.prototype.render = function (entityCollector) { + this._viewportDirty = false; + this._scissorDirty = false; }; - TriangleMethodPass.prototype._iGetPreLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - if (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) { - code += this._iAmbientMethodVO.method.iGetFragmentCode(shaderObject, this._iAmbientMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); - if (this._iAmbientMethodVO.needsNormals) - registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); - if (this._iAmbientMethodVO.needsView) - registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + /** + * Renders the potentially visible geometry to the back buffer or texture. + * @param entityCollector The EntityCollector object containing the potentially visible geometry. + * @param target An option target texture to render to. + * @param surfaceSelector The index of a CubeTexture's face to render to. + * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. + */ + RendererBase.prototype._iRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + //TODO refactor setTarget so that rendertextures are created before this check + if (!this._pStage || !this._pContext) + return; + this._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection); + this._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1); + this.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector); + for (var i = 0; i < 8; ++i) { + this._pContext.setVertexBufferAt(i, null); + this._pContext.setTextureAt(i, null); } - if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) - code += this._iDiffuseMethodVO.method.iGetFragmentPreLightingCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters); - if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) - code += this._iSpecularMethodVO.method.iGetFragmentPreLightingCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters); - return code; - }; - TriangleMethodPass.prototype._iGetPerLightDiffuseFragmentCode = function (shaderObject, lightDirReg, diffuseColorReg, registerCache, sharedRegisters) { - return this._iDiffuseMethodVO.method.iGetFragmentCodePerLight(shaderObject, this._iDiffuseMethodVO, lightDirReg, diffuseColorReg, registerCache, sharedRegisters); - }; - TriangleMethodPass.prototype._iGetPerLightSpecularFragmentCode = function (shaderObject, lightDirReg, specularColorReg, registerCache, sharedRegisters) { - return this._iSpecularMethodVO.method.iGetFragmentCodePerLight(shaderObject, this._iSpecularMethodVO, lightDirReg, specularColorReg, registerCache, sharedRegisters); - }; - TriangleMethodPass.prototype._iGetPerProbeDiffuseFragmentCode = function (shaderObject, texReg, weightReg, registerCache, sharedRegisters) { - return this._iDiffuseMethodVO.method.iGetFragmentCodePerProbe(shaderObject, this._iDiffuseMethodVO, texReg, weightReg, registerCache, sharedRegisters); }; - TriangleMethodPass.prototype._iGetPerProbeSpecularFragmentCode = function (shaderObject, texReg, weightReg, registerCache, sharedRegisters) { - return this._iSpecularMethodVO.method.iGetFragmentCodePerProbe(shaderObject, this._iSpecularMethodVO, texReg, weightReg, registerCache, sharedRegisters); - }; - TriangleMethodPass.prototype._iGetPostLightingVertexCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - if (this._iShadowMethodVO) - code += this._iShadowMethodVO.method.iGetVertexCode(shaderObject, this._iShadowMethodVO, registerCache, sharedRegisters); - return code; + RendererBase.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { }; - TriangleMethodPass.prototype._iGetPostLightingFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - var code = ""; - if (shaderObject.useAlphaPremultiplied && this._pEnableBlending) { - code += "add " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.commons + ".z\n" + "div " + sharedRegisters.shadedTarget + ".xyz, " + sharedRegisters.shadedTarget + ", " + sharedRegisters.shadedTarget + ".w\n" + "sub " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.shadedTarget + ".w, " + sharedRegisters.commons + ".z\n" + "sat " + sharedRegisters.shadedTarget + ".xyz, " + sharedRegisters.shadedTarget + "\n"; - } - if (this._iShadowMethodVO) - code += this._iShadowMethodVO.method.iGetFragmentCode(shaderObject, this._iShadowMethodVO, sharedRegisters.shadowTarget, registerCache, sharedRegisters); - if (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) { - code += this._iDiffuseMethodVO.method.iGetFragmentPostLightingCode(shaderObject, this._iDiffuseMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); - // resolve other dependencies as well? - if (this._iDiffuseMethodVO.needsNormals) - registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); - if (this._iDiffuseMethodVO.needsView) - registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); - } - if (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) { - code += this._iSpecularMethodVO.method.iGetFragmentPostLightingCode(shaderObject, this._iSpecularMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters); - if (this._iSpecularMethodVO.needsNormals) - registerCache.removeFragmentTempUsage(sharedRegisters.normalFragment); - if (this._iSpecularMethodVO.needsView) - registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); + RendererBase.prototype.pCollectRenderables = function (entityCollector) { + //reset head values + this._pBlendedRenderableHead = null; + this._pOpaqueRenderableHead = null; + this._pNumTriangles = 0; + //grab entity head + var item = entityCollector.entityHead; + //set temp values for entry point and camera forward vector + this._pCamera = entityCollector.camera; + this._iEntryPoint = this._pCamera.scenePosition; + this._pCameraForward = this._pCamera.transform.forwardVector; + while (item) { + item.entity._iCollectRenderables(this); + item = item.next; } - if (this._iShadowMethodVO) - registerCache.removeFragmentTempUsage(sharedRegisters.shadowTarget); - return code; + //sort the resulting renderables + this._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead); + this._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead); }; /** - * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space - * dependencies exist. + * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up. + * + * @param entityCollector The EntityCollector object containing the potentially visible geometry. + * @param target An option target texture to render to. + * @param surfaceSelector The index of a CubeTexture's face to render to. + * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. */ - TriangleMethodPass.prototype._pUsesTangentSpace = function (shaderObject) { - if (shaderObject.usesProbes) - return false; - var methodVO; - var len = this._iMethodVOs.length; - for (var i = 0; i < len; ++i) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod && !methodVO.method.iUsesTangentSpace()) - return false; + RendererBase.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + this._pContext.setRenderTarget(target, true, surfaceSelector); + if ((target || !this._shareContext) && !this._depthPrepass) + this._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0); + this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); + this._pStage.scissorRect = scissorRect; + /* + if (_backgroundImageRenderer) + _backgroundImageRenderer.render(); + */ + this.pDraw(entityCollector, target); + //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! + //this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie + if (!this._shareContext) { + if (this._snapshotRequired && this._snapshotBitmapData) { + this._pContext.drawToBitmapData(this._snapshotBitmapData); + this._snapshotRequired = false; + } } - return true; + this._pStage.scissorRect = null; + }; + /* + * Will draw the renderer's output on next render to the provided bitmap data. + * */ + RendererBase.prototype.queueSnapshot = function (bmd) { + this._snapshotRequired = true; + this._snapshotBitmapData = bmd; }; /** - * Indicates whether or not normals are output in tangent space. + * Performs the actual drawing of geometry to the target. + * @param entityCollector The EntityCollector object containing the potentially visible geometry. */ - TriangleMethodPass.prototype._pOutputsTangentNormals = function (shaderObject) { - return this._iNormalMethodVO.method.iOutputsTangentNormals(); + RendererBase.prototype.pDraw = function (entityCollector, target) { + throw new AbstractMethodError(); }; /** - * Indicates whether or not normals are output by the pass. + * Assign the context once retrieved */ - TriangleMethodPass.prototype._pOutputsNormals = function (shaderObject) { - return this._iNormalMethodVO && this._iNormalMethodVO.useMethod; - }; - TriangleMethodPass.prototype._iGetNormalVertexCode = function (shaderObject, registerCache, sharedRegisters) { - return this._iNormalMethodVO.method.iGetVertexCode(shaderObject, this._iNormalMethodVO, registerCache, sharedRegisters); - }; - TriangleMethodPass.prototype._iGetNormalFragmentCode = function (shaderObject, registerCache, sharedRegisters) { - var code = this._iNormalMethodVO.method.iGetFragmentCode(shaderObject, this._iNormalMethodVO, sharedRegisters.normalFragment, registerCache, sharedRegisters); - if (this._iNormalMethodVO.needsView) - registerCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment); - if (this._iNormalMethodVO.needsGlobalFragmentPos || this._iNormalMethodVO.needsGlobalVertexPos) - registerCache.removeVertexTempUsage(sharedRegisters.globalPositionVertex); - return code; + RendererBase.prototype.onContextUpdate = function (event) { + this._pContext = this._pStage.context; }; + Object.defineProperty(RendererBase.prototype, "_iBackgroundAlpha", { + get: function () { + return this._backgroundAlpha; + }, + set: function (value) { + if (this._backgroundAlpha == value) + return; + this._backgroundAlpha = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + /* + public get iBackground():Texture2DBase + { + return this._background; + } + */ + /* + public set iBackground(value:Texture2DBase) + { + if (this._backgroundImageRenderer && !value) { + this._backgroundImageRenderer.dispose(); + this._backgroundImageRenderer = null; + } + + if (!this._backgroundImageRenderer && value) + { + + this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage); + + } + + + this._background = value; + + if (this._backgroundImageRenderer) + this._backgroundImageRenderer.texture = value; + } + */ + /* + public get backgroundImageRenderer():BackgroundImageRenderer + { + return _backgroundImageRenderer; + } + */ /** - * @inheritDoc + * @private */ - TriangleMethodPass.prototype._iGetVertexCode = function (shaderObject, regCache, sharedReg) { - var code = ""; - var methodVO; - var len = this._iMethodVOs.length; - for (var i = len - this._numEffectDependencies; i < len; i++) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod) { - code += methodVO.method.iGetVertexCode(shaderObject, methodVO, regCache, sharedReg); - if (methodVO.needsGlobalVertexPos || methodVO.needsGlobalFragmentPos) - regCache.removeVertexTempUsage(sharedReg.globalPositionVertex); - } - } - if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod) - code += this._iColorTransformMethodVO.method.iGetVertexCode(shaderObject, this._iColorTransformMethodVO, regCache, sharedReg); - return code; + RendererBase.prototype.notifyScissorUpdate = function () { + if (this._scissorDirty) + return; + this._scissorDirty = true; + if (!this._scissorUpdated) + this._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED); + this.dispatchEvent(this._scissorUpdated); }; /** - * @inheritDoc + * @private */ - TriangleMethodPass.prototype._iGetFragmentCode = function (shaderObject, regCache, sharedReg) { - var code = ""; - var alphaReg; - if (this.preserveAlpha && this._numEffectDependencies > 0) { - alphaReg = regCache.getFreeFragmentSingleTemp(); - regCache.addFragmentTempUsages(alphaReg, 1); - code += "mov " + alphaReg + ", " + sharedReg.shadedTarget + ".w\n"; - } - var methodVO; - var len = this._iMethodVOs.length; - for (var i = len - this._numEffectDependencies; i < len; i++) { - methodVO = this._iMethodVOs[i]; - if (methodVO.useMethod) { - code += methodVO.method.iGetFragmentCode(shaderObject, methodVO, sharedReg.shadedTarget, regCache, sharedReg); - if (methodVO.needsNormals) - regCache.removeFragmentTempUsage(sharedReg.normalFragment); - if (methodVO.needsView) - regCache.removeFragmentTempUsage(sharedReg.viewDirFragment); - } - } - if (this.preserveAlpha && this._numEffectDependencies > 0) { - code += "mov " + sharedReg.shadedTarget + ".w, " + alphaReg + "\n"; - regCache.removeFragmentTempUsage(alphaReg); - } - if (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod) - code += this._iColorTransformMethodVO.method.iGetFragmentCode(shaderObject, this._iColorTransformMethodVO, sharedReg.shadedTarget, regCache, sharedReg); - return code; + RendererBase.prototype.notifyViewportUpdate = function () { + if (this._viewportDirty) + return; + this._viewportDirty = true; + if (!this._viewPortUpdated) + this._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED); + this.dispatchEvent(this._viewPortUpdated); }; /** - * Indicates whether the shader uses any shadows. + * */ - TriangleMethodPass.prototype._iUsesShadows = function () { - return Boolean(this._iShadowMethodVO || this.lightPicker.castingDirectionalLights.length > 0 || this.lightPicker.castingPointLights.length > 0); + RendererBase.prototype.onViewportUpdated = function (event) { + this._viewPort = this._pStage.viewPort; + //TODO stop firing viewport updated for every stagegl viewport change + if (this._shareContext) { + this._pScissorRect.x = this._globalPos.x - this._pStage.x; + this._pScissorRect.y = this._globalPos.y - this._pStage.y; + this.notifyScissorUpdate(); + } + this.notifyViewportUpdate(); }; /** - * Indicates whether the shader uses any specular component. + * */ - TriangleMethodPass.prototype._iUsesSpecular = function () { - return Boolean(this._iSpecularMethodVO); - }; - return TriangleMethodPass; -})(MaterialPassBase); -module.exports = TriangleMethodPass; - - -},{"awayjs-stagegl/lib/events/ShadingMethodEvent":undefined,"awayjs-stagegl/lib/materials/compilation/MethodVO":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject":undefined,"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase":undefined,"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassBase":undefined,"awayjs-stagegl/lib/materials/passes/MaterialPassMode":undefined}],"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager":[function(require,module,exports){ -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var AssetType = require("awayjs-core/lib/library/AssetType"); -var BitmapTexture = require("awayjs-core/lib/textures/BitmapTexture"); -var LineBasicMaterial = require("awayjs-stagegl/lib/materials/LineBasicMaterial"); -var TriangleBasicMaterial = require("awayjs-stagegl/lib/materials/TriangleBasicMaterial"); -var DefaultMaterialManager = (function () { - function DefaultMaterialManager() { - } - DefaultMaterialManager.getDefaultMaterial = function (materialOwner) { - if (materialOwner === void 0) { materialOwner = null; } - if (materialOwner != null && materialOwner.assetType == AssetType.LINE_SUB_MESH) { - if (!DefaultMaterialManager._defaultLineMaterial) - DefaultMaterialManager.createDefaultLineMaterial(); - return DefaultMaterialManager._defaultLineMaterial; + RendererBase.prototype.updateGlobalPos = function () { + if (this._shareContext) { + this._pScissorRect.x = this._globalPos.x - this._viewPort.x; + this._pScissorRect.y = this._globalPos.y - this._viewPort.y; } else { - if (!DefaultMaterialManager._defaultTriangleMaterial) - DefaultMaterialManager.createDefaultTriangleMaterial(); - return DefaultMaterialManager._defaultTriangleMaterial; - } - }; - DefaultMaterialManager.getDefaultTexture = function (materialOwner) { - if (materialOwner === void 0) { materialOwner = null; } - if (!DefaultMaterialManager._defaultTexture) - DefaultMaterialManager.createDefaultTexture(); - return DefaultMaterialManager._defaultTexture; - }; - DefaultMaterialManager.createDefaultTexture = function () { - DefaultMaterialManager._defaultBitmapData = DefaultMaterialManager.createCheckeredBitmapData(); - DefaultMaterialManager._defaultTexture = new BitmapTexture(DefaultMaterialManager._defaultBitmapData, true); - DefaultMaterialManager._defaultTexture.name = "defaultTexture"; - }; - DefaultMaterialManager.createCheckeredBitmapData = function () { - var b = new BitmapData(8, 8, false, 0x000000); - //create chekerboard - var i, j; - for (i = 0; i < 8; i++) { - for (j = 0; j < 8; j++) { - if ((j & 1) ^ (i & 1)) { - b.setPixel(i, j, 0XFFFFFF); - } - } + this._pScissorRect.x = 0; + this._pScissorRect.y = 0; + this._viewPort.x = this._globalPos.x; + this._viewPort.y = this._globalPos.y; } - return b; - }; - DefaultMaterialManager.createDefaultTriangleMaterial = function () { - if (!DefaultMaterialManager._defaultTexture) - DefaultMaterialManager.createDefaultTexture(); - DefaultMaterialManager._defaultTriangleMaterial = new TriangleBasicMaterial(DefaultMaterialManager._defaultTexture); - DefaultMaterialManager._defaultTriangleMaterial.mipmap = false; - DefaultMaterialManager._defaultTriangleMaterial.smooth = false; - DefaultMaterialManager._defaultTriangleMaterial.name = "defaultTriangleMaterial"; - }; - DefaultMaterialManager.createDefaultLineMaterial = function () { - DefaultMaterialManager._defaultLineMaterial = new LineBasicMaterial(); - DefaultMaterialManager._defaultLineMaterial.name = "defaultSegmentMaterial"; + this.notifyScissorUpdate(); }; - return DefaultMaterialManager; -})(); -module.exports = DefaultMaterialManager; - - -},{"awayjs-core/lib/base/BitmapData":undefined,"awayjs-core/lib/library/AssetType":undefined,"awayjs-core/lib/textures/BitmapTexture":undefined,"awayjs-stagegl/lib/materials/LineBasicMaterial":undefined,"awayjs-stagegl/lib/materials/TriangleBasicMaterial":undefined}],"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper":[function(require,module,exports){ -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -var ShaderCompilerHelper = (function () { - function ShaderCompilerHelper() { - } /** - * A helper method that generates standard code for sampling from a texture using the normal uv coordinates. - * @param vo The MethodVO object linking this method with the pass currently being compiled. - * @param sharedReg The shared register object for the shader. - * @param inputReg The texture stream register. - * @param texture The texture which will be assigned to the given slot. - * @param uvReg An optional uv register if coordinates different from the primary uv coordinates are to be used. - * @param forceWrap If true, texture wrapping is enabled regardless of the material setting. - * @return The fragment code that performs the sampling. * + * @param billboard * @protected */ - ShaderCompilerHelper.getTex2DSampleCode = function (targetReg, sharedReg, inputReg, texture, smooth, repeat, mipmaps, uvReg, forceWrap) { - if (uvReg === void 0) { uvReg = null; } - if (forceWrap === void 0) { forceWrap = null; } - var wrap = forceWrap || (repeat ? "wrap" : "clamp"); - var format = ShaderCompilerHelper.getFormatStringForTexture(texture); - var enableMipMaps = mipmaps && texture.hasMipmaps; - var filter = (smooth) ? (enableMipMaps ? "linear,miplinear" : "linear") : (enableMipMaps ? "nearest,mipnearest" : "nearest"); - if (uvReg == null) - uvReg = sharedReg.uvVarying; - return "tex " + targetReg + ", " + uvReg + ", " + inputReg + " <2d," + filter + "," + format + wrap + ">\n"; + RendererBase.prototype.applyBillboard = function (billboard) { + this._applyRenderable(this._billboardRenderablePool.getItem(billboard)); }; /** - * A helper method that generates standard code for sampling from a cube texture. - * @param vo The MethodVO object linking this method with the pass currently being compiled. - * @param targetReg The register in which to store the sampled colour. - * @param inputReg The texture stream register. - * @param texture The cube map which will be assigned to the given slot. - * @param uvReg The direction vector with which to sample the cube map. * - * @protected + * @param triangleSubMesh */ - ShaderCompilerHelper.getTexCubeSampleCode = function (targetReg, inputReg, texture, smooth, mipmaps, uvReg) { - var filter; - var format = ShaderCompilerHelper.getFormatStringForTexture(texture); - var enableMipMaps = mipmaps && texture.hasMipmaps; - var filter = (smooth) ? (enableMipMaps ? "linear,miplinear" : "linear") : (enableMipMaps ? "nearest,mipnearest" : "nearest"); - return "tex " + targetReg + ", " + uvReg + ", " + inputReg + " \n"; + RendererBase.prototype.applyTriangleSubMesh = function (triangleSubMesh) { + this._applyRenderable(this._triangleSubMeshRenderablePool.getItem(triangleSubMesh)); + }; + /** + * + * @param lineSubMesh + */ + RendererBase.prototype.applyLineSubMesh = function (lineSubMesh) { + this._applyRenderable(this._lineSubMeshRenderablePool.getItem(lineSubMesh)); }; /** - * Generates a texture format string for the sample instruction. - * @param texture The texture for which to get the format string. - * @return * + * @param renderable * @protected */ - ShaderCompilerHelper.getFormatStringForTexture = function (texture) { - switch (texture.format) { - case ContextGLTextureFormat.COMPRESSED: - return "dxt1,"; - break; - case ContextGLTextureFormat.COMPRESSED_ALPHA: - return "dxt5,"; - break; - default: - return ""; + RendererBase.prototype._applyRenderable = function (renderable) { + var material = renderable.materialOwner.material; + var entity = renderable.sourceEntity; + var position = entity.scenePosition; + if (!material) + material = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner); + //update material if invalidated + material._iUpdateMaterial(); + //set ids for faster referencing + renderable.material = material; + renderable.materialId = material._iMaterialId; + renderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId; + renderable.cascaded = false; + // project onto camera's z-axis + position = this._iEntryPoint.subtract(position); + renderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward); + //store reference to scene transform + renderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera); + if (material.requiresBlending) { + renderable.next = this._pBlendedRenderableHead; + this._pBlendedRenderableHead = renderable; + } + else { + renderable.next = this._pOpaqueRenderableHead; + this._pOpaqueRenderableHead = renderable; } + this._pNumTriangles += renderable.numTriangles; + //handle any overflow for renderables with data that exceeds GPU limitations + if (renderable.overflow) + this._applyRenderable(renderable.overflow); }; - return ShaderCompilerHelper; -})(); -module.exports = ShaderCompilerHelper; + return RendererBase; +})(EventDispatcher); +module.exports = RendererBase; -},{"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat":undefined}],"awayjs-stagegl/lib/swfobject":[function(require,module,exports){ +},{"awayjs-core/lib/errors/AbstractMethodError":undefined,"awayjs-core/lib/events/EventDispatcher":undefined,"awayjs-core/lib/geom/Matrix3D":undefined,"awayjs-core/lib/geom/Point":undefined,"awayjs-core/lib/geom/Rectangle":undefined,"awayjs-display/lib/events/RendererEvent":undefined,"awayjs-display/lib/events/StageEvent":undefined,"awayjs-display/lib/pool/RenderablePool":undefined,"awayjs-display/lib/sort/RenderableMergeSort":undefined,"awayjs-display/lib/traverse/EntityCollector":undefined,"awayjs-stagegl/lib/base/ContextGLCompareMode":undefined,"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager":undefined,"awayjs-stagegl/lib/pool/BillboardRenderable":undefined,"awayjs-stagegl/lib/pool/LineSubMeshRenderable":undefined,"awayjs-stagegl/lib/pool/TriangleSubMeshRenderable":undefined}],"awayjs-stagegl/lib/swfobject":[function(require,module,exports){ /*! SWFObject v2.2 is released under the MIT License */ diff --git a/build/awayjs-stagegl.js.map b/build/awayjs-stagegl.js.map index 1648bb69..6186470b 100644 --- a/build/awayjs-stagegl.js.map +++ b/build/awayjs-stagegl.js.map @@ -24,64 +24,43 @@ "awayjs-stagegl/lib/animators/animatorbase.ts", "awayjs-stagegl/lib/animators/data/animationregistercache.ts", "awayjs-stagegl/lib/animators/states/ianimationstate.ts", - "awayjs-stagegl/lib/core/base/stage.ts", - "awayjs-stagegl/lib/core/pool/billboardrenderable.ts", - "awayjs-stagegl/lib/core/pool/indexdatapool.ts", - "awayjs-stagegl/lib/core/pool/indexdata.ts", - "awayjs-stagegl/lib/core/pool/linesubmeshrenderable.ts", - "awayjs-stagegl/lib/core/pool/materialdatapool.ts", - "awayjs-stagegl/lib/core/pool/materialdata.ts", - "awayjs-stagegl/lib/core/pool/materialpassdatapool.ts", - "awayjs-stagegl/lib/core/pool/materialpassdata.ts", - "awayjs-stagegl/lib/core/pool/programdatapool.ts", - "awayjs-stagegl/lib/core/pool/programdata.ts", - "awayjs-stagegl/lib/core/pool/renderablebase.ts", - "awayjs-stagegl/lib/core/pool/skyboxrenderable.ts", - "awayjs-stagegl/lib/core/pool/texturedatapool.ts", - "awayjs-stagegl/lib/core/pool/texturedata.ts", - "awayjs-stagegl/lib/core/pool/trianglesubmeshrenderable.ts", - "awayjs-stagegl/lib/core/pool/vertexdatapool.ts", - "awayjs-stagegl/lib/core/pool/vertexdata.ts", - "awayjs-stagegl/lib/core/render/defaultrenderer.ts", - "awayjs-stagegl/lib/core/render/depthrenderer.ts", - "awayjs-stagegl/lib/core/render/filter3drenderer.ts", - "awayjs-stagegl/lib/core/render/rendererbase.ts", - "awayjs-stagegl/lib/core/stagegl/contextglbase.ts", - "awayjs-stagegl/lib/core/stagegl/contextglblendfactor.ts", - "awayjs-stagegl/lib/core/stagegl/contextglclearmask.ts", - "awayjs-stagegl/lib/core/stagegl/contextglcomparemode.ts", - "awayjs-stagegl/lib/core/stagegl/contextglmipfilter.ts", - "awayjs-stagegl/lib/core/stagegl/contextglprofile.ts", - "awayjs-stagegl/lib/core/stagegl/contextglprogramtype.ts", - "awayjs-stagegl/lib/core/stagegl/contextglstencilaction.ts", - "awayjs-stagegl/lib/core/stagegl/contextgltexturefilter.ts", - "awayjs-stagegl/lib/core/stagegl/contextgltextureformat.ts", - "awayjs-stagegl/lib/core/stagegl/contextgltriangleface.ts", - "awayjs-stagegl/lib/core/stagegl/contextglvertexbufferformat.ts", - "awayjs-stagegl/lib/core/stagegl/contextglwrapmode.ts", - "awayjs-stagegl/lib/core/stagegl/contextstage3d.ts", - "awayjs-stagegl/lib/core/stagegl/contextwebgl.ts", - "awayjs-stagegl/lib/core/stagegl/cubetextureflash.ts", - "awayjs-stagegl/lib/core/stagegl/cubetexturewebgl.ts", - "awayjs-stagegl/lib/core/stagegl/icontextstagegl.ts", - "awayjs-stagegl/lib/core/stagegl/icubetexture.ts", - "awayjs-stagegl/lib/core/stagegl/iindexbuffer.ts", - "awayjs-stagegl/lib/core/stagegl/iprogram.ts", - "awayjs-stagegl/lib/core/stagegl/itexturebase.ts", - "awayjs-stagegl/lib/core/stagegl/itexture.ts", - "awayjs-stagegl/lib/core/stagegl/ivertexbuffer.ts", - "awayjs-stagegl/lib/core/stagegl/indexbufferflash.ts", - "awayjs-stagegl/lib/core/stagegl/indexbufferwebgl.ts", - "awayjs-stagegl/lib/core/stagegl/opcodes.ts", - "awayjs-stagegl/lib/core/stagegl/programflash.ts", - "awayjs-stagegl/lib/core/stagegl/programwebgl.ts", - "awayjs-stagegl/lib/core/stagegl/resourcebaseflash.ts", - "awayjs-stagegl/lib/core/stagegl/samplerstate.ts", - "awayjs-stagegl/lib/core/stagegl/texturebasewebgl.ts", - "awayjs-stagegl/lib/core/stagegl/textureflash.ts", - "awayjs-stagegl/lib/core/stagegl/texturewebgl.ts", - "awayjs-stagegl/lib/core/stagegl/vertexbufferflash.ts", - "awayjs-stagegl/lib/core/stagegl/vertexbufferwebgl.ts", + "awayjs-stagegl/lib/base/contextglbase.ts", + "awayjs-stagegl/lib/base/contextglblendfactor.ts", + "awayjs-stagegl/lib/base/contextglclearmask.ts", + "awayjs-stagegl/lib/base/contextglcomparemode.ts", + "awayjs-stagegl/lib/base/contextglmipfilter.ts", + "awayjs-stagegl/lib/base/contextglprofile.ts", + "awayjs-stagegl/lib/base/contextglprogramtype.ts", + "awayjs-stagegl/lib/base/contextglstencilaction.ts", + "awayjs-stagegl/lib/base/contextgltexturefilter.ts", + "awayjs-stagegl/lib/base/contextgltextureformat.ts", + "awayjs-stagegl/lib/base/contextgltriangleface.ts", + "awayjs-stagegl/lib/base/contextglvertexbufferformat.ts", + "awayjs-stagegl/lib/base/contextglwrapmode.ts", + "awayjs-stagegl/lib/base/contextstage3d.ts", + "awayjs-stagegl/lib/base/contextwebgl.ts", + "awayjs-stagegl/lib/base/cubetextureflash.ts", + "awayjs-stagegl/lib/base/cubetexturewebgl.ts", + "awayjs-stagegl/lib/base/icontextstagegl.ts", + "awayjs-stagegl/lib/base/icubetexture.ts", + "awayjs-stagegl/lib/base/iindexbuffer.ts", + "awayjs-stagegl/lib/base/iprogram.ts", + "awayjs-stagegl/lib/base/itexturebase.ts", + "awayjs-stagegl/lib/base/itexture.ts", + "awayjs-stagegl/lib/base/ivertexbuffer.ts", + "awayjs-stagegl/lib/base/indexbufferflash.ts", + "awayjs-stagegl/lib/base/indexbufferwebgl.ts", + "awayjs-stagegl/lib/base/opcodes.ts", + "awayjs-stagegl/lib/base/programflash.ts", + "awayjs-stagegl/lib/base/programwebgl.ts", + "awayjs-stagegl/lib/base/resourcebaseflash.ts", + "awayjs-stagegl/lib/base/samplerstate.ts", + "awayjs-stagegl/lib/base/stage.ts", + "awayjs-stagegl/lib/base/texturebasewebgl.ts", + "awayjs-stagegl/lib/base/textureflash.ts", + "awayjs-stagegl/lib/base/texturewebgl.ts", + "awayjs-stagegl/lib/base/vertexbufferflash.ts", + "awayjs-stagegl/lib/base/vertexbufferwebgl.ts", "awayjs-stagegl/lib/errors/animationseterror.ts", "awayjs-stagegl/lib/events/animatorevent.ts", "awayjs-stagegl/lib/events/shadingmethodevent.ts", @@ -128,16 +107,37 @@ "awayjs-stagegl/lib/materials/passes/trianglemethodpass.ts", "awayjs-stagegl/lib/materials/utils/defaultmaterialmanager.ts", "awayjs-stagegl/lib/materials/utils/shadercompilerhelper.ts", + "awayjs-stagegl/lib/pool/billboardrenderable.ts", + "awayjs-stagegl/lib/pool/indexdatapool.ts", + "awayjs-stagegl/lib/pool/indexdata.ts", + "awayjs-stagegl/lib/pool/linesubmeshrenderable.ts", + "awayjs-stagegl/lib/pool/materialdatapool.ts", + "awayjs-stagegl/lib/pool/materialdata.ts", + "awayjs-stagegl/lib/pool/materialpassdatapool.ts", + "awayjs-stagegl/lib/pool/materialpassdata.ts", + "awayjs-stagegl/lib/pool/programdatapool.ts", + "awayjs-stagegl/lib/pool/programdata.ts", + "awayjs-stagegl/lib/pool/renderablebase.ts", + "awayjs-stagegl/lib/pool/skyboxrenderable.ts", + "awayjs-stagegl/lib/pool/texturedatapool.ts", + "awayjs-stagegl/lib/pool/texturedata.ts", + "awayjs-stagegl/lib/pool/trianglesubmeshrenderable.ts", + "awayjs-stagegl/lib/pool/vertexdatapool.ts", + "awayjs-stagegl/lib/pool/vertexdata.ts", + "awayjs-stagegl/lib/render/defaultrenderer.ts", + "awayjs-stagegl/lib/render/depthrenderer.ts", + "awayjs-stagegl/lib/render/filter3drenderer.ts", + "awayjs-stagegl/lib/render/rendererbase.ts", "./lib/swfobject.js" ], "names": [], - "mappings": "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AAM,CAAC,EAAE,CAAC;QACZ,CAAC;IACF,CAAC;IACF,2BAAC;AAAD,CArEA,AAqEC,IAAA;AAED,AAA8B,iBAArB,oBAAoB,CAAC;;;;AC7E9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", + "mappings": "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,CAAC,CAAC;IAC7C,CAAC;IACF,mBAAC;AAAD,CA3pBA,AA2pBC,EA3pB0B,eAAe,EA2pBzC;AAED,AAAsB,iBAAb,YAAY,CAAC;;;;AC1sBtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 0x10) {\n\t\t\tbytes.readUnsignedByte();\n\t\t\theader.version >>= 1;\n\t\t}\n\t\tif (bytes.readUnsignedByte() != 0xa1) {\n\t\t\tthrow \"Bad AGAL: Missing 0xa1 magic byte.\";\n\t\t}\n\n\t\theader.progid = bytes.readUnsignedByte();\n\t\tswitch (header.progid) {\n\t\t\tcase 1:\n\t\t\t\theader.type = \"fragment\";\n\t\t\t\tbreak;\n\t\t\tcase 0:\n\t\t\t\theader.type = \"vertex\";\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\theader.type = \"cpu\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\theader.type = \"\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\tvar desc:Description = new Description();\n\t\tvar tokens:Token[] = [];\n\t\twhile (bytes.position < bytes.length) {\n\t\t\tvar token:Token = new Token();\n\n\t\t\ttoken.opcode = bytes.readUnsignedInt();\n\t\t\tvar lutentry = Mapping.agal2glsllut[token.opcode];\n\t\t\tif (!lutentry) {\n\t\t\t\tthrow \"Opcode not valid or not implemented yet: \" + token.opcode;\n\t\t\t}\n\t\t\tif (lutentry.matrixheight) {\n\t\t\t\tdesc.hasmatrix = true;\n\t\t\t}\n\t\t\tif (lutentry.dest) {\n\t\t\t\ttoken.dest.regnum = bytes.readUnsignedShort();\n\t\t\t\ttoken.dest.mask = bytes.readUnsignedByte();\n\t\t\t\ttoken.dest.regtype = bytes.readUnsignedByte();\n\t\t\t\tdesc.regwrite[token.dest.regtype][token.dest.regnum] |= token.dest.mask;\n\t\t\t} else {\n\t\t\t\ttoken.dest = null;\n\t\t\t\tbytes.readUnsignedInt();\n\t\t\t}\n\t\t\tif (lutentry.a) {\n\t\t\t\tthis.readReg(token.a, 1, desc, bytes);\n\t\t\t} else {\n\t\t\t\ttoken.a = null;\n\t\t\t\tbytes.readUnsignedInt();\n\t\t\t\tbytes.readUnsignedInt();\n\t\t\t}\n\t\t\tif (lutentry.b) {\n\t\t\t\tthis.readReg(token.b, lutentry.matrixheight | 0, desc, bytes);\n\t\t\t} else {\n\t\t\t\ttoken.b = null;\n\t\t\t\tbytes.readUnsignedInt();\n\t\t\t\tbytes.readUnsignedInt();\n\t\t\t}\n\t\t\ttokens.push(token);\n\t\t}\n\t\tdesc.header = header;\n\t\tdesc.tokens = tokens;\n\n\t\treturn desc;\n\t}\n\n\tpublic readReg(s, mh, desc, bytes)\n\t{\n\t\ts.regnum = bytes.readUnsignedShort();\n\t\ts.indexoffset = bytes.readByte();\n\t\ts.swizzle = bytes.readUnsignedByte();\n\t\ts.regtype = bytes.readUnsignedByte();\n\t\tdesc.regread[s.regtype][s.regnum] = 0xf; // sould be swizzle to mask? should be |= \n\t\tif (s.regtype == 0x5) {\n\t\t\t// sampler\n\t\t\ts.lodbiad = s.indexoffset;\n\t\t\ts.indexoffset = undefined;\n\t\t\ts.swizzle = undefined;\n\n\t\t\t// sampler \n\t\t\ts.readmode = bytes.readUnsignedByte();\n\t\t\ts.dim = s.readmode >> 4;\n\t\t\ts.readmode &= 0xf;\n\t\t\ts.special = bytes.readUnsignedByte();\n\t\t\ts.wrap = s.special >> 4;\n\t\t\ts.special &= 0xf;\n\t\t\ts.mipmap = bytes.readUnsignedByte();\n\t\t\ts.filter = s.mipmap >> 4;\n\t\t\ts.mipmap &= 0xf;\n\t\t\tdesc.samplers[s.regnum] = s;\n\t\t} else {\n\t\t\ts.indexregtype = bytes.readUnsignedByte();\n\t\t\ts.indexselect = bytes.readUnsignedByte();\n\t\t\ts.indirectflag = bytes.readUnsignedByte();\n\t\t}\n\t\tif (s.indirectflag) {\n\t\t\tdesc.hasindirect = true;\n\t\t}\n\t\tif (!s.indirectflag && mh) {\n\t\t\tfor (var mhi:number = 0; mhi < mh; mhi++) //TODO wrong, should be |=\n\t\t\t{\n\t\t\t\tdesc.regread[s.regtype][s.regnum + mhi] = desc.regread[s.regtype][s.regnum];\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport = AGALTokenizer;", - "import Description\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Description\");\nimport Mapping\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Mapping\");\nimport ContextStage3D\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\n\nclass AGLSLParser\n{\n\tpublic parse(desc:Description)\n\t{\n\t\tvar header:string = \"\";\n\t\tvar body:string = \"\";\n\n\t\theader += \"precision highp float;\\n\";\n\t\tvar tag = desc.header.type[0]; //TODO\n\n\t\t// declare uniforms\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\theader += \"uniform float yflip;\\n\";\n\t\t}\n\t\tif (!desc.hasindirect) {\n\t\t\tfor (var i:number = 0; i < desc.regread[0x1].length; i++) {\n\t\t\t\tif (desc.regread[0x1][i]) {\n\t\t\t\t\theader += \"uniform vec4 \" + tag + \"c\" + i + \";\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\theader += \"uniform vec4 \" + tag + \"carrr[\" + ContextStage3D.maxvertexconstants + \"];\\n\"; // use max const count instead\n\t\t}\n\n\t\t// declare temps\n\t\tfor (var i = 0; i < desc.regread[0x2].length || i < desc.regwrite[0x2].length; i++) {\n\t\t\tif (desc.regread[0x2][i] || desc.regwrite[0x2][i]) // duh, have to check write only also...\n\t\t\t{\n\t\t\t\theader += \"vec4 \" + tag + \"t\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare streams\n\t\tfor (var i:number = 0; i < desc.regread[0x0].length; i++) {\n\t\t\tif (desc.regread[0x0][i]) {\n\t\t\t\theader += \"attribute vec4 va\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare interpolated\n\t\tfor (var i:number = 0; i < desc.regread[0x4].length || i < desc.regwrite[0x4].length; i++) {\n\t\t\tif (desc.regread[0x4][i] || desc.regwrite[0x4][i]) {\n\t\t\t\theader += \"varying vec4 vi\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare samplers\n\t\tvar samptype:Array = [\"2D\", \"Cube\", \"3D\", \"\"];\n\t\tfor (var i:number = 0; i < desc.samplers.length; i++) {\n\t\t\tif (desc.samplers[i]) {\n\t\t\t\theader += \"uniform sampler\" + samptype[ desc.samplers[i].dim & 3 ] + \" fs\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// extra gl fluff: setup position and depth adjust temps\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\theader += \"vec4 outpos;\\n\";\n\t\t}\n\t\tif (desc.writedepth) {\n\t\t\theader += \"vec4 tmp_FragDepth;\\n\";\n\t\t}\n\t\t//if ( desc.hasmatrix ) \n\t\t// header += \"vec4 tmp_matrix;\\n\";\n\n\t\t// start body of code\n\t\tbody += \"void main() {\\n\";\n\n\t\tfor (var i:number = 0; i < desc.tokens.length; i++) {\n\t\t\tvar lutentry = Mapping.agal2glsllut[desc.tokens[i].opcode];\n\t\t\tif (!lutentry) {\n\t\t\t\tthrow \"Opcode not valid or not implemented yet: \"\n\t\t\t\t/*+token.opcode;*/\n\t\t\t}\n\t\t\tvar sublines = lutentry.matrixheight || 1;\n\n\t\t\tfor (var sl:number = 0; sl < sublines; sl++) {\n\t\t\t\tvar line:string = \" \" + lutentry.s;\n\t\t\t\tif (desc.tokens[i].dest) {\n\t\t\t\t\tif (lutentry.matrixheight) {\n\t\t\t\t\t\tif (((desc.tokens[i].dest.mask >> sl) & 1) != 1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar destregstring:string = this.regtostring(desc.tokens[i].dest.regtype, desc.tokens[i].dest.regnum, desc, tag);\n\t\t\t\t\t\tvar destcaststring:string = \"float\";\n\t\t\t\t\t\tvar destmaskstring = [\"x\", \"y\", \"z\", \"w\"][sl];\n\t\t\t\t\t\tdestregstring += \".\" + destmaskstring;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar destregstring:string = this.regtostring(desc.tokens[i].dest.regtype, desc.tokens[i].dest.regnum, desc, tag);\n\t\t\t\t\t\tvar destcaststring:string;\n\t\t\t\t\t\tvar destmaskstring:string;\n\t\t\t\t\t\tif (desc.tokens[i].dest.mask != 0xf) {\n\t\t\t\t\t\t\tvar ndest:number = 0;\n\t\t\t\t\t\t\tdestmaskstring = \"\";\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 1) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"x\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 2) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 4) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"z\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 8) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"w\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdestregstring += \".\" + destmaskstring;\n\t\t\t\t\t\t\tswitch (ndest) {\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"float\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"vec2\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"vec3\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tthrow \"Unexpected destination mask\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdestcaststring = \"vec4\";\n\t\t\t\t\t\t\tdestmaskstring = \"xyzw\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tline = line.replace(\"%dest\", destregstring);\n\t\t\t\t\tline = line.replace(\"%cast\", destcaststring);\n\t\t\t\t\tline = line.replace(\"%dm\", destmaskstring);\n\t\t\t\t}\n\t\t\t\tvar dwm:number = 0xf;\n\t\t\t\tif (!lutentry.ndwm && lutentry.dest && desc.tokens[i].dest) {\n\t\t\t\t\tdwm = desc.tokens[i].dest.mask;\n\t\t\t\t}\n\t\t\t\tif (desc.tokens[i].a) {\n\t\t\t\t\tline = line.replace(\"%a\", this.sourcetostring(desc.tokens[i].a, 0, dwm, lutentry.scalar, desc, tag));\n\t\t\t\t}\n\t\t\t\tif (desc.tokens[i].b) {\n\t\t\t\t\tline = line.replace(\"%b\", this.sourcetostring(desc.tokens[i].b, sl, dwm, lutentry.scalar, desc, tag));\n\t\t\t\t\tif (desc.tokens[i].b.regtype == 0x5) {\n\t\t\t\t\t\t// sampler dim\n\t\t\t\t\t\tvar texdim = [\"2D\", \"Cube\", \"3D\"][desc.tokens[i].b.dim];\n\t\t\t\t\t\tvar texsize = [\"vec2\", \"vec3\", \"vec3\"][desc.tokens[i].b.dim];\n\t\t\t\t\t\tline = line.replace(\"%texdim\", texdim);\n\t\t\t\t\t\tline = line.replace(\"%texsize\", texsize);\n\t\t\t\t\t\tvar texlod:string = \"\";\n\t\t\t\t\t\tline = line.replace(\"%lod\", texlod);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbody += line;\n\t\t\t}\n\t\t}\n\n\t\t// adjust z from opengl range of -1..1 to 0..1 as in d3d, this also enforces a left handed coordinate system\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\tbody += \" gl_Position = vec4(outpos.x, outpos.y, outpos.z*2.0 - outpos.w, outpos.w);\\n\";\n\t\t}\n\n\t\t// clamp fragment depth\n\t\tif (desc.writedepth) {\n\t\t\tbody += \" gl_FragDepth = clamp(tmp_FragDepth,0.0,1.0);\\n\";\n\t\t}\n\n\t\t// close main\n\t\tbody += \"}\\n\";\n\n\t\treturn header + body;\n\t}\n\n\tpublic regtostring(regtype:number, regnum:number, desc:Description, tag)\n\t{\n\t\tswitch (regtype) {\n\t\t\tcase 0x0:\n\t\t\t\treturn \"va\" + regnum;\n\t\t\tcase 0x1:\n\t\t\t\tif (desc.hasindirect && desc.header.type == \"vertex\") {\n\t\t\t\t\treturn \"vcarrr[\" + regnum + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\treturn tag + \"c\" + regnum;\n\t\t\t\t}\n\t\t\tcase 0x2:\n\t\t\t\treturn tag + \"t\" + regnum;\n\t\t\tcase 0x3:\n\t\t\t\treturn desc.header.type == \"vertex\"? \"outpos\" : \"gl_FragColor\";\n\t\t\tcase 0x4:\n\t\t\t\treturn \"vi\" + regnum;\n\t\t\tcase 0x5:\n\t\t\t\treturn \"fs\" + regnum;\n\t\t\tcase 0x6:\n\t\t\t\treturn \"tmp_FragDepth\";\n\t\t\tdefault:\n\t\t\t\tthrow \"Unknown register type\";\n\t\t}\n\t}\n\n\tpublic sourcetostring(s, subline, dwm, isscalar, desc, tag):string\n\t{\n\t\tvar swiz = [ \"x\", \"y\", \"z\", \"w\" ];\n\t\tvar r;\n\n\t\tif (s.indirectflag) {\n\t\t\tr = \"vcarrr[int(\" + this.regtostring(s.indexregtype, s.regnum, desc, tag) + \".\" + swiz[s.indexselect] + \")\";\n\t\t\tvar realofs = subline + s.indexoffset;\n\t\t\tif (realofs < 0) r += realofs.toString();\n\t\t\tif (realofs > 0) r += \"+\" + realofs.toString();\n\t\t\tr += \"]\";\n\t\t} else {\n\t\t\tr = this.regtostring(s.regtype, s.regnum + subline, desc, tag);\n\t\t}\n\n\t\t// samplers never add swizzle \n\t\tif (s.regtype == 0x5) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// scalar, first component only\n\t\tif (isscalar) {\n\t\t\treturn r + \".\" + swiz[(s.swizzle >> 0) & 3];\n\t\t}\n\n\t\t// identity\n\t\tif (s.swizzle == 0xe4 && dwm == 0xf) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// with destination write mask folded in\n\t\tr += \".\";\n\t\tif (dwm & 1) r += swiz[(s.swizzle >> 0) & 3];\n\t\tif (dwm & 2) r += swiz[(s.swizzle >> 2) & 3];\n\t\tif (dwm & 4) r += swiz[(s.swizzle >> 4) & 3];\n\t\tif (dwm & 8) r += swiz[(s.swizzle >> 6) & 3];\n\t\treturn r;\n\t}\n}\n\nexport = AGLSLParser;", + "import Description\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Description\");\nimport Mapping\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Mapping\");\nimport ContextStage3D\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\n\nclass AGLSLParser\n{\n\tpublic parse(desc:Description)\n\t{\n\t\tvar header:string = \"\";\n\t\tvar body:string = \"\";\n\n\t\theader += \"precision highp float;\\n\";\n\t\tvar tag = desc.header.type[0]; //TODO\n\n\t\t// declare uniforms\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\theader += \"uniform float yflip;\\n\";\n\t\t}\n\t\tif (!desc.hasindirect) {\n\t\t\tfor (var i:number = 0; i < desc.regread[0x1].length; i++) {\n\t\t\t\tif (desc.regread[0x1][i]) {\n\t\t\t\t\theader += \"uniform vec4 \" + tag + \"c\" + i + \";\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\theader += \"uniform vec4 \" + tag + \"carrr[\" + ContextStage3D.maxvertexconstants + \"];\\n\"; // use max const count instead\n\t\t}\n\n\t\t// declare temps\n\t\tfor (var i = 0; i < desc.regread[0x2].length || i < desc.regwrite[0x2].length; i++) {\n\t\t\tif (desc.regread[0x2][i] || desc.regwrite[0x2][i]) // duh, have to check write only also...\n\t\t\t{\n\t\t\t\theader += \"vec4 \" + tag + \"t\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare streams\n\t\tfor (var i:number = 0; i < desc.regread[0x0].length; i++) {\n\t\t\tif (desc.regread[0x0][i]) {\n\t\t\t\theader += \"attribute vec4 va\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare interpolated\n\t\tfor (var i:number = 0; i < desc.regread[0x4].length || i < desc.regwrite[0x4].length; i++) {\n\t\t\tif (desc.regread[0x4][i] || desc.regwrite[0x4][i]) {\n\t\t\t\theader += \"varying vec4 vi\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// declare samplers\n\t\tvar samptype:Array = [\"2D\", \"Cube\", \"3D\", \"\"];\n\t\tfor (var i:number = 0; i < desc.samplers.length; i++) {\n\t\t\tif (desc.samplers[i]) {\n\t\t\t\theader += \"uniform sampler\" + samptype[ desc.samplers[i].dim & 3 ] + \" fs\" + i + \";\\n\";\n\t\t\t}\n\t\t}\n\n\t\t// extra gl fluff: setup position and depth adjust temps\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\theader += \"vec4 outpos;\\n\";\n\t\t}\n\t\tif (desc.writedepth) {\n\t\t\theader += \"vec4 tmp_FragDepth;\\n\";\n\t\t}\n\t\t//if ( desc.hasmatrix ) \n\t\t// header += \"vec4 tmp_matrix;\\n\";\n\n\t\t// start body of code\n\t\tbody += \"void main() {\\n\";\n\n\t\tfor (var i:number = 0; i < desc.tokens.length; i++) {\n\t\t\tvar lutentry = Mapping.agal2glsllut[desc.tokens[i].opcode];\n\t\t\tif (!lutentry) {\n\t\t\t\tthrow \"Opcode not valid or not implemented yet: \"\n\t\t\t\t/*+token.opcode;*/\n\t\t\t}\n\t\t\tvar sublines = lutentry.matrixheight || 1;\n\n\t\t\tfor (var sl:number = 0; sl < sublines; sl++) {\n\t\t\t\tvar line:string = \" \" + lutentry.s;\n\t\t\t\tif (desc.tokens[i].dest) {\n\t\t\t\t\tif (lutentry.matrixheight) {\n\t\t\t\t\t\tif (((desc.tokens[i].dest.mask >> sl) & 1) != 1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar destregstring:string = this.regtostring(desc.tokens[i].dest.regtype, desc.tokens[i].dest.regnum, desc, tag);\n\t\t\t\t\t\tvar destcaststring:string = \"float\";\n\t\t\t\t\t\tvar destmaskstring = [\"x\", \"y\", \"z\", \"w\"][sl];\n\t\t\t\t\t\tdestregstring += \".\" + destmaskstring;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar destregstring:string = this.regtostring(desc.tokens[i].dest.regtype, desc.tokens[i].dest.regnum, desc, tag);\n\t\t\t\t\t\tvar destcaststring:string;\n\t\t\t\t\t\tvar destmaskstring:string;\n\t\t\t\t\t\tif (desc.tokens[i].dest.mask != 0xf) {\n\t\t\t\t\t\t\tvar ndest:number = 0;\n\t\t\t\t\t\t\tdestmaskstring = \"\";\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 1) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"x\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 2) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 4) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"z\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (desc.tokens[i].dest.mask & 8) {\n\t\t\t\t\t\t\t\tndest++;\n\t\t\t\t\t\t\t\tdestmaskstring += \"w\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdestregstring += \".\" + destmaskstring;\n\t\t\t\t\t\t\tswitch (ndest) {\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"float\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"vec2\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tdestcaststring = \"vec3\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tthrow \"Unexpected destination mask\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdestcaststring = \"vec4\";\n\t\t\t\t\t\t\tdestmaskstring = \"xyzw\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tline = line.replace(\"%dest\", destregstring);\n\t\t\t\t\tline = line.replace(\"%cast\", destcaststring);\n\t\t\t\t\tline = line.replace(\"%dm\", destmaskstring);\n\t\t\t\t}\n\t\t\t\tvar dwm:number = 0xf;\n\t\t\t\tif (!lutentry.ndwm && lutentry.dest && desc.tokens[i].dest) {\n\t\t\t\t\tdwm = desc.tokens[i].dest.mask;\n\t\t\t\t}\n\t\t\t\tif (desc.tokens[i].a) {\n\t\t\t\t\tline = line.replace(\"%a\", this.sourcetostring(desc.tokens[i].a, 0, dwm, lutentry.scalar, desc, tag));\n\t\t\t\t}\n\t\t\t\tif (desc.tokens[i].b) {\n\t\t\t\t\tline = line.replace(\"%b\", this.sourcetostring(desc.tokens[i].b, sl, dwm, lutentry.scalar, desc, tag));\n\t\t\t\t\tif (desc.tokens[i].b.regtype == 0x5) {\n\t\t\t\t\t\t// sampler dim\n\t\t\t\t\t\tvar texdim = [\"2D\", \"Cube\", \"3D\"][desc.tokens[i].b.dim];\n\t\t\t\t\t\tvar texsize = [\"vec2\", \"vec3\", \"vec3\"][desc.tokens[i].b.dim];\n\t\t\t\t\t\tline = line.replace(\"%texdim\", texdim);\n\t\t\t\t\t\tline = line.replace(\"%texsize\", texsize);\n\t\t\t\t\t\tvar texlod:string = \"\";\n\t\t\t\t\t\tline = line.replace(\"%lod\", texlod);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbody += line;\n\t\t\t}\n\t\t}\n\n\t\t// adjust z from opengl range of -1..1 to 0..1 as in d3d, this also enforces a left handed coordinate system\n\t\tif (desc.header.type == \"vertex\") {\n\t\t\tbody += \" gl_Position = vec4(outpos.x, outpos.y, outpos.z*2.0 - outpos.w, outpos.w);\\n\";\n\t\t}\n\n\t\t// clamp fragment depth\n\t\tif (desc.writedepth) {\n\t\t\tbody += \" gl_FragDepth = clamp(tmp_FragDepth,0.0,1.0);\\n\";\n\t\t}\n\n\t\t// close main\n\t\tbody += \"}\\n\";\n\n\t\treturn header + body;\n\t}\n\n\tpublic regtostring(regtype:number, regnum:number, desc:Description, tag)\n\t{\n\t\tswitch (regtype) {\n\t\t\tcase 0x0:\n\t\t\t\treturn \"va\" + regnum;\n\t\t\tcase 0x1:\n\t\t\t\tif (desc.hasindirect && desc.header.type == \"vertex\") {\n\t\t\t\t\treturn \"vcarrr[\" + regnum + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\treturn tag + \"c\" + regnum;\n\t\t\t\t}\n\t\t\tcase 0x2:\n\t\t\t\treturn tag + \"t\" + regnum;\n\t\t\tcase 0x3:\n\t\t\t\treturn desc.header.type == \"vertex\"? \"outpos\" : \"gl_FragColor\";\n\t\t\tcase 0x4:\n\t\t\t\treturn \"vi\" + regnum;\n\t\t\tcase 0x5:\n\t\t\t\treturn \"fs\" + regnum;\n\t\t\tcase 0x6:\n\t\t\t\treturn \"tmp_FragDepth\";\n\t\t\tdefault:\n\t\t\t\tthrow \"Unknown register type\";\n\t\t}\n\t}\n\n\tpublic sourcetostring(s, subline, dwm, isscalar, desc, tag):string\n\t{\n\t\tvar swiz = [ \"x\", \"y\", \"z\", \"w\" ];\n\t\tvar r;\n\n\t\tif (s.indirectflag) {\n\t\t\tr = \"vcarrr[int(\" + this.regtostring(s.indexregtype, s.regnum, desc, tag) + \".\" + swiz[s.indexselect] + \")\";\n\t\t\tvar realofs = subline + s.indexoffset;\n\t\t\tif (realofs < 0) r += realofs.toString();\n\t\t\tif (realofs > 0) r += \"+\" + realofs.toString();\n\t\t\tr += \"]\";\n\t\t} else {\n\t\t\tr = this.regtostring(s.regtype, s.regnum + subline, desc, tag);\n\t\t}\n\n\t\t// samplers never add swizzle \n\t\tif (s.regtype == 0x5) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// scalar, first component only\n\t\tif (isscalar) {\n\t\t\treturn r + \".\" + swiz[(s.swizzle >> 0) & 3];\n\t\t}\n\n\t\t// identity\n\t\tif (s.swizzle == 0xe4 && dwm == 0xf) {\n\t\t\treturn r;\n\t\t}\n\n\t\t// with destination write mask folded in\n\t\tr += \".\";\n\t\tif (dwm & 1) r += swiz[(s.swizzle >> 0) & 3];\n\t\tif (dwm & 2) r += swiz[(s.swizzle >> 2) & 3];\n\t\tif (dwm & 4) r += swiz[(s.swizzle >> 4) & 3];\n\t\tif (dwm & 8) r += swiz[(s.swizzle >> 6) & 3];\n\t\treturn r;\n\t}\n}\n\nexport = AGLSLParser;", "import Header\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Header\");\nimport Token\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Token\");\n\nclass Description\n{\n\tpublic regread:any[] = [\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[]\n\t];\n\tpublic regwrite:any[] = [\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[]\n\t];\n\tpublic hasindirect:boolean = false;\n\tpublic writedepth:boolean = false;\n\tpublic hasmatrix:boolean = false;\n\tpublic samplers:any[] = [];\n\n\t// added due to dynamic assignment 3*0xFFFFFFuuuu\n\tpublic tokens:Token[] = [];\n\tpublic header:Header = new Header();\n\n\tconstructor()\n\t{\n\t}\n}\n\nexport = Description;", "class Destination\n{\n\tpublic mask:number = 0;\n\tpublic regnum:number = 0;\n\tpublic regtype:number = 0;\n\tpublic dim:number = 0;\n\n\tconstructor()\n\t{\n\t}\n}\n\nexport = Destination;", "class Header\n{\n\tpublic progid:number = 0;\n\tpublic version:number = 0;\n\tpublic type:string = \"\";\n\n\tconstructor()\n\t{\n\t}\n}\n\nexport = Header;", @@ -154,33 +154,11 @@ "\nclass Reg\n{\n\n\tpublic code:number;\n\tpublic desc:string;\n\n\tconstructor(code:number, desc:string)\n\t{\n\t\tthis.code = code;\n\t\tthis.desc = desc;\n\t}\n}\n\nclass RegMap\n{\n\n\t/*\n\t public static map = [ new Reg( 0x00, \"vertex attribute\" ),\n\t new Reg( 0x01, \"fragment constant\" ),\n\t new Reg( 0x01, \"vertex constant\" ),\n\t new Reg( 0x02, \"fragment temporary\" ),\n\t new Reg( 0x02, \"vertex temporary\" ),\n\t new Reg( 0x03, \"vertex output\" ),\n\t new Reg( 0x03, \"vertex output\" ),\n\t new Reg( 0x03, \"fragment depth output\" ),\n\t new Reg( 0x03, \"fragment output\" ),\n\t new Reg( 0x03, \"fragment output\" ),\n\t new Reg( 0x04, \"varying\" ),\n\t new Reg( 0x04, \"varying output\" ),\n\t new Reg( 0x04, \"varying input\" ),\n\t new Reg( 0x05, \"sampler\" ) ];\n\t */\n\n\tprivate static _map:any[];\n\tpublic static get map():any[]\n\t{\n\n\t\tif (!RegMap._map) {\n\n\t\t\tRegMap._map = new Array();\n\t\t\tRegMap._map['va'] = new Reg(0x00, \"vertex attribute\");\n\t\t\tRegMap._map['fc'] = new Reg(0x01, \"fragment constant\");\n\t\t\tRegMap._map['vc'] = new Reg(0x01, \"vertex constant\")\n\t\t\tRegMap._map['ft'] = new Reg(0x02, \"fragment temporary\");\n\t\t\tRegMap._map['vt'] = new Reg(0x02, \"vertex temporary\");\n\t\t\tRegMap._map['vo'] = new Reg(0x03, \"vertex output\");\n\t\t\tRegMap._map['op'] = new Reg(0x03, \"vertex output\");\n\t\t\tRegMap._map['fd'] = new Reg(0x03, \"fragment depth output\");\n\t\t\tRegMap._map['fo'] = new Reg(0x03, \"fragment output\");\n\t\t\tRegMap._map['oc'] = new Reg(0x03, \"fragment output\");\n\t\t\tRegMap._map['v'] = new Reg(0x04, \"varying\")\n\t\t\tRegMap._map['vi'] = new Reg(0x04, \"varying output\");\n\t\t\tRegMap._map['fi'] = new Reg(0x04, \"varying input\");\n\t\t\tRegMap._map['fs'] = new Reg(0x05, \"sampler\");\n\n\n\t\t}\n\n\t\treturn RegMap._map;\n\n\t}\n\n\t/*\n\t public static va:Reg = new Reg( 0x00, \"vertex attribute\" );\n\t public static fc:Reg = new Reg( 0x01, \"fragment constant\" );\n\t public static vc:Reg = new Reg( 0x01, \"vertex constant\" );\n\t public static ft:Reg = new Reg( 0x02, \"fragment temporary\" );\n\t public static vt:Reg = new Reg( 0x02, \"vertex temporary\" );\n\t public static vo:Reg = new Reg( 0x03, \"vertex output\" );\n\t public static op:Reg = new Reg( 0x03, \"vertex output\" );\n\t public static fd:Reg = new Reg( 0x03, \"fragment depth output\" );\n\t public static fo:Reg = new Reg( 0x03, \"fragment output\" );\n\t public static oc:Reg = new Reg( 0x03, \"fragment output\" );\n\t public static v: Reg = new Reg( 0x04, \"varying\" );\n\t public static vi:Reg = new Reg( 0x04, \"varying output\" );\n\t public static fi:Reg = new Reg( 0x04, \"varying input\" );\n\t public static fs:Reg = new Reg( 0x05, \"sampler\" );\n\t */\n\tconstructor()\n\t{\n\t}\n}\n\nexport = RegMap;", "import Sampler\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/assembler/Sampler\");\n\nclass SamplerMap\n{\n\n\tprivate static _map:Object[];\n\n\tpublic static get map():Object[]\n\t{\n\n\t\tif (!SamplerMap._map) {\n\n\t\t\tSamplerMap._map = new Array();\n\t\t\tSamplerMap._map['rgba'] = new Sampler(8, 0xf, 0);\n\t\t\tSamplerMap._map['rg'] = new Sampler(8, 0xf, 5);\n\t\t\tSamplerMap._map['r'] = new Sampler(8, 0xf, 4);\n\t\t\tSamplerMap._map['compressed'] = new Sampler(8, 0xf, 1);\n\t\t\tSamplerMap._map['compressed_alpha'] = new Sampler(8, 0xf, 2);\n\t\t\tSamplerMap._map['dxt1'] = new Sampler(8, 0xf, 1);\n\t\t\tSamplerMap._map['dxt5'] = new Sampler(8, 0xf, 2);\n\n\t\t\t// dimension\n\t\t\tSamplerMap._map['2d'] = new Sampler(12, 0xf, 0);\n\t\t\tSamplerMap._map['cube'] = new Sampler(12, 0xf, 1);\n\t\t\tSamplerMap._map['3d'] = new Sampler(12, 0xf, 2);\n\n\t\t\t// special\n\t\t\tSamplerMap._map['centroid'] = new Sampler(16, 1, 1);\n\t\t\tSamplerMap._map['ignoresampler'] = new Sampler(16, 4, 4);\n\n\t\t\t// repeat\n\t\t\tSamplerMap._map['clamp'] = new Sampler(20, 0xf, 0);\n\t\t\tSamplerMap._map['repeat'] = new Sampler(20, 0xf, 1);\n\t\t\tSamplerMap._map['wrap'] = new Sampler(20, 0xf, 1);\n\n\t\t\t// mip\n\t\t\tSamplerMap._map['nomip'] = new Sampler(24, 0xf, 0);\n\t\t\tSamplerMap._map['mipnone'] = new Sampler(24, 0xf, 0);\n\t\t\tSamplerMap._map['mipnearest'] = new Sampler(24, 0xf, 1);\n\t\t\tSamplerMap._map['miplinear'] = new Sampler(24, 0xf, 2);\n\n\t\t\t// filter\n\t\t\tSamplerMap._map['nearest'] = new Sampler(28, 0xf, 0);\n\t\t\tSamplerMap._map['linear'] = new Sampler(28, 0xf, 1);\n\n\t\t}\n\n\t\treturn SamplerMap._map;\n\n\t}\n\n\t/*\n\t public static map = [ new Sampler( 8, 0xf, 0 ),\n\t new Sampler( 8, 0xf, 5 ),\n\t new Sampler( 8, 0xf, 4 ),\n\t new Sampler( 8, 0xf, 1 ),\n\t new Sampler( 8, 0xf, 2 ),\n\t new Sampler( 8, 0xf, 1 ),\n\t new Sampler( 8, 0xf, 2 ),\n\n\t // dimension\n\t new Sampler( 12, 0xf, 0 ),\n\t new Sampler( 12, 0xf, 1 ),\n\t new Sampler( 12, 0xf, 2 ),\n\n\t // special\n\t new Sampler( 16, 1, 1 ),\n\t new Sampler( 16, 4, 4 ),\n\n\t // repeat\n\t new Sampler( 20, 0xf, 0 ),\n\t new Sampler( 20, 0xf, 1 ),\n\t new Sampler( 20, 0xf, 1 ),\n\n\t // mip\n\t new Sampler( 24, 0xf, 0 ),\n\t new Sampler( 24, 0xf, 0 ),\n\t new Sampler( 24, 0xf, 1 ),\n\t new Sampler( 24, 0xf, 2 ),\n\n\t // filter\n\t new Sampler( 28, 0xf, 0 ),\n\t new Sampler( 28, 0xf, 1 ) ]\n\t */\n\t/*\n\t public static rgba: Sampler = new Sampler( 8, 0xf, 0 );\n\t public static rg: Sampler = new Sampler( 8, 0xf, 5 );\n\t public static r: Sampler = new Sampler( 8, 0xf, 4 );\n\t public static compressed: Sampler = new Sampler( 8, 0xf, 1 );\n\t public static compressed_alpha: Sampler = new Sampler( 8, 0xf, 2 );\n\t public static dxt1: Sampler = new Sampler( 8, 0xf, 1 );\n\t public static dxt5: Sampler = new Sampler( 8, 0xf, 2 );\n\n\t // dimension\n\t public static sampler2d: Sampler = new Sampler( 12, 0xf, 0 );\n\t public static cube: Sampler = new Sampler( 12, 0xf, 1 );\n\t public static sampler3d: Sampler = new Sampler( 12, 0xf, 2 );\n\n\t // special\n\t public static centroid: Sampler = new Sampler( 16, 1, 1 );\n\t public static ignoresampler: Sampler = new Sampler( 16, 4, 4 );\n\n\t // repeat\n\t public static clamp: Sampler = new Sampler( 20, 0xf, 0 );\n\t public static repeat: Sampler = new Sampler( 20, 0xf, 1 );\n\t public static wrap: Sampler = new Sampler( 20, 0xf, 1 );\n\n\t // mip\n\t public static nomip: Sampler = new Sampler( 24, 0xf, 0 );\n\t public static mipnone: Sampler = new Sampler( 24, 0xf, 0 );\n\t public static mipnearest: Sampler = new Sampler( 24, 0xf, 1 );\n\t public static miplinear: Sampler = new Sampler( 24, 0xf, 2 );\n\n\t // filter\n\t public static nearest: Sampler = new Sampler( 28, 0xf, 0 );\n\t public static linear: Sampler = new Sampler( 28, 0xf, 1 );\n\t */\n\tconstructor()\n\t{\n\t}\n}\n\nexport = SamplerMap;", "class Sampler\n{\n\tpublic shift:number;\n\tpublic mask:number;\n\tpublic value:number;\n\n\tconstructor(shift:number, mask:number, value:number)\n\t{\n\t\tthis.shift = shift;\n\t\tthis.mask = mask;\n\t\tthis.value = value;\n\t}\n}\n\nexport = Sampler;", - "import AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport IAsset\t\t\t\t\t\t= require(\"awayjs-core/lib/library/IAsset\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nimport AnimationNodeBase\t\t\t= require(\"awayjs-display/lib/animators/nodes/AnimationNodeBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport AnimationSetError\t\t\t= require(\"awayjs-stagegl/lib/errors/AnimationSetError\");\n\n/**\n * Provides an abstract base class for data set classes that hold animation data for use in animator classes.\n *\n * @see away.animators.AnimatorBase\n */\nclass AnimationSetBase extends NamedAssetBase implements IAsset\n{\n\tprivate _usesCPU:boolean;\n\tprivate _animations:Array = new Array();\n\tprivate _animationNames:Array = new Array();\n\tprivate _animationDictionary:Object = new Object();\n\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Retrieves a temporary GPU register that's still free.\n\t *\n\t * @param exclude An array of non-free temporary registers.\n\t * @param excludeAnother An additional register that's not free.\n\t * @return A temporary register that can be used.\n\t */\n\tpublic _pFindTempReg(exclude:Array, excludeAnother:string = null):string\n\t{\n\t\tvar i:number /*uint*/ = 0;\n\t\tvar reg:string;\n\n\t\twhile (true) {\n\t\t\treg = \"vt\" + i;\n\t\t\tif (exclude.indexOf(reg) == -1 && excludeAnother != reg)\n\t\t\t\treturn reg;\n\t\t\t++i;\n\t\t}\n\n\t\t// can't be reached\n\t\treturn null;\n\t}\n\n\t/**\n\t * Indicates whether the properties of the animation data contained within the set combined with\n\t * the vertex registers already in use on shading materials allows the animation data to utilise\n\t * GPU calls.\n\t */\n\tpublic get usesCPU():boolean\n\t{\n\t\treturn this._usesCPU;\n\t}\n\n\t/**\n\t * Called by the material to reset the GPU indicator before testing whether register space in the shader\n\t * is available for running GPU-based animation code.\n\t *\n\t * @private\n\t */\n\tpublic resetGPUCompatibility()\n\t{\n\t\tthis._usesCPU = false;\n\t}\n\n\tpublic cancelGPUCompatibility()\n\t{\n\t\tthis._usesCPU = true;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALVertexCode(shaderObject:ShaderObjectBase):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic activate(shaderObject:ShaderObjectBase, stage:Stage)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic deactivate(shaderObject:ShaderObjectBase, stage:Stage)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALFragmentCode(shaderObject:ShaderObjectBase, shadedTarget:string):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALUVCode(shaderObject:ShaderObjectBase):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic doneAGALCode(shaderObject:ShaderObjectBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.ANIMATION_SET;\n\t}\n\n\t/**\n\t * Returns a vector of animation state objects that make up the contents of the animation data set.\n\t */\n\tpublic get animations():Array\n\t{\n\t\treturn this._animations;\n\t}\n\n\t/**\n\t * Returns a vector of animation state objects that make up the contents of the animation data set.\n\t */\n\tpublic get animationNames():Array\n\t{\n\t\treturn this._animationNames;\n\t}\n\n\t/**\n\t * Check to determine whether a state is registered in the animation set under the given name.\n\t *\n\t * @param stateName The name of the animation state object to be checked.\n\t */\n\tpublic hasAnimation(name:string):boolean\n\t{\n\t\treturn this._animationDictionary[name] != null;\n\t}\n\n\t/**\n\t * Retrieves the animation state object registered in the animation data set under the given name.\n\t *\n\t * @param stateName The name of the animation state object to be retrieved.\n\t */\n\tpublic getAnimation(name:string):AnimationNodeBase\n\t{\n\t\treturn this._animationDictionary[name];\n\t}\n\n\t/**\n\t * Adds an animation state object to the aniamtion data set under the given name.\n\t *\n\t * @param stateName The name under which the animation state object will be stored.\n\t * @param animationState The animation state object to be staored in the set.\n\t */\n\tpublic addAnimation(node:AnimationNodeBase)\n\t{\n\t\tif (this._animationDictionary[node.name])\n\t\t\tthrow new AnimationSetError(\"root node name '\" + node.name + \"' already exists in the set\");\n\n\t\tthis._animationDictionary[node.name] = node;\n\n\t\tthis._animations.push(node);\n\n\t\tthis._animationNames.push(node.name);\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t */\n\tpublic dispose()\n\t{\n\t}\n}\n\nexport = AnimationSetBase;", - "import Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport RequestAnimationFrame\t\t= require(\"awayjs-core/lib/utils/RequestAnimationFrame\");\nimport getTimer\t\t\t\t\t\t= require(\"awayjs-core/lib/utils/getTimer\");\n\nimport IAnimationSet\t\t\t\t= require(\"awayjs-display/lib/animators/IAnimationSet\");\nimport IAnimator\t\t\t\t\t= require(\"awayjs-display/lib/animators/IAnimator\");\nimport AnimationNodeBase\t\t\t= require(\"awayjs-display/lib/animators/nodes/AnimationNodeBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport Mesh\t\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Mesh\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport IAnimationState\t\t\t\t= require(\"awayjs-stagegl/lib/animators/states/IAnimationState\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport TriangleSubMeshRenderable\t= require(\"awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable\");\nimport AnimatorEvent\t\t\t\t= require(\"awayjs-stagegl/lib/events/AnimatorEvent\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n * Dispatched when playback of an animation inside the animator object starts.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"start\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Dispatched when playback of an animation inside the animator object stops.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"stop\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Dispatched when playback of an animation reaches the end of an animation.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"cycle_complete\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Provides an abstract base class for animator classes that control animation output from a data set subtype of AnimationSetBase.\n *\n * @see away.animators.AnimationSetBase\n */\nclass AnimatorBase extends NamedAssetBase implements IAnimator\n{\n\tprivate _broadcaster:RequestAnimationFrame;\n\tprivate _isPlaying:boolean;\n\tprivate _autoUpdate:boolean = true;\n\tprivate _startEvent:AnimatorEvent;\n\tprivate _stopEvent:AnimatorEvent;\n\tprivate _cycleEvent:AnimatorEvent;\n\tprivate _time:number /*int*/ = 0;\n\tprivate _playbackSpeed:number = 1;\n\n\tpublic _pAnimationSet:IAnimationSet;\n\tpublic _pOwners:Array = new Array();\n\tpublic _pActiveNode:AnimationNodeBase;\n\tpublic _pActiveState:IAnimationState;\n\tpublic _pActiveAnimationName:string;\n\tpublic _pAbsoluteTime:number = 0;\n\n\tprivate _animationStates:Object = new Object();\n\n\t/**\n\t * Enables translation of the animated mesh from data returned per frame via the positionDelta property of the active animation node. Defaults to true.\n\t *\n\t * @see away.animators.IAnimationState#positionDelta\n\t */\n\tpublic updatePosition:boolean = true;\n\n\tpublic getAnimationState(node:AnimationNodeBase):IAnimationState\n\t{\n\t\tvar className:any = node.stateClass;\n\t\tvar uID:number = node.id;\n\n\t\tif (this._animationStates[uID] == null)\n\t\t\tthis._animationStates[uID] = new className(this, node);\n\n\t\treturn this._animationStates[uID];\n\t}\n\n\tpublic getAnimationStateByName(name:string):IAnimationState\n\t{\n\t\treturn this.getAnimationState(this._pAnimationSet.getAnimation(name));\n\t}\n\n\t/**\n\t * Returns the internal absolute time of the animator, calculated by the current time and the playback speed.\n\t *\n\t * @see #time\n\t * @see #playbackSpeed\n\t */\n\tpublic get absoluteTime():number\n\t{\n\t\treturn this._pAbsoluteTime;\n\t}\n\n\t/**\n\t * Returns the animation data set in use by the animator.\n\t */\n\tpublic get animationSet():IAnimationSet\n\t{\n\t\treturn this._pAnimationSet;\n\t}\n\n\t/**\n\t * Returns the current active animation state.\n\t */\n\tpublic get activeState():IAnimationState\n\t{\n\t\treturn this._pActiveState;\n\t}\n\n\t/**\n\t * Returns the current active animation node.\n\t */\n\tpublic get activeAnimation():AnimationNodeBase\n\t{\n\t\treturn this._pAnimationSet.getAnimation(this._pActiveAnimationName);\n\t}\n\n\t/**\n\t * Returns the current active animation node.\n\t */\n\tpublic get activeAnimationName():string\n\t{\n\t\treturn this._pActiveAnimationName;\n\t}\n\n\t/**\n\t * Determines whether the animators internal update mechanisms are active. Used in cases\n\t * where manual updates are required either via the time property or update() method.\n\t * Defaults to true.\n\t *\n\t * @see #time\n\t * @see #update()\n\t */\n\tpublic get autoUpdate():boolean\n\t{\n\t\treturn this._autoUpdate;\n\t}\n\n\tpublic set autoUpdate(value:boolean)\n\t{\n\t\tif (this._autoUpdate == value)\n\t\t\treturn;\n\n\t\tthis._autoUpdate = value;\n\n\t\tif (this._autoUpdate)\n\t\t\tthis.start(); else\n\t\t\tthis.stop();\n\t}\n\n\t/**\n\t * Gets and sets the internal time clock of the animator.\n\t */\n\tpublic get time():number /*int*/\n\t{\n\t\treturn this._time;\n\t}\n\n\tpublic set time(value:number /*int*/)\n\t{\n\t\tif (this._time == value)\n\t\t\treturn;\n\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * Sets the animation phase of the current active state's animation clip(s).\n\t *\n\t * @param value The phase value to use. 0 represents the beginning of an animation clip, 1 represents the end.\n\t */\n\tpublic phase(value:number)\n\t{\n\t\tthis._pActiveState.phase(value);\n\t}\n\n\t/**\n\t * Creates a new AnimatorBase object.\n\t *\n\t * @param animationSet The animation data set to be used by the animator object.\n\t */\n\tconstructor(animationSet:IAnimationSet)\n\t{\n\t\tsuper();\n\n\t\tthis._pAnimationSet = animationSet;\n\n\t\tthis._broadcaster = new RequestAnimationFrame(this.onEnterFrame, this);\n\t}\n\n\t/**\n\t * The amount by which passed time should be scaled. Used to slow down or speed up animations. Defaults to 1.\n\t */\n\tpublic get playbackSpeed():number\n\t{\n\t\treturn this._playbackSpeed;\n\t}\n\n\tpublic set playbackSpeed(value:number)\n\t{\n\t\tthis._playbackSpeed = value;\n\t}\n\n\tpublic setRenderState(shaderObject:ShaderObjectBase, renderable:RenderableBase, stage:Stage, camera:Camera, vertexConstantOffset:number /*int*/, vertexStreamOffset:number /*int*/)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * Resumes the automatic playback clock controling the active state of the animator.\n\t */\n\tpublic start()\n\t{\n\t\tif (this._isPlaying || !this._autoUpdate)\n\t\t\treturn;\n\n\t\tthis._time = this._pAbsoluteTime = getTimer();\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._broadcaster.start();\n\n\t\tif (!this.hasEventListener(AnimatorEvent.START))\n\t\t\treturn;\n\n\t\tif (this._startEvent == null)\n\t\t\tthis._startEvent = new AnimatorEvent(AnimatorEvent.START, this);\n\n\t\tthis.dispatchEvent(this._startEvent);\n\t}\n\n\t/**\n\t * Pauses the automatic playback clock of the animator, in case manual updates are required via the\n\t * time property or update() method.\n\t *\n\t * @see #time\n\t * @see #update()\n\t */\n\tpublic stop()\n\t{\n\t\tif (!this._isPlaying)\n\t\t\treturn;\n\n\t\tthis._isPlaying = false;\n\n\t\tthis._broadcaster.stop();\n\n\t\tif (!this.hasEventListener(AnimatorEvent.STOP))\n\t\t\treturn;\n\n\t\tif (this._stopEvent == null)\n\t\t\tthis._stopEvent = new AnimatorEvent(AnimatorEvent.STOP, this);\n\n\t\tthis.dispatchEvent(this._stopEvent);\n\t}\n\n\t/**\n\t * Provides a way to manually update the active state of the animator when automatic\n\t * updates are disabled.\n\t *\n\t * @see #stop()\n\t * @see #autoUpdate\n\t */\n\tpublic update(time:number /*int*/)\n\t{\n\t\tvar dt:number = (time - this._time)*this.playbackSpeed;\n\n\t\tthis._pUpdateDeltaTime(dt);\n\n\t\tthis._time = time;\n\t}\n\n\tpublic reset(name:string, offset:number = 0)\n\t{\n\t\tthis.getAnimationState(this._pAnimationSet.getAnimation(name)).offset(offset + this._pAbsoluteTime);\n\t}\n\n\t/**\n\t * Used by the mesh object to which the animator is applied, registers the owner for internal use.\n\t *\n\t * @private\n\t */\n\tpublic addOwner(mesh:Mesh)\n\t{\n\t\tthis._pOwners.push(mesh);\n\t}\n\n\t/**\n\t * Used by the mesh object from which the animator is removed, unregisters the owner for internal use.\n\t *\n\t * @private\n\t */\n\tpublic removeOwner(mesh:Mesh)\n\t{\n\t\tthis._pOwners.splice(this._pOwners.indexOf(mesh), 1);\n\t}\n\n\t/**\n\t * Internal abstract method called when the time delta property of the animator's contents requires updating.\n\t *\n\t * @private\n\t */\n\tpublic _pUpdateDeltaTime(dt:number)\n\t{\n\t\tthis._pAbsoluteTime += dt;\n\n\t\tthis._pActiveState.update(this._pAbsoluteTime);\n\n\t\tif (this.updatePosition)\n\t\t\tthis.applyPositionDelta();\n\t}\n\n\t/**\n\t * Enter frame event handler for automatically updating the active state of the animator.\n\t */\n\tprivate onEnterFrame(event:Event = null)\n\t{\n\t\tthis.update(getTimer());\n\t}\n\n\tprivate applyPositionDelta()\n\t{\n\t\tvar delta:Vector3D = this._pActiveState.positionDelta;\n\t\tvar dist:number = delta.length;\n\t\tvar len:number /*uint*/;\n\t\tif (dist > 0) {\n\t\t\tlen = this._pOwners.length;\n\t\t\tfor (var i:number /*uint*/ = 0; i < len; ++i)\n\t\t\t\tthis._pOwners[i].translateLocal(delta, dist);\n\t\t}\n\t}\n\n\t/**\n\t * for internal use.\n\t *\n\t * @private\n\t */\n\tpublic dispatchCycleEvent()\n\t{\n\t\tif (this.hasEventListener(AnimatorEvent.CYCLE_COMPLETE)) {\n\t\t\tif (this._cycleEvent == null)\n\t\t\t\tthis._cycleEvent = new AnimatorEvent(AnimatorEvent.CYCLE_COMPLETE, this);\n\n\t\t\tthis.dispatchEvent(this._cycleEvent);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic clone():AnimatorBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic testGPUCompatibility(shaderObject:ShaderObjectBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.ANIMATOR;\n\t}\n\n\n\tpublic getRenderableSubGeometry(renderable:TriangleSubMeshRenderable, sourceSubGeometry:TriangleSubGeometry):TriangleSubGeometry\n\t{\n\t\t//nothing to do here\n\t\treturn sourceSubGeometry;\n\t}\n}\n\nexport = AnimatorBase;", + "import AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport IAsset\t\t\t\t\t\t= require(\"awayjs-core/lib/library/IAsset\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nimport AnimationNodeBase\t\t\t= require(\"awayjs-display/lib/animators/nodes/AnimationNodeBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport AnimationSetError\t\t\t= require(\"awayjs-stagegl/lib/errors/AnimationSetError\");\n\n/**\n * Provides an abstract base class for data set classes that hold animation data for use in animator classes.\n *\n * @see away.animators.AnimatorBase\n */\nclass AnimationSetBase extends NamedAssetBase implements IAsset\n{\n\tprivate _usesCPU:boolean;\n\tprivate _animations:Array = new Array();\n\tprivate _animationNames:Array = new Array();\n\tprivate _animationDictionary:Object = new Object();\n\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Retrieves a temporary GPU register that's still free.\n\t *\n\t * @param exclude An array of non-free temporary registers.\n\t * @param excludeAnother An additional register that's not free.\n\t * @return A temporary register that can be used.\n\t */\n\tpublic _pFindTempReg(exclude:Array, excludeAnother:string = null):string\n\t{\n\t\tvar i:number /*uint*/ = 0;\n\t\tvar reg:string;\n\n\t\twhile (true) {\n\t\t\treg = \"vt\" + i;\n\t\t\tif (exclude.indexOf(reg) == -1 && excludeAnother != reg)\n\t\t\t\treturn reg;\n\t\t\t++i;\n\t\t}\n\n\t\t// can't be reached\n\t\treturn null;\n\t}\n\n\t/**\n\t * Indicates whether the properties of the animation data contained within the set combined with\n\t * the vertex registers already in use on shading materials allows the animation data to utilise\n\t * GPU calls.\n\t */\n\tpublic get usesCPU():boolean\n\t{\n\t\treturn this._usesCPU;\n\t}\n\n\t/**\n\t * Called by the material to reset the GPU indicator before testing whether register space in the shader\n\t * is available for running GPU-based animation code.\n\t *\n\t * @private\n\t */\n\tpublic resetGPUCompatibility()\n\t{\n\t\tthis._usesCPU = false;\n\t}\n\n\tpublic cancelGPUCompatibility()\n\t{\n\t\tthis._usesCPU = true;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALVertexCode(shaderObject:ShaderObjectBase):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic activate(shaderObject:ShaderObjectBase, stage:Stage)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic deactivate(shaderObject:ShaderObjectBase, stage:Stage)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALFragmentCode(shaderObject:ShaderObjectBase, shadedTarget:string):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic getAGALUVCode(shaderObject:ShaderObjectBase):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic doneAGALCode(shaderObject:ShaderObjectBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.ANIMATION_SET;\n\t}\n\n\t/**\n\t * Returns a vector of animation state objects that make up the contents of the animation data set.\n\t */\n\tpublic get animations():Array\n\t{\n\t\treturn this._animations;\n\t}\n\n\t/**\n\t * Returns a vector of animation state objects that make up the contents of the animation data set.\n\t */\n\tpublic get animationNames():Array\n\t{\n\t\treturn this._animationNames;\n\t}\n\n\t/**\n\t * Check to determine whether a state is registered in the animation set under the given name.\n\t *\n\t * @param stateName The name of the animation state object to be checked.\n\t */\n\tpublic hasAnimation(name:string):boolean\n\t{\n\t\treturn this._animationDictionary[name] != null;\n\t}\n\n\t/**\n\t * Retrieves the animation state object registered in the animation data set under the given name.\n\t *\n\t * @param stateName The name of the animation state object to be retrieved.\n\t */\n\tpublic getAnimation(name:string):AnimationNodeBase\n\t{\n\t\treturn this._animationDictionary[name];\n\t}\n\n\t/**\n\t * Adds an animation state object to the aniamtion data set under the given name.\n\t *\n\t * @param stateName The name under which the animation state object will be stored.\n\t * @param animationState The animation state object to be staored in the set.\n\t */\n\tpublic addAnimation(node:AnimationNodeBase)\n\t{\n\t\tif (this._animationDictionary[node.name])\n\t\t\tthrow new AnimationSetError(\"root node name '\" + node.name + \"' already exists in the set\");\n\n\t\tthis._animationDictionary[node.name] = node;\n\n\t\tthis._animations.push(node);\n\n\t\tthis._animationNames.push(node.name);\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t */\n\tpublic dispose()\n\t{\n\t}\n}\n\nexport = AnimationSetBase;", + "import Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport RequestAnimationFrame\t\t= require(\"awayjs-core/lib/utils/RequestAnimationFrame\");\nimport getTimer\t\t\t\t\t\t= require(\"awayjs-core/lib/utils/getTimer\");\n\nimport IAnimationSet\t\t\t\t= require(\"awayjs-display/lib/animators/IAnimationSet\");\nimport IAnimator\t\t\t\t\t= require(\"awayjs-display/lib/animators/IAnimator\");\nimport AnimationNodeBase\t\t\t= require(\"awayjs-display/lib/animators/nodes/AnimationNodeBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport Mesh\t\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Mesh\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport IAnimationState\t\t\t\t= require(\"awayjs-stagegl/lib/animators/states/IAnimationState\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport TriangleSubMeshRenderable\t= require(\"awayjs-stagegl/lib/pool/TriangleSubMeshRenderable\");\nimport AnimatorEvent\t\t\t\t= require(\"awayjs-stagegl/lib/events/AnimatorEvent\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n * Dispatched when playback of an animation inside the animator object starts.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"start\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Dispatched when playback of an animation inside the animator object stops.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"stop\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Dispatched when playback of an animation reaches the end of an animation.\n *\n * @eventType away3d.events.AnimatorEvent\n */\n//[Event(name=\"cycle_complete\", type=\"away3d.events.AnimatorEvent\")]\n\n/**\n * Provides an abstract base class for animator classes that control animation output from a data set subtype of AnimationSetBase.\n *\n * @see away.animators.AnimationSetBase\n */\nclass AnimatorBase extends NamedAssetBase implements IAnimator\n{\n\tprivate _broadcaster:RequestAnimationFrame;\n\tprivate _isPlaying:boolean;\n\tprivate _autoUpdate:boolean = true;\n\tprivate _startEvent:AnimatorEvent;\n\tprivate _stopEvent:AnimatorEvent;\n\tprivate _cycleEvent:AnimatorEvent;\n\tprivate _time:number /*int*/ = 0;\n\tprivate _playbackSpeed:number = 1;\n\n\tpublic _pAnimationSet:IAnimationSet;\n\tpublic _pOwners:Array = new Array();\n\tpublic _pActiveNode:AnimationNodeBase;\n\tpublic _pActiveState:IAnimationState;\n\tpublic _pActiveAnimationName:string;\n\tpublic _pAbsoluteTime:number = 0;\n\n\tprivate _animationStates:Object = new Object();\n\n\t/**\n\t * Enables translation of the animated mesh from data returned per frame via the positionDelta property of the active animation node. Defaults to true.\n\t *\n\t * @see away.animators.IAnimationState#positionDelta\n\t */\n\tpublic updatePosition:boolean = true;\n\n\tpublic getAnimationState(node:AnimationNodeBase):IAnimationState\n\t{\n\t\tvar className:any = node.stateClass;\n\t\tvar uID:number = node.id;\n\n\t\tif (this._animationStates[uID] == null)\n\t\t\tthis._animationStates[uID] = new className(this, node);\n\n\t\treturn this._animationStates[uID];\n\t}\n\n\tpublic getAnimationStateByName(name:string):IAnimationState\n\t{\n\t\treturn this.getAnimationState(this._pAnimationSet.getAnimation(name));\n\t}\n\n\t/**\n\t * Returns the internal absolute time of the animator, calculated by the current time and the playback speed.\n\t *\n\t * @see #time\n\t * @see #playbackSpeed\n\t */\n\tpublic get absoluteTime():number\n\t{\n\t\treturn this._pAbsoluteTime;\n\t}\n\n\t/**\n\t * Returns the animation data set in use by the animator.\n\t */\n\tpublic get animationSet():IAnimationSet\n\t{\n\t\treturn this._pAnimationSet;\n\t}\n\n\t/**\n\t * Returns the current active animation state.\n\t */\n\tpublic get activeState():IAnimationState\n\t{\n\t\treturn this._pActiveState;\n\t}\n\n\t/**\n\t * Returns the current active animation node.\n\t */\n\tpublic get activeAnimation():AnimationNodeBase\n\t{\n\t\treturn this._pAnimationSet.getAnimation(this._pActiveAnimationName);\n\t}\n\n\t/**\n\t * Returns the current active animation node.\n\t */\n\tpublic get activeAnimationName():string\n\t{\n\t\treturn this._pActiveAnimationName;\n\t}\n\n\t/**\n\t * Determines whether the animators internal update mechanisms are active. Used in cases\n\t * where manual updates are required either via the time property or update() method.\n\t * Defaults to true.\n\t *\n\t * @see #time\n\t * @see #update()\n\t */\n\tpublic get autoUpdate():boolean\n\t{\n\t\treturn this._autoUpdate;\n\t}\n\n\tpublic set autoUpdate(value:boolean)\n\t{\n\t\tif (this._autoUpdate == value)\n\t\t\treturn;\n\n\t\tthis._autoUpdate = value;\n\n\t\tif (this._autoUpdate)\n\t\t\tthis.start(); else\n\t\t\tthis.stop();\n\t}\n\n\t/**\n\t * Gets and sets the internal time clock of the animator.\n\t */\n\tpublic get time():number /*int*/\n\t{\n\t\treturn this._time;\n\t}\n\n\tpublic set time(value:number /*int*/)\n\t{\n\t\tif (this._time == value)\n\t\t\treturn;\n\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * Sets the animation phase of the current active state's animation clip(s).\n\t *\n\t * @param value The phase value to use. 0 represents the beginning of an animation clip, 1 represents the end.\n\t */\n\tpublic phase(value:number)\n\t{\n\t\tthis._pActiveState.phase(value);\n\t}\n\n\t/**\n\t * Creates a new AnimatorBase object.\n\t *\n\t * @param animationSet The animation data set to be used by the animator object.\n\t */\n\tconstructor(animationSet:IAnimationSet)\n\t{\n\t\tsuper();\n\n\t\tthis._pAnimationSet = animationSet;\n\n\t\tthis._broadcaster = new RequestAnimationFrame(this.onEnterFrame, this);\n\t}\n\n\t/**\n\t * The amount by which passed time should be scaled. Used to slow down or speed up animations. Defaults to 1.\n\t */\n\tpublic get playbackSpeed():number\n\t{\n\t\treturn this._playbackSpeed;\n\t}\n\n\tpublic set playbackSpeed(value:number)\n\t{\n\t\tthis._playbackSpeed = value;\n\t}\n\n\tpublic setRenderState(shaderObject:ShaderObjectBase, renderable:RenderableBase, stage:Stage, camera:Camera, vertexConstantOffset:number /*int*/, vertexStreamOffset:number /*int*/)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * Resumes the automatic playback clock controling the active state of the animator.\n\t */\n\tpublic start()\n\t{\n\t\tif (this._isPlaying || !this._autoUpdate)\n\t\t\treturn;\n\n\t\tthis._time = this._pAbsoluteTime = getTimer();\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._broadcaster.start();\n\n\t\tif (!this.hasEventListener(AnimatorEvent.START))\n\t\t\treturn;\n\n\t\tif (this._startEvent == null)\n\t\t\tthis._startEvent = new AnimatorEvent(AnimatorEvent.START, this);\n\n\t\tthis.dispatchEvent(this._startEvent);\n\t}\n\n\t/**\n\t * Pauses the automatic playback clock of the animator, in case manual updates are required via the\n\t * time property or update() method.\n\t *\n\t * @see #time\n\t * @see #update()\n\t */\n\tpublic stop()\n\t{\n\t\tif (!this._isPlaying)\n\t\t\treturn;\n\n\t\tthis._isPlaying = false;\n\n\t\tthis._broadcaster.stop();\n\n\t\tif (!this.hasEventListener(AnimatorEvent.STOP))\n\t\t\treturn;\n\n\t\tif (this._stopEvent == null)\n\t\t\tthis._stopEvent = new AnimatorEvent(AnimatorEvent.STOP, this);\n\n\t\tthis.dispatchEvent(this._stopEvent);\n\t}\n\n\t/**\n\t * Provides a way to manually update the active state of the animator when automatic\n\t * updates are disabled.\n\t *\n\t * @see #stop()\n\t * @see #autoUpdate\n\t */\n\tpublic update(time:number /*int*/)\n\t{\n\t\tvar dt:number = (time - this._time)*this.playbackSpeed;\n\n\t\tthis._pUpdateDeltaTime(dt);\n\n\t\tthis._time = time;\n\t}\n\n\tpublic reset(name:string, offset:number = 0)\n\t{\n\t\tthis.getAnimationState(this._pAnimationSet.getAnimation(name)).offset(offset + this._pAbsoluteTime);\n\t}\n\n\t/**\n\t * Used by the mesh object to which the animator is applied, registers the owner for internal use.\n\t *\n\t * @private\n\t */\n\tpublic addOwner(mesh:Mesh)\n\t{\n\t\tthis._pOwners.push(mesh);\n\t}\n\n\t/**\n\t * Used by the mesh object from which the animator is removed, unregisters the owner for internal use.\n\t *\n\t * @private\n\t */\n\tpublic removeOwner(mesh:Mesh)\n\t{\n\t\tthis._pOwners.splice(this._pOwners.indexOf(mesh), 1);\n\t}\n\n\t/**\n\t * Internal abstract method called when the time delta property of the animator's contents requires updating.\n\t *\n\t * @private\n\t */\n\tpublic _pUpdateDeltaTime(dt:number)\n\t{\n\t\tthis._pAbsoluteTime += dt;\n\n\t\tthis._pActiveState.update(this._pAbsoluteTime);\n\n\t\tif (this.updatePosition)\n\t\t\tthis.applyPositionDelta();\n\t}\n\n\t/**\n\t * Enter frame event handler for automatically updating the active state of the animator.\n\t */\n\tprivate onEnterFrame(event:Event = null)\n\t{\n\t\tthis.update(getTimer());\n\t}\n\n\tprivate applyPositionDelta()\n\t{\n\t\tvar delta:Vector3D = this._pActiveState.positionDelta;\n\t\tvar dist:number = delta.length;\n\t\tvar len:number /*uint*/;\n\t\tif (dist > 0) {\n\t\t\tlen = this._pOwners.length;\n\t\t\tfor (var i:number /*uint*/ = 0; i < len; ++i)\n\t\t\t\tthis._pOwners[i].translateLocal(delta, dist);\n\t\t}\n\t}\n\n\t/**\n\t * for internal use.\n\t *\n\t * @private\n\t */\n\tpublic dispatchCycleEvent()\n\t{\n\t\tif (this.hasEventListener(AnimatorEvent.CYCLE_COMPLETE)) {\n\t\t\tif (this._cycleEvent == null)\n\t\t\t\tthis._cycleEvent = new AnimatorEvent(AnimatorEvent.CYCLE_COMPLETE, this);\n\n\t\t\tthis.dispatchEvent(this._cycleEvent);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic clone():AnimatorBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic testGPUCompatibility(shaderObject:ShaderObjectBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.ANIMATOR;\n\t}\n\n\n\tpublic getRenderableSubGeometry(renderable:TriangleSubMeshRenderable, sourceSubGeometry:TriangleSubGeometry):TriangleSubGeometry\n\t{\n\t\t//nothing to do here\n\t\treturn sourceSubGeometry;\n\t}\n}\n\nexport = AnimatorBase;", "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\n\nimport AnimationNodeBase\t\t\t= require(\"awayjs-display/lib/animators/nodes/AnimationNodeBase\");\n\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\n\n/**\n * ...\n */\nclass AnimationRegisterCache extends ShaderRegisterCache\n{\n\t//vertex\n\tpublic positionAttribute:ShaderRegisterElement;\n\tpublic uvAttribute:ShaderRegisterElement;\n\tpublic positionTarget:ShaderRegisterElement;\n\tpublic scaleAndRotateTarget:ShaderRegisterElement;\n\tpublic velocityTarget:ShaderRegisterElement;\n\tpublic vertexTime:ShaderRegisterElement;\n\tpublic vertexLife:ShaderRegisterElement;\n\tpublic vertexZeroConst:ShaderRegisterElement;\n\tpublic vertexOneConst:ShaderRegisterElement;\n\tpublic vertexTwoConst:ShaderRegisterElement;\n\tpublic uvTarget:ShaderRegisterElement;\n\tpublic colorAddTarget:ShaderRegisterElement;\n\tpublic colorMulTarget:ShaderRegisterElement;\n\t//vary\n\tpublic colorAddVary:ShaderRegisterElement;\n\tpublic colorMulVary:ShaderRegisterElement;\n\n\t//fragment\n\n\tpublic uvVar:ShaderRegisterElement;\n\n\t//these are targets only need to rotate ( normal and tangent )\n\tpublic rotationRegisters:Array;\n\n\tpublic needFragmentAnimation:boolean;\n\tpublic needUVAnimation:boolean;\n\n\tpublic sourceRegisters:Array;\n\tpublic targetRegisters:Array;\n\n\tprivate indexDictionary:Object = new Object();\n\n\t//set true if has an node which will change UV\n\tpublic hasUVNode:boolean;\n\t//set if the other nodes need to access the velocity\n\tpublic needVelocity:boolean;\n\t//set if has a billboard node.\n\tpublic hasBillboard:boolean;\n\t//set if has an node which will apply color multiple operation\n\tpublic hasColorMulNode:boolean;\n\t//set if has an node which will apply color add operation\n\tpublic hasColorAddNode:boolean;\n\n\tconstructor(profile:string)\n\t{\n\t\tsuper(profile);\n\t}\n\n\tpublic reset()\n\t{\n\t\tsuper.reset();\n\n\t\tthis.rotationRegisters = new Array();\n\t\tthis.positionAttribute = this.getRegisterFromString(this.sourceRegisters[0]);\n\t\tthis.scaleAndRotateTarget = this.getRegisterFromString(this.targetRegisters[0]);\n\t\tthis.addVertexTempUsages(this.scaleAndRotateTarget, 1);\n\n\t\tfor (var i:number /*int*/ = 1; i < this.targetRegisters.length; i++) {\n\t\t\tthis.rotationRegisters.push(this.getRegisterFromString(this.targetRegisters[i]));\n\t\t\tthis.addVertexTempUsages(this.rotationRegisters[i - 1], 1);\n\t\t}\n\n\t\tthis.scaleAndRotateTarget = new ShaderRegisterElement(this.scaleAndRotateTarget.regName, this.scaleAndRotateTarget.index); //only use xyz, w is used as vertexLife\n\n\t\t//allot const register\n\n\t\tthis.vertexZeroConst = this.getFreeVertexConstant();\n\t\tthis.vertexZeroConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 0);\n\t\tthis.vertexOneConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 1);\n\t\tthis.vertexTwoConst = new ShaderRegisterElement(this.vertexZeroConst.regName, this.vertexZeroConst.index, 2);\n\n\t\t//allot temp register\n\t\tthis.positionTarget = this.getFreeVertexVectorTemp();\n\t\tthis.addVertexTempUsages(this.positionTarget, 1);\n\t\tthis.positionTarget = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index);\n\n\t\tif (this.needVelocity) {\n\t\t\tthis.velocityTarget = this.getFreeVertexVectorTemp();\n\t\t\tthis.addVertexTempUsages(this.velocityTarget, 1);\n\t\t\tthis.velocityTarget = new ShaderRegisterElement(this.velocityTarget.regName, this.velocityTarget.index);\n\t\t\tthis.vertexTime = new ShaderRegisterElement(this.velocityTarget.regName, this.velocityTarget.index, 3);\n\t\t\tthis.vertexLife = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index, 3);\n\t\t} else {\n\t\t\tvar tempTime:ShaderRegisterElement = this.getFreeVertexVectorTemp();\n\t\t\tthis.addVertexTempUsages(tempTime, 1);\n\t\t\tthis.vertexTime = new ShaderRegisterElement(tempTime.regName, tempTime.index, 0);\n\t\t\tthis.vertexLife = new ShaderRegisterElement(tempTime.regName, tempTime.index, 1);\n\t\t}\n\n\t}\n\n\tpublic setUVSourceAndTarget(UVAttribute:string, UVVaring:string)\n\t{\n\t\tthis.uvVar = this.getRegisterFromString(UVVaring);\n\t\tthis.uvAttribute = this.getRegisterFromString(UVAttribute);\n\t\t//uv action is processed after normal actions,so use offsetTarget as uvTarget\n\t\tthis.uvTarget = new ShaderRegisterElement(this.positionTarget.regName, this.positionTarget.index);\n\t}\n\n\tpublic setRegisterIndex(node:AnimationNodeBase, parameterIndex:number /*int*/, registerIndex:number /*int*/)\n\t{\n\t\t//8 should be enough for any node.\n\t\tvar t:Array /*int*/ = this.indexDictionary[node.id];\n\n\t\tif (t == null)\n\t\t\tt = this.indexDictionary[node.id] = new Array(8) /*int*/;\n\n\t\tt[parameterIndex] = registerIndex;\n\t}\n\n\tpublic getRegisterIndex(node:AnimationNodeBase, parameterIndex:number /*int*/):number /*int*/\n\t{\n\t\treturn (> this.indexDictionary[node.id])[parameterIndex];\n\t}\n\n\tpublic getInitCode():string\n\t{\n\t\tvar len:number /*int*/ = this.sourceRegisters.length;\n\t\tvar code:string = \"\";\n\t\tfor (var i:number /*int*/ = 0; i < len; i++)\n\t\t\tcode += \"mov \" + this.targetRegisters[i] + \",\" + this.sourceRegisters[i] + \"\\n\";\n\n\t\tcode += \"mov \" + this.positionTarget + \".xyz,\" + this.vertexZeroConst.toString() + \"\\n\";\n\n\t\tif (this.needVelocity)\n\t\t\tcode += \"mov \" + this.velocityTarget + \".xyz,\" + this.vertexZeroConst.toString() + \"\\n\";\n\n\t\treturn code;\n\t}\n\n\tpublic getCombinationCode():string\n\t{\n\t\treturn \"add \" + this.scaleAndRotateTarget + \".xyz,\" + this.scaleAndRotateTarget + \".xyz,\" + this.positionTarget + \".xyz\\n\";\n\t}\n\n\tpublic initColorRegisters():string\n\t{\n\t\tvar code:string = \"\";\n\t\tif (this.hasColorMulNode) {\n\t\t\tthis.colorMulTarget = this.getFreeVertexVectorTemp();\n\t\t\tthis.addVertexTempUsages(this.colorMulTarget, 1);\n\t\t\tthis.colorMulVary = this.getFreeVarying();\n\t\t\tcode += \"mov \" + this.colorMulTarget + \",\" + this.vertexOneConst + \"\\n\";\n\t\t}\n\t\tif (this.hasColorAddNode) {\n\t\t\tthis.colorAddTarget = this.getFreeVertexVectorTemp();\n\t\t\tthis.addVertexTempUsages(this.colorAddTarget, 1);\n\t\t\tthis.colorAddVary = this.getFreeVarying();\n\t\t\tcode += \"mov \" + this.colorAddTarget + \",\" + this.vertexZeroConst + \"\\n\";\n\t\t}\n\t\treturn code;\n\t}\n\n\tpublic getColorPassCode():string\n\t{\n\t\tvar code:string = \"\";\n\t\tif (this.needFragmentAnimation && (this.hasColorAddNode || this.hasColorMulNode)) {\n\t\t\tif (this.hasColorMulNode)\n\t\t\t\tcode += \"mov \" + this.colorMulVary + \",\" + this.colorMulTarget + \"\\n\";\n\t\t\tif (this.hasColorAddNode)\n\t\t\t\tcode += \"mov \" + this.colorAddVary + \",\" + this.colorAddTarget + \"\\n\";\n\t\t}\n\t\treturn code;\n\t}\n\n\tpublic getColorCombinationCode(shadedTarget:string):string\n\t{\n\t\tvar code:string = \"\";\n\t\tif (this.needFragmentAnimation && (this.hasColorAddNode || this.hasColorMulNode)) {\n\t\t\tvar colorTarget:ShaderRegisterElement = this.getRegisterFromString(shadedTarget);\n\t\t\tthis.addFragmentTempUsages(colorTarget, 1);\n\t\t\tif (this.hasColorMulNode)\n\t\t\t\tcode += \"mul \" + colorTarget + \",\" + colorTarget + \",\" + this.colorMulVary + \"\\n\";\n\t\t\tif (this.hasColorAddNode)\n\t\t\t\tcode += \"add \" + colorTarget + \",\" + colorTarget + \",\" + this.colorAddVary + \"\\n\";\n\t\t}\n\t\treturn code;\n\t}\n\n\tprivate getRegisterFromString(code:string):ShaderRegisterElement\n\t{\n\t\tvar temp:Array = code.split(/(\\d+)/);\n\t\treturn new ShaderRegisterElement(temp[0], parseInt(temp[1]));\n\t}\n\n\tpublic vertexConstantData:Array = new Array();\n\tpublic fragmentConstantData:Array = new Array();\n\n\tprivate _numVertexConstant:number /*int*/;\n\tprivate _numFragmentConstant:number /*int*/;\n\n\tpublic get numVertexConstant():number /*int*/\n\t{\n\t\treturn this._numVertexConstant;\n\t}\n\n\tpublic get numFragmentConstant():number /*int*/\n\t{\n\t\treturn this._numFragmentConstant;\n\t}\n\n\tpublic setDataLength()\n\t{\n\t\tthis._numVertexConstant = this.numUsedVertexConstants - this.vertexConstantOffset;\n\t\tthis._numFragmentConstant = this.numUsedFragmentConstants - this.fragmentConstantOffset;\n\t\tthis.vertexConstantData.length = this._numVertexConstant*4;\n\t\tthis.fragmentConstantData.length = this._numFragmentConstant*4;\n\t}\n\n\tpublic setVertexConst(index:number /*int*/, x:number = 0, y:number = 0, z:number = 0, w:number = 0)\n\t{\n\t\tvar _index:number /*int*/ = (index - this.vertexConstantOffset)*4;\n\t\tthis.vertexConstantData[_index++] = x;\n\t\tthis.vertexConstantData[_index++] = y;\n\t\tthis.vertexConstantData[_index++] = z;\n\t\tthis.vertexConstantData[_index] = w;\n\t}\n\n\tpublic setVertexConstFromArray(index:number /*int*/, data:Array)\n\t{\n\t\tvar _index:number /*int*/ = (index - this.vertexConstantOffset)*4;\n\t\tfor (var i:number /*int*/ = 0; i < data.length; i++)\n\t\t\tthis.vertexConstantData[_index++] = data[i];\n\t}\n\n\tpublic setVertexConstFromMatrix(index:number /*int*/, matrix:Matrix3D)\n\t{\n\t\tvar rawData:Array = matrix.rawData;\n\t\tvar _index:number /*int*/ = (index - this.vertexConstantOffset)*4;\n\t\tthis.vertexConstantData[_index++] = rawData[0];\n\t\tthis.vertexConstantData[_index++] = rawData[4];\n\t\tthis.vertexConstantData[_index++] = rawData[8];\n\t\tthis.vertexConstantData[_index++] = rawData[12];\n\t\tthis.vertexConstantData[_index++] = rawData[1];\n\t\tthis.vertexConstantData[_index++] = rawData[5];\n\t\tthis.vertexConstantData[_index++] = rawData[9];\n\t\tthis.vertexConstantData[_index++] = rawData[13];\n\t\tthis.vertexConstantData[_index++] = rawData[2];\n\t\tthis.vertexConstantData[_index++] = rawData[6];\n\t\tthis.vertexConstantData[_index++] = rawData[10];\n\t\tthis.vertexConstantData[_index++] = rawData[14];\n\t\tthis.vertexConstantData[_index++] = rawData[3];\n\t\tthis.vertexConstantData[_index++] = rawData[7];\n\t\tthis.vertexConstantData[_index++] = rawData[11];\n\t\tthis.vertexConstantData[_index] = rawData[15];\n\n\t}\n\n\tpublic setFragmentConst(index:number /*int*/, x:number = 0, y:number = 0, z:number = 0, w:number = 0)\n\t{\n\t\tvar _index:number /*int*/ = (index - this.fragmentConstantOffset)*4;\n\t\tthis.fragmentConstantData[_index++] = x;\n\t\tthis.fragmentConstantData[_index++] = y;\n\t\tthis.fragmentConstantData[_index++] = z;\n\t\tthis.fragmentConstantData[_index] = w;\n\t}\n}\n\nexport = AnimationRegisterCache;", "import Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\n\ninterface IAnimationState\n{\n\tpositionDelta:Vector3D; // GET\n\n\toffset(startTime:number);\n\n\tupdate(time:number);\n\n\t/**\n\t * Sets the animation phase of the node.\n\t *\n\t * @param value The phase value to use. 0 represents the beginning of an animation clip, 1 represents the end.\n\t */\n\tphase(value:number);\n}\n\nexport = IAnimationState;", - "import Rectangle\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Event\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\nimport EventDispatcher\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport CubeTextureBase\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport TextureProxyBase\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\nimport CSS\t\t\t\t\t\t= require(\"awayjs-core/lib/utils/CSS\");\n\nimport ContextMode\t\t\t\t= require(\"awayjs-display/lib/display/ContextMode\");\nimport IContext\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport StageEvent\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\n\nimport StageManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/StageManager\");\nimport ContextStage3D\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport ContextWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextWebGL\");\n\n/**\n * Stage provides a proxy class to handle the creation and attachment of the Context\n * (and in turn the back buffer) it uses. Stage should never be created directly,\n * but requested through StageManager.\n *\n * @see away.managers.StageManager\n *\n */\nclass Stage extends EventDispatcher\n{\n\tprivate _context:IContext;\n\tprivate _container:HTMLElement;\n\tprivate _width:number;\n\tprivate _height:number;\n\tprivate _x:number = 0;\n\tprivate _y:number = 0;\n\n\t//private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame\n\n\tprivate _stageIndex:number = -1;\n\n\tprivate _usesSoftwareRendering:boolean;\n\tprivate _profile:string;\n\tprivate _stageManager:StageManager;\n\tprivate _antiAlias:number = 0;\n\tprivate _enableDepthAndStencil:boolean;\n\tprivate _contextRequested:boolean;\n\n\t//private var _activeVertexBuffers : Vector. = new Vector.(8, true);\n\t//private var _activeTextures : Vector. = new Vector.(8, true);\n\tprivate _renderTarget:TextureProxyBase = null;\n\tprivate _renderSurfaceSelector:number = 0;\n\tprivate _scissorRect:Rectangle;\n\tprivate _color:number;\n\tprivate _backBufferDirty:boolean;\n\tprivate _viewPort:Rectangle;\n\tprivate _enterFrame:Event;\n\tprivate _exitFrame:Event;\n\tprivate _viewportUpdated:StageEvent;\n\tprivate _viewportDirty:boolean;\n\tprivate _bufferClear:boolean;\n\n\t//private _mouse3DManager:away.managers.Mouse3DManager;\n\t//private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager\n\n\tprivate _initialised:boolean = false;\n\n\tconstructor(container:HTMLCanvasElement, stageIndex:number, stageManager:StageManager, forceSoftware:boolean = false, profile:string = \"baseline\")\n\t{\n\t\tsuper();\n\n\t\tthis._container = container;\n\n\t\tthis._stageIndex = stageIndex;\n\n\t\tthis._stageManager = stageManager;\n\n\t\tthis._viewPort = new Rectangle();\n\n\t\tthis._enableDepthAndStencil = true;\n\n\t\tCSS.setElementX(this._container, 0);\n\t\tCSS.setElementY(this._container, 0);\n\n\t\tthis.visible = true;\n\t}\n\n\t/**\n\t * Requests a Context object to attach to the managed gl canvas.\n\t */\n\tpublic requestContext(forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\")\n\t{\n\t\t// If forcing software, we can be certain that the\n\t\t// returned Context will be running software mode.\n\t\t// If not, we can't be sure and should stick to the\n\t\t// old value (will likely be same if re-requesting.)\n\n\t\tif (this._usesSoftwareRendering != null)\n\t\t\tthis._usesSoftwareRendering = forceSoftware;\n\n\t\tthis._profile = profile;\n\n\t\ttry {\n\t\t\tif (mode == ContextMode.FLASH)\n\t\t\t\tnew ContextStage3D( this._container, this._stageIndex, (context:IContext) => this._callback(context));\n\t\t\telse\n\t\t\t\tthis._context = new ContextWebGL( this._container, this._stageIndex);\n\n\t\t} catch (e) {\n\t\t\ttry {\n\t\t\t\tif (mode == ContextMode.AUTO)\n\t\t\t\t\tnew ContextStage3D( this._container, this._stageIndex, (context:IContext) => this._callback(context));\n\t\t\t\telse\n\t\t\t\t\tthis.dispatchEvent(new Event(Event.ERROR));\n\t\t\t} catch (e) {\n\t\t\t\tthis.dispatchEvent(new Event(Event.ERROR));\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._context)\n\t\t\tthis._callback(this._context);\n\t}\n\n\t/**\n\t * The width of the gl canvas\n\t */\n\tpublic get width()\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic set width(val:number)\n\t{\n\t\tif (this._width == val)\n\t\t\treturn;\n\n\t\tCSS.setElementWidth(this._container, val);\n\n\t\tthis._width = this._viewPort.width = val;\n\n\t\tthis._backBufferDirty = true;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The height of the gl canvas\n\t */\n\tpublic get height()\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic set height(val:number)\n\t{\n\t\tif (this._height == val)\n\t\t\treturn;\n\n\t\tCSS.setElementHeight(this._container, val);\n\n\t\tthis._height = this._viewPort.height = val;\n\n\t\tthis._backBufferDirty = true;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The x position of the gl canvas\n\t */\n\tpublic get x()\n\t{\n\t\treturn this._x;\n\t}\n\n\tpublic set x(val:number)\n\t{\n\t\tif (this._x == val)\n\t\t\treturn;\n\n\t\tCSS.setElementX(this._container, val);\n\n\t\tthis._x = this._viewPort.x = val;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The y position of the gl canvas\n\t */\n\tpublic get y()\n\t{\n\t\treturn this._y;\n\t}\n\n\tpublic set y(val:number)\n\t{\n\t\tif (this._y == val)\n\t\t\treturn;\n\n\t\tCSS.setElementY(this._container, val);\n\n\t\tthis._y = this._viewPort.y = val;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\tpublic set visible(val:boolean)\n\t{\n\t\tCSS.setElementVisibility(this._container, val);\n\t}\n\n\tpublic get visible()\n\t{\n\t\treturn CSS.getElementVisibility(this._container);\n\t}\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._container;\n\t}\n\n\t/**\n\t * The Context object associated with the given stage object.\n\t */\n\tpublic get context():IContext\n\t{\n\t\treturn this._context;\n\t}\n\n\tprivate notifyViewportUpdated()\n\t{\n\t\tif (this._viewportDirty)\n\t\t\treturn;\n\n\t\tthis._viewportDirty = true;\n\n\t\t//if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED))\n\t\t//return;\n\n\t\t//if (!_viewportUpdated)\n\t\tthis._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED);\n\n\t\tthis.dispatchEvent(this._viewportUpdated);\n\t}\n\n\tprivate notifyEnterFrame()\n\t{\n\t\t//if (!hasEventListener(Event.ENTER_FRAME))\n\t\t//return;\n\n\t\tif (!this._enterFrame)\n\t\t\tthis._enterFrame = new Event(Event.ENTER_FRAME);\n\n\t\tthis.dispatchEvent(this._enterFrame);\n\n\t}\n\n\tprivate notifyExitFrame()\n\t{\n\t\t//if (!hasEventListener(Event.EXIT_FRAME))\n\t\t//return;\n\n\t\tif (!this._exitFrame)\n\t\t\tthis._exitFrame = new Event(Event.EXIT_FRAME);\n\n\t\tthis.dispatchEvent(this._exitFrame);\n\t}\n\n\tpublic get profile():string\n\t{\n\t\treturn this._profile;\n\t}\n\n\t/**\n\t * Disposes the Stage object, freeing the Context attached to the Stage.\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._stageManager.iRemoveStage(this);\n\t\tthis.freeContext();\n\t\tthis._stageManager = null;\n\t\tthis._stageIndex = -1;\n\t}\n\n\t/**\n\t * Configures the back buffer associated with the Stage object.\n\t * @param backBufferWidth The width of the backbuffer.\n\t * @param backBufferHeight The height of the backbuffer.\n\t * @param antiAlias The amount of anti-aliasing to use.\n\t * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer.\n\t */\n\tpublic configureBackBuffer(backBufferWidth:number, backBufferHeight:number, antiAlias:number, enableDepthAndStencil:boolean)\n\t{\n\t\tthis.width = backBufferWidth;\n\t\tthis.height = backBufferHeight;\n\n\t\tthis._antiAlias = antiAlias;\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\n\t\tif (this._context)\n\t\t\tthis._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil);\n\t}\n\n\t/*\n\t * Indicates whether the depth and stencil buffer is used\n\t */\n\tpublic get enableDepthAndStencil():boolean\n\t{\n\t\treturn this._enableDepthAndStencil;\n\t}\n\n\tpublic set enableDepthAndStencil(enableDepthAndStencil:boolean)\n\t{\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\t\tthis._backBufferDirty = true;\n\t}\n\n\tpublic get renderTarget():TextureProxyBase\n\t{\n\t\treturn this._renderTarget;\n\t}\n\n\tpublic get renderSurfaceSelector():number\n\t{\n\t\treturn this._renderSurfaceSelector;\n\t}\n\n\t/*\n\t * Clear and reset the back buffer when using a shared context\n\t */\n\tpublic clear()\n\t{\n\t\tif (!this._context)\n\t\t\treturn;\n\n\t\tif (this._backBufferDirty) {\n\t\t\tthis.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\t\t\tthis._backBufferDirty = false;\n\t\t}\n\n\t\tthis._context.clear(( this._color & 0xff000000 ) >>> 24, // <--------- Zero-fill right shift\n\t\t\t\t\t\t\t ( this._color & 0xff0000 ) >>> 16, // <-------------|\n\t\t\t\t\t\t\t ( this._color & 0xff00 ) >>> 8, // <----------------|\n\t\t\t\t\t\t\t\tthis._color & 0xff);\n\n\t\tthis._bufferClear = true;\n\t}\n\n\t/**\n\t * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode.\n\t * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority.\n\t *\n\t * @param type The type of event.\n\t * @param listener The listener function that processes the event.\n\t * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false.\n\t * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0.\n\t * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not.\n\t */\n\tpublic addEventListener(type:string, listener:Function)\n\t{\n\t\tsuper.addEventListener(type, listener);\n\n\t\t//away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame');\n\n\t\t//if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){\n\n\t\t//_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference);\n\n\t\t//}\n\n\t\t/* Original code\n\t\t if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){\n\n\t\t _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference);\n\n\n\t\t }\n\t\t */\n\t}\n\n\t/**\n\t * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode.\n\t * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect.\n\t *\n\t * @param type The type of event.\n\t * @param listener The listener object to remove.\n\t * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false.\n\t */\n\tpublic removeEventListener(type:string, listener:Function)\n\t{\n\t\tsuper.removeEventListener(type, listener);\n\n\t\t/*\n\t\t // Remove the main rendering listener if no EnterFrame listeners remain\n\t\t if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this )\n\t\t && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME))\n\t\t {\n\n\t\t //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this );\n\n\t\t }\n\t\t */\n\t}\n\n\tpublic get scissorRect():Rectangle\n\t{\n\t\treturn this._scissorRect;\n\t}\n\n\tpublic set scissorRect(value:Rectangle)\n\t{\n\t\tthis._scissorRect = value;\n\n\t\tthis._context.setScissorRectangle(this._scissorRect);\n\t}\n\n\t/**\n\t * The index of the Stage which is managed by this instance of StageProxy.\n\t */\n\tpublic get stageIndex():number\n\t{\n\t\treturn this._stageIndex;\n\t}\n\n\t/**\n\t * Indicates whether the Stage managed by this proxy is running in software mode.\n\t * Remember to wait for the CONTEXT_CREATED event before checking this property,\n\t * as only then will it be guaranteed to be accurate.\n\t */\n\tpublic get usesSoftwareRendering():boolean\n\t{\n\t\treturn this._usesSoftwareRendering;\n\t}\n\n\t/**\n\t * The antiAliasing of the Stage.\n\t */\n\tpublic get antiAlias():number\n\t{\n\t\treturn this._antiAlias;\n\t}\n\n\tpublic set antiAlias(antiAlias:number)\n\t{\n\t\tthis._antiAlias = antiAlias;\n\t\tthis._backBufferDirty = true;\n\t}\n\n\t/**\n\t * A viewPort rectangle equivalent of the Stage size and position.\n\t */\n\tpublic get viewPort():Rectangle\n\t{\n\t\tthis._viewportDirty = false;\n\n\t\treturn this._viewPort;\n\t}\n\n\t/**\n\t * The background color of the Stage.\n\t */\n\tpublic get color():number\n\t{\n\t\treturn this._color;\n\t}\n\n\tpublic set color(color:number)\n\t{\n\t\tthis._color = color;\n\t}\n\n\t/**\n\t * The freshly cleared state of the backbuffer before any rendering\n\t */\n\tpublic get bufferClear():boolean\n\t{\n\t\treturn this._bufferClear;\n\t}\n\n\tpublic set bufferClear(newBufferClear:boolean)\n\t{\n\t\tthis._bufferClear = newBufferClear;\n\t}\n\n\t/*\n\t * Access to fire mouseevents across multiple layered view3D instances\n\t */\n\t//\t\tpublic get mouse3DManager():Mouse3DManager\n\t//\t\t{\n\t//\t\t\treturn this._mouse3DManager;\n\t//\t\t}\n\t//\n\t//\t\tpublic set mouse3DManager(value:Mouse3DManager)\n\t//\t\t{\n\t//\t\t\tthis._mouse3DManager = value;\n\t//\t\t}\n\n\t/* TODO: implement dependency Touch3DManager\n\t public get touch3DManager():Touch3DManager\n\t {\n\t return _touch3DManager;\n\t }\n\n\t public set touch3DManager(value:Touch3DManager)\n\t {\n\t _touch3DManager = value;\n\t }\n\t */\n\n\t/**\n\t * Frees the Context associated with this StageProxy.\n\t */\n\tprivate freeContext()\n\t{\n\t\tif (this._context) {\n\t\t\tthis._context.dispose();\n\n\t\t\tthis.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED));\n\t\t}\n\n\t\tthis._context = null;\n\n\t\tthis._initialised = false;\n\t}\n\n\t/**\n\t * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers.\n\t * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance.\n\t */\n\tprivate onEnterFrame(event:Event)\n\t{\n\t\tif (!this._context)\n\t\t\treturn;\n\n\t\t// Clear the stage instance\n\t\tthis.clear();\n\t\t//notify the enterframe listeners\n\t\tthis.notifyEnterFrame();\n\t\t// Call the present() to render the frame\n\t\tif (!this._context)\n\t\t\tthis._context.present();\n\t\t//notify the exitframe listeners\n\t\tthis.notifyExitFrame();\n\t}\n\n\tpublic recoverFromDisposal():boolean\n\t{\n\t\tif (!this._context)\n\t\t\treturn false;\n\n\t\t//away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' );\n\n\t\t/*\n\t\t if (this._iContext.driverInfo == \"Disposed\")\n\t\t {\n\t\t this._iContext = null;\n\t\t this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED));\n\t\t return false;\n\n\t\t }\n\t\t */\n\t\treturn true;\n\n\t}\n\n\tprivate _callback(context:IContext)\n\t{\n\t\tthis._context = context;\n\n\t\tthis._container = this._context.container;\n\n\t\t// Only configure back buffer if width and height have been set,\n\t\t// which they may not have been if View.render() has yet to be\n\t\t// invoked for the first time.\n\t\tif (this._width && this._height)\n\t\t\tthis._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\n\t\t// Dispatch the appropriate event depending on whether context was\n\t\t// created for the first time or recreated after a device loss.\n\t\tthis.dispatchEvent(new StageEvent(this._initialised? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED));\n\n\t\tthis._initialised = true;\n\t}\n}\n\nexport = Stage;", - "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport Billboard\t\t\t\t\t= require(\"awayjs-display/lib/entities/Billboard\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\n\n/**\n * @class away.pool.RenderableListItem\n */\nclass BillboardRenderable extends RenderableBase\n{\n\tprivate static _materialGeometry:Object = new Object();\n\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"billboard\";\n\n\t/**\n\t *\n\t */\n\tprivate _billboard:Billboard;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param billboard\n\t */\n\tconstructor(pool:RenderablePool, billboard:Billboard)\n\t{\n\t\tsuper(pool, billboard, billboard);\n\n\t\tthis._billboard = billboard;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {away.base.TriangleSubGeometry}\n\t */\n\tpublic _pGetSubGeometry():SubGeometryBase\n\t{\n\t\tvar material:MaterialBase = this._billboard.material;\n\n\t\tvar geometry:TriangleSubGeometry = BillboardRenderable._materialGeometry[material.id];\n\n\t\tif (!geometry) {\n\t\t\tgeometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true);\n\t\t\tgeometry.autoDeriveNormals = false;\n\t\t\tgeometry.autoDeriveTangents = false;\n\t\t\tgeometry.updateIndices(Array(0, 1, 2, 0, 2, 3));\n\t\t\tgeometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0));\n\t\t\tgeometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0));\n\t\t\tgeometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1));\n\t\t\tgeometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1));\n\t\t} else {\n\t\t\tgeometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0));\n\t\t}\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true;\n\n\t\treturn geometry;\n\t}\n}\n\nexport = BillboardRenderable;", - "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexData\");\n\n/**\n *\n */\nclass IndexDataPool\n{\n\tprivate static _pool:Object = new Object();\n\n\tconstructor()\n\t{\n\t}\n\n\tpublic static getItem(subGeometry:SubGeometryBase, level:number, indexOffset:number):IndexData\n\t{\n\t\tvar subGeometryData:Array = > (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array()));\n\n\t\tvar indexData:IndexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level));\n\t\tindexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices);\n\n\t\treturn indexData;\n\t}\n\n\tpublic static disposeItem(id:number, level:number)\n\t{\n\t\tvar subGeometryData:Array = > this._pool[id];\n\n\t\tsubGeometryData[level].dispose();\n\t\tsubGeometryData[level] = null;\n\t}\n\n\tpublic disposeData(id:number)\n\t{\n\t\tvar subGeometryData:Array = > IndexDataPool._pool[id];\n\n\t\tvar len:number = subGeometryData.length;\n\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\tsubGeometryData[i].dispose();\n\t\t\tsubGeometryData[i] = null;\n\t\t}\n\n\t\tIndexDataPool._pool[id] = null;\n\t}\n}\n\nexport = IndexDataPool;", - "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\n\n/**\n *\n */\nclass IndexData\n{\n\tprivate static LIMIT_VERTS:number = 0xffff;\n\n\tprivate static LIMIT_INDICES:number = 0xffffff;\n\n\tprivate _dataDirty = true;\n\n\tpublic invalid:Array = new Array(8);\n\n\tpublic contexts:Array = new Array(8);\n\n\tpublic buffers:Array = new Array(8);\n\n\tpublic data:Array;\n\n\tpublic indexMappings:Array;\n\n\tpublic originalIndices:Array;\n\n\tpublic offset:number;\n\n\tpublic level:number;\n\n\tconstructor(level:number)\n\t{\n\t\tthis.level = level;\n\t}\n\n\tpublic updateData(offset:number, indices:Array, numVertices:number)\n\t{\n\t\tif (this._dataDirty) {\n\t\t\tthis._dataDirty = false;\n\n\t\t\tif (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) {\n\t\t\t\t//shortcut for those buffers that fit into the maximum buffer sizes\n\t\t\t\tthis.indexMappings = null;\n\t\t\t\tthis.originalIndices = null;\n\t\t\t\tthis.setData(indices);\n\t\t\t\tthis.offset = indices.length;\n\t\t\t} else {\n\t\t\t\tvar i:number;\n\t\t\t\tvar len:number;\n\t\t\t\tvar outIndex:number;\n\t\t\t\tvar j:number;\n\t\t\t\tvar k:number;\n\t\t\t\tvar splitIndices:Array = new Array();\n\n\t\t\t\tthis.indexMappings = new Array(indices.length);\n\t\t\t\tthis.originalIndices = new Array();\n\n\t\t\t\ti = this.indexMappings.length;\n\n\t\t\t\twhile (i--)\n\t\t\t\t\tthis.indexMappings[i] = -1;\n\n\t\t\t\tvar originalIndex:number;\n\t\t\t\tvar splitIndex:number;\n\n\t\t\t\t// Loop over all triangles\n\t\t\t\toutIndex = 0;\n\t\t\t\tlen = indices.length;\n\t\t\t\ti = offset;\n\t\t\t\tk = 0;\n\t\t\t\twhile (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) {\n\t\t\t\t\t// Loop over all vertices in a triangle //TODO ensure this works for segments or any grouping\n\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\n\t\t\t\t\t\toriginalIndex = indices[i + j];\n\n\t\t\t\t\t\tif (this.indexMappings[originalIndex] >= 0) {\n\t\t\t\t\t\t\tsplitIndex = this.indexMappings[originalIndex];\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// This vertex does not yet exist in the split list and\n\t\t\t\t\t\t\t// needs to be copied from the long list.\n\t\t\t\t\t\t\tsplitIndex = k++;\n\t\t\t\t\t\t\tthis.indexMappings[originalIndex] = splitIndex;\n\t\t\t\t\t\t\tthis.originalIndices.push(originalIndex);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Store new index, which may have come from the mapping look-up,\n\t\t\t\t\t\t// or from copying a new set of vertex data from the original vector\n\t\t\t\t\t\tsplitIndices[outIndex + j] = splitIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\toutIndex += 3;\n\t\t\t\t\ti += 3\n\t\t\t\t}\n\n\t\t\t\tthis.setData(splitIndices);\n\t\t\t\tthis.offset = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic invalidateData()\n\t{\n\t\tthis._dataDirty = true;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.contexts[i]) {\n\t\t\t\tthis.contexts[i].disposeIndexData(this);\n\t\t\t\tthis.contexts[i] = null\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate disposeBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.buffers[i]) {\n\t\t\t\tthis.buffers[i].dispose();\n\t\t\t\tthis.buffers[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate invalidateBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i)\n\t\t\tthis.invalid[i] = true;\n\t}\n\n\t/**\n\t *\n\t * @param data\n\t * @private\n\t */\n\tprivate setData(data:Array)\n\t{\n\t\tif (this.data && this.data.length != data.length)\n\t\t\tthis.disposeBuffers();\n\t\telse\n\t\t\tthis.invalidateBuffers();\n\n\t\tthis.data = data;\n\t}\n}\n\nexport = IndexData;", - "import IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport LineSubMesh\t\t\t\t\t= require(\"awayjs-display/lib/base/LineSubMesh\");\nimport LineSubGeometry\t\t\t\t= require(\"awayjs-display/lib/base/LineSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\n\n/**\n * @class away.pool.LineSubMeshRenderable\n */\nclass LineSubMeshRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"linesubmesh\";\n\n\t/**\n\t *\n\t */\n\tpublic subMesh:LineSubMesh;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param subMesh\n\t * @param level\n\t * @param dataOffset\n\t */\n\tconstructor(pool:RenderablePool, subMesh:LineSubMesh, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tsuper(pool, subMesh.parentMesh, subMesh, level, indexOffset);\n\n\t\tthis.subMesh = subMesh;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {base.LineSubGeometry}\n\t * @protected\n\t */\n\tpublic _pGetSubGeometry():LineSubGeometry\n\t{\n\t\tvar subGeometry:LineSubGeometry = this.subMesh.subGeometry;\n\n\t\tthis._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true;\n\t\tthis._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true;\n\n\t\tif (subGeometry.thickness)\n\t\t\tthis._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true;\n\n\t\tif (subGeometry.startColors)\n\t\t\tthis._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true;\n\n\t\treturn subGeometry;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param materialOwner\n\t * @param level\n\t * @param indexOffset\n\t * @returns {away.pool.LineSubMeshRenderable}\n\t * @private\n\t */\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\treturn new LineSubMeshRenderable(pool, materialOwner, level, indexOffset);\n\t}\n}\n\nexport = LineSubMeshRenderable;", - "import MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\n\n/**\n * @class away.pool.MaterialDataPool\n */\nclass MaterialDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(material:StageGLMaterialBase):MaterialData\n\t{\n\t\treturn (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material))))\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(material:StageGLMaterialBase)\n\t{\n\t\tmaterial._iRemoveMaterialData(this._pool[material.id]);\n\n\t\tthis._pool[material.id] = null;\n\t}\n}\n\nexport = MaterialDataPool;", - "import IMaterialData\t\t\t\t= require(\"awayjs-display/lib/pool/IMaterialData\");\n\nimport MaterialDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialDataPool\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n *\n * @class away.pool.MaterialData\n */\nclass MaterialData implements IMaterialData\n{\n\tprivate _pool:MaterialDataPool;\n\n\tprivate _materialPassDataPool:MaterialPassDataPool;\n\n\tprivate _passes:Array;\n\n\tpublic context:ContextGLBase;\n\n\tpublic material:StageGLMaterialBase;\n\n\tpublic renderOrderId:number;\n\n\tpublic invalidAnimation:boolean = true;\n\n\tconstructor(pool:MaterialDataPool, context:ContextGLBase, material:StageGLMaterialBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis.material = material;\n\n\t\tthis._materialPassDataPool = new MaterialPassDataPool(material);\n\t}\n\n\tpublic getMaterialPass(materialPass:MaterialPassBase, profile:string):MaterialPassData\n\t{\n\t\tvar materialPassData:MaterialPassData = this._materialPassDataPool.getItem(materialPass);\n\n\t\tif (!materialPassData.shaderObject) {\n\t\t\tmaterialPassData.shaderObject = materialPass.createShaderObject(profile);\n\t\t\tmaterialPassData.invalid = true;\n\t\t}\n\n\t\tif (materialPassData.invalid) {\n\t\t\tmaterialPassData.invalid = false;\n\t\t\tvar compiler:ShaderCompilerBase = materialPassData.shaderObject.createCompiler(this.material, materialPass);\n\t\t\tcompiler.compile();\n\n\t\t\tmaterialPassData.shadedTarget = compiler.shadedTarget;\n\t\t\tmaterialPassData.vertexCode = compiler.vertexCode;\n\t\t\tmaterialPassData.fragmentCode = compiler.fragmentCode;\n\t\t\tmaterialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode;\n\t\t\tmaterialPassData.key = \"\";\n\t\t}\n\n\t\treturn materialPassData;\n\t}\n\n\tpublic getMaterialPasses(profile:string):Array\n\t{\n\t\tif (this._passes == null) {\n\t\t\tvar passes:Array = > this.material._iScreenPasses;\n\t\t\tvar numPasses:number = passes.length;\n\n\t\t\t//reset the material passes in MaterialData\n\t\t\tthis._passes = new Array(numPasses);\n\n\t\t\t//get the shader object for each screen pass and store\n\t\t\tfor (var i:number = 0; i < numPasses; i++)\n\t\t\t\tthis._passes[i] = this.getMaterialPass(passes[i], profile);\n\t\t}\n\n\t\treturn this._passes;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._materialPassDataPool.disposePool();\n\n\t\tthis._materialPassDataPool = null;\n\n\t\tthis._pool.disposeItem(this.material);\n\n\t\tthis._passes = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateMaterial()\n\t{\n\t\tthis._passes = null;\n\n\t\tthis.invalidateAnimation();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateAnimation()\n\t{\n\t\tthis.invalidAnimation = true;\n\t}\n}\n\nexport = MaterialData;", - "import MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n/**\n * @class away.pool.MaterialPassDataPool\n */\nclass MaterialPassDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _material:StageGLMaterialBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(material:StageGLMaterialBase)\n\t{\n\t\tthis._material = material;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(materialPass:MaterialPassBase):MaterialPassData\n\t{\n\t\treturn (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass)))));\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(materialPass:MaterialPassBase)\n\t{\n\t\tmaterialPass._iRemoveMaterialPassData(this._pool[materialPass.id]);\n\n\t\tdelete this._pool[materialPass.id];\n\t}\n\n\tpublic disposePool()\n\t{\n\t\tfor (var id in this._pool)\n\t\t\t( this._pool[id]).materialPass._iRemoveMaterialPassData(this._pool[id]);\n\n\t\tdelete this._pool;\n\t}\n}\n\nexport = MaterialPassDataPool;", - "import IMaterialPassData\t\t\t= require(\"awayjs-display/lib/pool/IMaterialPassData\");\n\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassDataPool\");\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/ProgramData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n *\n * @class away.pool.MaterialPassData\n */\nclass MaterialPassData implements IMaterialPassData\n{\n\tprivate _pool:MaterialPassDataPool;\n\n\tpublic material:StageGLMaterialBase;\n\n\tpublic shaderObject:ShaderObjectBase;\n\n\tpublic materialPass:MaterialPassBase;\n\n\tpublic programData:ProgramData;\n\n\tpublic shadedTarget:string;\n\n\tpublic vertexCode:string;\n\n\tpublic postAnimationFragmentCode:string;\n\n\tpublic fragmentCode:string;\n\n\tpublic animationVertexCode:string = \"\";\n\n\tpublic animationFragmentCode:string = \"\";\n\n\tpublic key:string;\n\n\tpublic invalid:boolean;\n\n\tpublic usesAnimation:boolean;\n\n\tconstructor(pool:MaterialPassDataPool, material:StageGLMaterialBase, materialPass:MaterialPassBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.material = material;\n\t\tthis.materialPass = materialPass;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.materialPass);\n\n\t\tthis.shaderObject.dispose();\n\t\tthis.shaderObject = null;\n\n\t\tthis.programData.dispose();\n\t\tthis.programData = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidate()\n\t{\n\t\tthis.invalid = true;\n\t}\n}\n\nexport = MaterialPassData;", - "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/ProgramData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n * @class away.pool.ProgramDataPool\n */\nclass ProgramDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(key:string):ProgramData\n\t{\n\t\treturn this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key));\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(key:string)\n\t{\n\t\tthis._pool[key] = null;\n\t}\n}\n\nexport = ProgramDataPool;", - "import ProgramDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/ProgramDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\n\n/**\n *\n * @class away.pool.ProgramDataBase\n */\nclass ProgramData\n{\n\tpublic static PROGRAMDATA_ID_COUNT:number = 0;\n\n\tprivate _pool:ProgramDataPool;\n\tprivate _key:string;\n\n\tpublic context:ContextGLBase;\n\n\tpublic usages:number = 0;\n\n\tpublic program:IProgram;\n\n\tpublic id:number;\n\n\tconstructor(pool:ProgramDataPool, context:ContextGLBase, key:string)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis._key = key;\n\t\tthis.context.registerProgram(this);\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis.usages--;\n\n\t\tif (!this.usages) {\n\t\t\tthis._pool.disposeItem(this._key);\n\n\t\t\tthis.context.unRegisterProgram(this);\n\n\t\t\tif (this.program)\n\t\t\t\tthis.program.dispose();\n\t\t}\n\n\t\tthis.program = null;\n\t}\n}\n\nexport = ProgramData;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nimport IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport IRenderable\t\t\t\t\t= require(\"awayjs-display/lib/pool/IRenderable\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexData\");\nimport IndexDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexDataPool\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/VertexData\");\nimport VertexDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/VertexDataPool\");\n\n/**\n * @class RenderableListItem\n */\nclass RenderableBase implements IRenderable\n{\n\tprivate _onIndicesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\tprivate _onVerticesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\n\tprivate _subGeometry:SubGeometryBase;\n\tprivate _geometryDirty:boolean = true;\n\tprivate _indexData:IndexData;\n\tprivate _indexDataDirty:boolean = true;\n\tprivate _vertexData:Object = new Object();\n\tpublic _pVertexDataDirty:Object = new Object();\n\tprivate _vertexOffset:Object = new Object();\n\n\tprivate _level:number;\n\tprivate _indexOffset:number;\n\tprivate _overflow:RenderableBase;\n\tprivate _numTriangles:number;\n\tprivate _concatenateArrays:boolean;\n\n\n\tpublic JOINT_INDEX_FORMAT:string;\n\tpublic JOINT_WEIGHT_FORMAT:string;\n\n\t/**\n\t *\n\t */\n\tpublic _pool:RenderablePool;\n\n\t/**\n\t *\n\t */\n\tpublic get overflow():RenderableBase\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\treturn this._overflow;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get numTriangles():number\n\t{\n\t\treturn this._numTriangles;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic next:RenderableBase;\n\n\t/**\n\t *\n\t */\n\tpublic materialId:number;\n\n\t/**\n\t *\n\t */\n\tpublic renderOrderId:number;\n\n\t/**\n\t *\n\t */\n\tpublic zIndex:number;\n\n\t/**\n\t *\n\t */\n\tpublic cascaded:boolean;\n\n\t/**\n\t *\n\t */\n\tpublic renderSceneTransform:Matrix3D;\n\n\t/**\n\t *\n\t */\n\tpublic sourceEntity:IEntity;\n\n\t/**\n\t *\n\t */\n\tpublic materialOwner:IMaterialOwner;\n\n\t/**\n\t *\n\t */\n\tpublic material:MaterialBase;\n\n\t/**\n\t *\n\t */\n\tpublic getIndexData():IndexData\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\treturn this._indexData;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic getVertexData(dataType:string):VertexData\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\tif (this._pVertexDataDirty[dataType])\n\t\t\tthis._updateVertexData(dataType);\n\n\t\treturn this._vertexData[this._concatenateArrays? TriangleSubGeometry.VERTEX_DATA : dataType]\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic getVertexOffset(dataType:string):number\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\tif (this._pVertexDataDirty[dataType])\n\t\t\tthis._updateVertexData(dataType);\n\n\t\treturn this._vertexOffset[dataType];\n\t}\n\n\t/**\n\t *\n\t * @param sourceEntity\n\t * @param materialOwner\n\t * @param subGeometry\n\t * @param animationSubGeometry\n\t */\n\tconstructor(pool:RenderablePool, sourceEntity:IEntity, materialOwner:IMaterialOwner, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tthis._onIndicesUpdatedDelegate = (event:SubGeometryEvent) => this._onIndicesUpdated(event);\n\t\tthis._onVerticesUpdatedDelegate = (event:SubGeometryEvent) => this._onVerticesUpdated(event);\n\n\t\t//store a reference to the pool for later disposal\n\t\tthis._pool = pool;\n\n\t\t//reference to level of overflow\n\t\tthis._level = level;\n\n\t\t//reference to the offset on indices (if this is an overflow renderable)\n\t\tthis._indexOffset = indexOffset;\n\n\t\tthis.sourceEntity = sourceEntity;\n\t\tthis.materialOwner = materialOwner;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.materialOwner);\n\n\t\tthis._indexData.dispose();\n\t\tthis._indexData = null;\n\n\t\tfor (var dataType in this._vertexData) {\n\t\t\t( this._vertexData[dataType]).dispose();\n\t\t\tthis._vertexData[dataType] = null;\n\t\t}\n\n\t\tif (this._overflow) {\n\t\t\tthis._overflow.dispose();\n\t\t\tthis._overflow = null;\n\t\t}\n\t}\n\n\tpublic invalidateGeometry()\n\t{\n\t\tthis._geometryDirty = true;\n\n\t\t//invalidate indices\n\t\tif (this._level == 0)\n\t\t\tthis._indexDataDirty = true;\n\n\t\tif (this._overflow)\n\t\t\tthis._overflow.invalidateGeometry();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateIndexData()\n\t{\n\t\tthis._indexDataDirty = true;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param dataType\n\t */\n\tpublic invalidateVertexData(dataType:string)\n\t{\n\t\tthis._pVertexDataDirty[dataType] = true;\n\t}\n\n\tpublic _pGetSubGeometry():SubGeometryBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param subGeometry\n\t * @param offset\n\t * @internal\n\t */\n\tpublic _iFillIndexData(indexOffset:number)\n\t{\n\t\tif (this._geometryDirty)\n\t\t\tthis._updateGeometry();\n\n\t\tthis._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset);\n\n\t\tthis._numTriangles = this._indexData.data.length/3;\n\n\t\tindexOffset = this._indexData.offset;\n\n\t\t//check if there is more to split\n\t\tif (indexOffset < this._subGeometry.indices.length) {\n\t\t\tif (!this._overflow)\n\t\t\t\tthis._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1);\n\n\t\t\tthis._overflow._iFillIndexData(indexOffset);\n\t\t} else if (this._overflow) {\n\t\t\tthis._overflow.dispose();\n\t\t\tthis._overflow = null;\n\t\t}\n\t}\n\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @private\n\t */\n\tprivate _updateGeometry()\n\t{\n\t\tif (this._subGeometry) {\n\t\t\tif (this._level == 0)\n\t\t\t\tthis._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate);\n\t\t\tthis._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t\t}\n\n\t\tthis._subGeometry = this._pGetSubGeometry();\n\n\t\tthis._concatenateArrays = this._subGeometry.concatenateArrays;\n\n\t\tif (this._subGeometry) {\n\t\t\tif (this._level == 0)\n\t\t\t\tthis._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate);\n\t\t\tthis._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t\t}\n\n\t\t//dispose\n//\t\t\tif (this._indexData) {\n//\t\t\t\tthis._indexData.dispose(); //TODO where is a good place to dispose?\n//\t\t\t\tthis._indexData = null;\n//\t\t\t}\n\n//\t\t\tfor (var dataType in this._vertexData) {\n//\t\t\t\t( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose?\n//\t\t\t\tthis._vertexData[dataType] = null;\n//\t\t\t}\n\n\t\tthis._geometryDirty = false;\n\n\t\t//specific vertex data types have to be invalidated in the specific renderable\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @private\n\t */\n\tprivate _updateIndexData()\n\t{\n\t\tthis._iFillIndexData(this._indexOffset);\n\n\t\tthis._indexDataDirty = false;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param dataType\n\t * @private\n\t */\n\tprivate _updateVertexData(dataType:string)\n\t{\n\t\tthis._vertexOffset[dataType] = this._subGeometry.getOffset(dataType);\n\n\t\tif (this._subGeometry.concatenateArrays)\n\t\t\tdataType = SubGeometryBase.VERTEX_DATA;\n\n\t\tthis._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType);\n\n\t\tthis._pVertexDataDirty[dataType] = false;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onIndicesUpdated(event:SubGeometryEvent)\n\t{\n\t\tthis.invalidateIndexData();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onVerticesUpdated(event:SubGeometryEvent)\n\t{\n\t\tthis._concatenateArrays = ( event.target).concatenateArrays;\n\n\t\tthis.invalidateVertexData(event.dataType);\n\t}\n}\n\nexport = RenderableBase;", - "import TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport Skybox\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Skybox\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\n\n/**\n * @class away.pool.SkyboxRenderable\n */\nclass SkyboxRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"skybox\";\n\n\t/**\n\t *\n\t */\n\tprivate static _geometry:TriangleSubGeometry;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param skybox\n\t */\n\tconstructor(pool:RenderablePool, skybox:Skybox)\n\t{\n\t\tsuper(pool, skybox, skybox);\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {away.base.TriangleSubGeometry}\n\t * @private\n\t */\n\tpublic _pGetSubGeometry():TriangleSubGeometry\n\t{\n\t\tvar geometry:TriangleSubGeometry = SkyboxRenderable._geometry;\n\n\t\tif (!geometry) {\n\t\t\tgeometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true);\n\t\t\tgeometry.autoDeriveNormals = false;\n\t\t\tgeometry.autoDeriveTangents = false;\n\t\t\tgeometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2));\n\t\t\tgeometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1));\n\t\t}\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\n\t\treturn geometry;\n\t}\n}\n\nexport = SkyboxRenderable;", - "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport TextureData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/TextureData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\n\n/**\n * @class away.pool.TextureDataPool\n */\nclass TextureDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(textureProxy:TextureProxyBase):TextureData\n\t{\n\t\treturn (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy))))\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(textureProxy:TextureProxyBase)\n\t{\n\t\ttextureProxy._iRemoveTextureData(this._pool[textureProxy.id]);\n\n\t\tthis._pool[textureProxy.id] = null;\n\t}\n}\n\nexport = TextureDataPool;", - "import ITextureData\t\t\t\t\t= require(\"awayjs-core/lib/pool/ITextureData\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport TextureDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/TextureDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITextureBase\");\n\n/**\n *\n * @class away.pool.TextureDataBase\n */\nclass TextureData implements ITextureData\n{\n\tprivate _pool:TextureDataPool;\n\n\tpublic context:ContextGLBase;\n\n\tpublic texture:ITextureBase;\n\n\tpublic textureProxy:TextureProxyBase;\n\n\tpublic invalid:boolean;\n\n\tconstructor(pool:TextureDataPool, context:ContextGLBase, textureProxy:TextureProxyBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis.textureProxy = textureProxy;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.textureProxy);\n\n\t\tthis.texture.dispose();\n\t\tthis.texture = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidate()\n\t{\n\t\tthis.invalid = true;\n\t}\n}\n\nexport = TextureData;", - "import IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport TriangleSubMesh\t\t\t\t= require(\"awayjs-display/lib/base/TriangleSubMesh\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat\");\n\n/**\n * @class away.pool.TriangleSubMeshRenderable\n */\nclass TriangleSubMeshRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"trianglesubmesh\";\n\n\t/**\n\t *\n\t */\n\tpublic subMesh:TriangleSubMesh;\n\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param subMesh\n\t * @param level\n\t * @param indexOffset\n\t */\n\tconstructor(pool:RenderablePool, subMesh:TriangleSubMesh, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tsuper(pool, subMesh.parentMesh, subMesh, level, indexOffset);\n\n\t\tthis.subMesh = subMesh;\n\t}\n\n\t/**\n\t *\n\t * @returns {SubGeometryBase}\n\t * @protected\n\t */\n\tpublic _pGetSubGeometry():TriangleSubGeometry\n\t{\n\t\tvar subGeometry:TriangleSubGeometry;\n\n\t\tif (this.subMesh.animator)\n\t\t\tsubGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry);\n\t\telse\n\t\t\tsubGeometry = this.subMesh.subGeometry;\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\n\t\tif (subGeometry.vertexNormals)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true;\n\n\t\tif (subGeometry.vertexTangents)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true;\n\n\t\tif (subGeometry.uvs)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true;\n\n\t\tif (subGeometry.secondaryUVs)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true;\n\n\t\tif (subGeometry.jointIndices)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true;\n\n\t\tif (subGeometry.jointWeights)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true;\n\n\t\tswitch(subGeometry.jointsPerVertex) {\n\t\t\tcase 1:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\n\t\treturn subGeometry;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param materialOwner\n\t * @param level\n\t * @param indexOffset\n\t * @returns {away.pool.TriangleSubMeshRenderable}\n\t * @protected\n\t */\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\treturn new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset);\n\t}\n}\n\nexport = TriangleSubMeshRenderable;", - "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexData\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/VertexData\");\n\n/**\n *\n */\nclass VertexDataPool\n{\n\tprivate static _pool:Object = new Object();\n\n\tconstructor()\n\t{\n\t}\n\n\tpublic static getItem(subGeometry:SubGeometryBase, indexData:IndexData, dataType:string):VertexData\n\t{\n\t\tif (subGeometry.concatenateArrays)\n\t\t\tdataType = SubGeometryBase.VERTEX_DATA;\n\n\t\tvar subGeometryDictionary:Object = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object()));\n\t\tvar subGeometryData:Array = > (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array()));\n\n\t\tvar vertexData:VertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType));\n\t\tvertexData.updateData(indexData.originalIndices, indexData.indexMappings);\n\n\t\treturn vertexData;\n\t}\n\n\tpublic static disposeItem(subGeometry:SubGeometryBase, level:number, dataType:string)\n\t{\n\t\tvar subGeometryDictionary:Object = VertexDataPool._pool[subGeometry.id];\n\t\tvar subGeometryData:Array = > subGeometryDictionary[dataType];\n\n\t\tsubGeometryData[level].dispose();\n\t\tsubGeometryData[level] = null;\n\t}\n\n\tpublic disposeData(subGeometry:SubGeometryBase)\n\t{\n\t\tvar subGeometryDictionary:Object = VertexDataPool._pool[subGeometry.id];\n\n\t\tfor (var key in subGeometryDictionary) {\n\t\t\tvar subGeometryData:Array = > subGeometryDictionary[key];\n\n\t\t\tvar len:number = subGeometryData.length;\n\t\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\t\tsubGeometryData[i].dispose();\n\t\t\t\tsubGeometryData[i] = null;\n\t\t\t}\n\t\t}\n\n\t\tVertexDataPool._pool[subGeometry.id] = null;\n\t}\n}\n\nexport = VertexDataPool;", - "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\n\n/**\n *\n */\nclass VertexData\n{\n\tprivate _onVerticesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\tprivate _subGeometry:SubGeometryBase;\n\tprivate _dataType:string;\n\tprivate _dataDirty = true;\n\n\tpublic invalid:Array = new Array(8);\n\n\tpublic buffers:Array = new Array(8);\n\n\tpublic contexts:Array = new Array(8);\n\n\tpublic data:Array;\n\n\tpublic dataPerVertex:number;\n\n\tconstructor(subGeometry:SubGeometryBase, dataType:string)\n\t{\n\t\tthis._subGeometry = subGeometry;\n\t\tthis._dataType = dataType;\n\n\t\tthis._onVerticesUpdatedDelegate = (event:SubGeometryEvent) => this._onVerticesUpdated(event);\n\t\tthis._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t}\n\n\tpublic updateData(originalIndices:Array = null, indexMappings:Array = null)\n\t{\n\t\tif (this._dataDirty) {\n\t\t\tthis._dataDirty = false;\n\n\t\t\tthis.dataPerVertex = this._subGeometry.getStride(this._dataType);\n\n\t\t\tvar vertices:Array = this._subGeometry[this._dataType];\n\n\t\t\tif (indexMappings == null) {\n\t\t\t\tthis.setData(vertices);\n\t\t\t} else {\n\t\t\t\tvar splitVerts:Array = new Array(originalIndices.length*this.dataPerVertex);\n\t\t\t\tvar originalIndex:number;\n\t\t\t\tvar splitIndex:number;\n\t\t\t\tvar i:number = 0;\n\t\t\t\tvar j:number = 0;\n\t\t\t\twhile(i < originalIndices.length) {\n\t\t\t\t\toriginalIndex = originalIndices[i];\n\n\t\t\t\t\tsplitIndex = indexMappings[originalIndex]*this.dataPerVertex;\n\t\t\t\t\toriginalIndex *= this.dataPerVertex;\n\n\t\t\t\t\tfor (j = 0; j < this.dataPerVertex; j++)\n\t\t\t\t\t\tsplitVerts[splitIndex + j] = vertices[originalIndex + j];\n\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tthis.setData(splitVerts);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.contexts[i]) {\n\t\t\t\tthis.contexts[i].disposeVertexData(this);\n\t\t\t\tthis.contexts[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate disposeBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.buffers[i]) {\n\t\t\t\tthis.buffers[i].dispose();\n\t\t\t\tthis.buffers[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate invalidateBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i)\n\t\t\tthis.invalid[i] = true;\n\t}\n\n\t/**\n\t *\n\t * @param data\n\t * @param dataPerVertex\n\t * @private\n\t */\n\tprivate setData(data:Array)\n\t{\n\t\tif (this.data && this.data.length != data.length)\n\t\t\tthis.disposeBuffers();\n\t\telse\n\t\t\tthis.invalidateBuffers();\n\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onVerticesUpdated(event:SubGeometryEvent)\n\t{\n\t\tvar dataType:string = this._subGeometry.concatenateArrays? SubGeometryBase.VERTEX_DATA : event.dataType;\n\n\t\tif (dataType == this._dataType)\n\t\t\tthis._dataDirty = true;\n\t}\n}\n\nexport = VertexData;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IRenderer\t\t\t\t\t= require(\"awayjs-display/lib/render/IRenderer\");\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ICollector\t\t\t\t\t= require(\"awayjs-display/lib/traverse/ICollector\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\nimport IMaterialPass\t\t\t\t= require(\"awayjs-display/lib/materials/passes/IMaterialPass\");\nimport ShadowMapperBase\t\t\t\t= require(\"awayjs-display/lib/materials/shadowmappers/ShadowMapperBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport SkyboxRenderable\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/SkyboxRenderable\");\nimport DepthRenderer\t\t\t\t= require(\"awayjs-stagegl/lib/core/render/DepthRenderer\");\nimport Filter3DRenderer\t\t\t\t= require(\"awayjs-stagegl/lib/core/render/Filter3DRenderer\");\nimport RendererBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/render/RendererBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport Filter3DBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/filters/Filter3DBase\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\nimport StageManager\t\t\t\t\t= require(\"awayjs-stagegl/lib/managers/StageManager\");\nimport DepthMapPass\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/DepthMapPass\");\nimport DistanceMapPass\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/DistanceMapPass\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n/**\n * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the\n * materials assigned to them.\n *\n * @class away.render.DefaultRenderer\n */\nclass DefaultRenderer extends RendererBase implements IRenderer\n{\n\tpublic _pRequireDepthRender:boolean;\n\tprivate _skyboxRenderablePool:RenderablePool;\n\n//\t\tprivate _activeMaterial:MaterialBase;\n\tprivate _pDistanceRenderer:DepthRenderer;\n\tprivate _pDepthRenderer:DepthRenderer;\n\tprivate _skyboxProjection:Matrix3D = new Matrix3D();\n\tpublic _pFilter3DRenderer:Filter3DRenderer;\n\n\tpublic _pDepthRender:TextureProxyBase;\n\n\tprivate _antiAlias:number;\n\n\tpublic get antiAlias():number\n\t{\n\t\treturn this._antiAlias;\n\t}\n\n\tpublic set antiAlias(value:number)\n\t{\n\t\tif (this._antiAlias == value)\n\t\t\treturn;\n\n\t\tthis._antiAlias = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get depthPrepass():boolean\n\t{\n\t\treturn this._depthPrepass;\n\t}\n\n\tpublic set depthPrepass(value:boolean)\n\t{\n\t\tthis._depthPrepass = value;\n\t}\n\n\t/**\n\t *\n\t * @returns {*}\n\t */\n\tpublic get filters3d():Array\n\t{\n\t\treturn this._pFilter3DRenderer? this._pFilter3DRenderer.filters : null;\n\t}\n\tpublic set filters3d(value:Array)\n\t{\n\t\tif (value && value.length == 0)\n\t\t\tvalue = null;\n\n\t\tif (this._pFilter3DRenderer && !value) {\n\t\t\tthis._pFilter3DRenderer.dispose();\n\t\t\tthis._pFilter3DRenderer = null;\n\t\t} else if (!this._pFilter3DRenderer && value) {\n\t\t\tthis._pFilter3DRenderer = new Filter3DRenderer(this._pStage);\n\t\t\tthis._pFilter3DRenderer.filters = value;\n\t\t}\n\n\t\tif (this._pFilter3DRenderer) {\n\t\t\tthis._pFilter3DRenderer.filters = value;\n\t\t\tthis._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender;\n\t\t} else {\n\t\t\tthis._pRequireDepthRender = false;\n\n\t\t\tif (this._pDepthRender) {\n\t\t\t\tthis._pDepthRender.dispose();\n\t\t\t\tthis._pDepthRender = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Creates a new DefaultRenderer object.\n\t *\n\t * @param antiAlias The amount of anti-aliasing to use.\n\t * @param renderMode The render mode to use.\n\t */\n\tconstructor(forceSoftware:boolean = false, profile:string = \"baseline\", mode = \"auto\")\n\t{\n\t\tsuper();\n\n\t\tthis._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable);\n\n\t\tthis._pDepthRenderer = new DepthRenderer(new DepthMapPass());\n\t\tthis._pDistanceRenderer = new DepthRenderer(new DistanceMapPass());\n\n\t\tif (this._pStage == null)\n\t\t\tthis.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode);\n\n\t\tthis._pRttBufferManager = RTTBufferManager.getInstance(this._pStage);\n\n\t\tif (this._width == 0)\n\t\t\tthis.width = window.innerWidth;\n\t\telse\n\t\t\tthis._pRttBufferManager.viewWidth = this._width;\n\n\t\tif (this._height == 0)\n\t\t\tthis.height = window.innerHeight;\n\t\telse\n\t\t\tthis._pRttBufferManager.viewHeight = this._height;\n\t}\n\n\tpublic render(entityCollector:ICollector)\n\t{\n\t\tsuper.render(entityCollector);\n\n\t\tif (!this._pStage.recoverFromDisposal()) {//if context has Disposed by the OS,don't render at this frame\n\t\t\tthis._pBackBufferInvalid = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._pBackBufferInvalid)// reset or update render settings\n\t\t\tthis.pUpdateBackBuffer();\n\n\t\tif (this._shareContext && this._pContext)\n\t\t\tthis._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH);\n\n\t\tif (this._pFilter3DRenderer) {\n\t\t\tthis.textureRatioX = this._pRttBufferManager.textureRatioX;\n\t\t\tthis.textureRatioY = this._pRttBufferManager.textureRatioY;\n\t\t} else {\n\t\t\tthis.textureRatioX = 1;\n\t\t\tthis.textureRatioY = 1;\n\t\t}\n\n\t\tif (this._pRequireDepthRender)\n\t\t\tthis.pRenderSceneDepthToTexture( entityCollector);\n\n\t\tif (this._depthPrepass)\n\t\t\tthis.pRenderDepthPrepass( entityCollector);\n\n\t\tif (this._pFilter3DRenderer && this._pContext) { //TODO\n\t\t\t//this._iRender(entityCollector, this._pFilter3DRenderer.getMainInputTexture(this._pStage), this._pRttBufferManager.renderToTextureRect);\n\t\t\t//this._pFilter3DRenderer.render(this._pStage, entityCollector.camera, this._pDepthRender);\n\n\t\t} else {\n\n\t\t\tif (this._shareContext)\n\t\t\t\tthis._iRender(entityCollector, null, this._pScissorRect);\n\t\t\telse\n\t\t\t\tthis._iRender(entityCollector);\n\t\t}\n\n\t\tsuper.render(entityCollector);\n\n\t\tif (!this._shareContext && this._pContext)\n\t\t\tthis._pContext.present();\n\n\t\t// register that a view has been rendered\n\t\tthis._pStage.bufferClear = false;\n\t}\n\n\tpublic pExecuteRender(entityCollector:EntityCollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\tthis.updateLights(entityCollector);\n\n\t\t// otherwise RTT will interfere with other RTTs\n\t\tif (target) {\n\t\t\tthis.pCollectRenderables(entityCollector);\n\n\t\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\t\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\t\t}\n\n\t\tsuper.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector);\n\t}\n\n\tprivate updateLights(entityCollector:EntityCollector)\n\t{\n\t\tvar dirLights:Array = entityCollector.directionalLights;\n\t\tvar pointLights:Array = entityCollector.pointLights;\n\t\tvar len:number, i:number;\n\t\tvar light:LightBase;\n\t\tvar shadowMapper:ShadowMapperBase;\n\n\t\tlen = dirLights.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tlight = dirLights[i];\n\n\t\t\tshadowMapper = light.shadowMapper;\n\n\t\t\tif (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid ))\n\t\t\t\tshadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer);\n\t\t}\n\n\t\tlen = pointLights.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tlight = pointLights[i];\n\n\t\t\tshadowMapper = light.shadowMapper;\n\n\t\t\tif (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid))\n\t\t\t\tshadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic pDraw(entityCollector:EntityCollector, target:TextureProxyBase)\n\t{\n\t\tif (!target)\n\t\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\n\t\tif (entityCollector.skyBox) {\n\t\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS);\n\n\t\t\tthis.drawSkybox(entityCollector);\n\t\t}\n\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL);\n\n\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\t}\n\n\t/**\n\t * Draw the skybox if present.\n\t *\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawSkybox(entityCollector:EntityCollector)\n\t{\n\t\tvar skyBox:SkyboxRenderable = this._skyboxRenderablePool.getItem(entityCollector.skyBox);\n\n\t\tvar material:MaterialBase = entityCollector.skyBox.material;\n\n\t\tvar camera:Camera = entityCollector.camera;\n\n\t\tthis.updateSkyboxProjection(camera);\n\n\t\tvar activePass:MaterialPassData = ( this._pStage.context).getMaterial(material, this._pStage.profile).getMaterialPass( material._iScreenPasses[0], this._pStage.profile);\n\n\t\tmaterial._iActivatePass(activePass, this._pStage, camera);\n\t\tmaterial._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection);\n\t\tmaterial._iDeactivatePass(activePass, this._pStage);\n\t}\n\n\tprivate updateSkyboxProjection(camera:Camera)\n\t{\n\t\tvar near:Vector3D = new Vector3D();\n\n\t\tthis._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix);\n\t\tthis._skyboxProjection.copyRowTo(2, near);\n\n\t\tvar camPos:Vector3D = camera.scenePosition;\n\n\t\tvar cx:number = near.x;\n\t\tvar cy:number = near.y;\n\t\tvar cz:number = near.z;\n\t\tvar cw:number = -(near.x*camPos.x + near.y*camPos.y + near.z*camPos.z + Math.sqrt(cx*cx + cy*cy + cz*cz));\n\n\t\tvar signX:number = cx >= 0? 1 : -1;\n\t\tvar signY:number = cy >= 0? 1 : -1;\n\n\t\tvar p:Vector3D = new Vector3D(signX, signY, 1, 1);\n\n\t\tvar inverse:Matrix3D = this._skyboxProjection.clone();\n\t\tinverse.invert();\n\n\t\tvar q:Vector3D = inverse.transformVector(p);\n\n\t\tthis._skyboxProjection.copyRowTo(3, p);\n\n\t\tvar a:number = (q.x*p.x + q.y*p.y + q.z*p.z + q.w*p.w)/(cx*q.x + cy*q.y + cz*q.z + cw*q.w);\n\n\t\tthis._skyboxProjection.copyRowFrom(2, new Vector3D(cx*a, cy*a, cz*a, cw*a));\n\t}\n\n\t/**\n\t * Draw a list of renderables.\n\t *\n\t * @param renderables The renderables to draw.\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawRenderables(renderable:RenderableBase, entityCollector:ICollector)\n\t{\n\t\tvar i:number;\n\t\tvar len:number;\n\t\tvar passes:Array;\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar camera:Camera = entityCollector.camera;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\t//iterate through each screen pass\n\t\t\tpasses = renderable.material._iScreenPasses;\n\t\t\tlen = renderable.material._iNumScreenPasses();\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\trenderable2 = renderable;\n\n\t\t\t\tactivePass = activeMaterial.getMaterialPass( passes[i], this._pStage.profile);\n\n\t\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\t\tdo {\n\t\t\t\t\trenderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\n\t\t\t\tactiveMaterial.material._iDeactivatePass(activePass, this._pStage);\n\t\t\t}\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (!this._shareContext)\n\t\t\tthis._pStage.dispose();\n\n\t\tthis._pDepthRenderer.dispose();\n\t\tthis._pDistanceRenderer.dispose();\n\t\tthis._pDepthRenderer = null;\n\t\tthis._pDistanceRenderer = null;\n\n\t\tthis._pDepthRender = null;\n\n\t\tsuper.dispose();\n\t}\n\n\n\t/**\n\t *\n\t */\n\tpublic pRenderDepthPrepass(entityCollector:EntityCollector)\n\t{\n\t\tthis._pDepthRenderer.disableColor = true;\n\n\t\tif (this._pFilter3DRenderer) { //TODO\n//\t\t\t\tthis._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX;\n//\t\t\t\tthis._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY;\n//\t\t\t\tthis._pDepthRenderer._iRender(entityCollector, this._pFilter3DRenderer.getMainInputTexture(this._pStage), this._pRttBufferManager.renderToTextureRect);\n\t\t} else {\n\t\t\tthis._pDepthRenderer.textureRatioX = 1;\n\t\t\tthis._pDepthRenderer.textureRatioY = 1;\n\t\t\tthis._pDepthRenderer._iRender(entityCollector);\n\t\t}\n\n\t\tthis._pDepthRenderer.disableColor = false;\n\t}\n\n\n\t/**\n\t *\n\t */\n\tpublic pRenderSceneDepthToTexture(entityCollector:EntityCollector)\n\t{\n\t\tif (this._pDepthTextureInvalid || !this._pDepthRender)\n\t\t\tthis.initDepthTexture( this._pStage.context);\n\n\t\tthis._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX;\n\t\tthis._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY;\n\t\tthis._pDepthRenderer._iRender(entityCollector, this._pDepthRender);\n\t}\n\n\n\t/**\n\t * Updates the backbuffer dimensions.\n\t */\n\tpublic pUpdateBackBuffer()\n\t{\n\t\t// No reason trying to configure back buffer if there is no context available.\n\t\t// Doing this anyway (and relying on _stage to cache width/height for\n\t\t// context does get available) means usesSoftwareRendering won't be reliable.\n\t\tif (this._pStage.context && !this._shareContext) {\n\t\t\tif (this._width && this._height) {\n\t\t\t\tthis._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true);\n\t\t\t\tthis._pBackBufferInvalid = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic iSetStage(value:Stage)\n\t{\n\t\tsuper.iSetStage(value);\n\n\t\tthis._pDistanceRenderer.iSetStage(value);\n\t\tthis._pDepthRenderer.iSetStage(value);\n\t}\n\n\t/**\n\t *\n\t */\n\tprivate initDepthTexture(context:IContextStageGL):void\n\t{\n\t\tthis._pDepthTextureInvalid = false;\n\n\t\tif (this._pDepthRender)\n\t\t\tthis._pDepthRender.dispose();\n\n\t\tthis._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight);\n\t}\n}\n\nexport = DefaultRenderer;", - "import Plane3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Plane3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ShadowCasterCollector\t\t= require(\"awayjs-display/lib/traverse/ShadowCasterCollector\");\n\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport RendererBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/render/RendererBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n\n/**\n * The DepthRenderer class renders 32-bit depth information encoded as RGBA\n *\n * @class away.render.DepthRenderer\n */\nclass DepthRenderer extends RendererBase\n{\n\tprivate _pass:MaterialPassBase;\n\tprivate _renderBlended:boolean;\n\tprivate _disableColor:boolean;\n\n\t/**\n\t * Creates a new DepthRenderer object.\n\t * @param renderBlended Indicates whether semi-transparent objects should be rendered.\n\t * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based\n\t */\n\tconstructor(pass:MaterialPassBase, renderBlended:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._pass = pass;\n\n\t\tthis._renderBlended = renderBlended;\n\t\tthis._iBackgroundR = 1;\n\t\tthis._iBackgroundG = 1;\n\t\tthis._iBackgroundB = 1;\n\n\t}\n\n\tpublic get disableColor():boolean\n\t{\n\t\treturn this._disableColor;\n\t}\n\n\tpublic set disableColor(value:boolean)\n\t{\n\t\tthis._disableColor = value;\n\t}\n\n\tpublic _iRenderCascades(entityCollector:ShadowCasterCollector, target:TextureProxyBase, numCascades:number, scissorRects:Array, cameras:Array)\n\t{\n\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setRenderTarget(target, true, 0);\n\t\tthis._pContext.clear(1, 1, 1, 1, 1, 0);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS);\n\n\t\tvar head:RenderableBase = this._pOpaqueRenderableHead;\n\n\t\tvar first:boolean = true;\n\n\t\tfor (var i:number = numCascades - 1; i >= 0; --i) {\n\t\t\tthis._pStage.scissorRect = scissorRects[i];\n\t\t\tthis.drawCascadeRenderables(head, cameras[i], first? null : cameras[i].frustumPlanes);\n\t\t\tfirst = false;\n\t\t}\n\n\t\t//line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED!\n\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL);\n\n\t\tthis._pStage.scissorRect = null;\n\n\t}\n\n\tprivate drawCascadeRenderables(renderable:RenderableBase, camera:Camera, cullPlanes:Array)\n\t{\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\trenderable2 = renderable;\n\n\t\t\tactivePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile);\n\n\t\t\t//TODO: generalise this test\n\t\t\tif (activePass.key == \"\")\n\t\t\t\tthis._pContext.calcAnimationCode(renderable.material, activePass);\n\n\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\tdo {\n\t\t\t\t// if completely in front, it will fall in a different cascade\n\t\t\t\t// do not use near and far planes\n\t\t\t\tif (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) {\n\t\t\t\t\trenderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\t\t\t\t} else {\n\t\t\t\t\trenderable2.cascaded = true;\n\t\t\t\t}\n\n\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t} while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded);\n\n\t\t\trenderable.material._iDeactivatePass(activePass, this._pStage);\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic pDraw(entityCollector:EntityCollector, target:TextureProxyBase)\n\t{\n\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS);\n\n\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\n\t\tif (this._disableColor)\n\t\t\tthis._pContext.setColorMask(false, false, false, false);\n\n\t\tif (this._renderBlended)\n\t\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\n\t\tif (this._disableColor)\n\t\t\tthis._pContext.setColorMask(true, true, true, true);\n\t}\n\n\t/**\n\t * Draw a list of renderables.\n\t * @param renderables The renderables to draw.\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawRenderables(renderable:RenderableBase, entityCollector:EntityCollector)\n\t{\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar camera:Camera = entityCollector.camera;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\t// otherwise this would result in depth rendered anyway because fragment shader kil is ignored\n\t\t\tif (this._disableColor && renderable.material.alphaThreshold != 0) {\n\t\t\t\trenderable2 = renderable;\n\t\t\t\t// fast forward\n\t\t\t\tdo {\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\t\t\t} else {\n\t\t\t\trenderable2 = renderable;\n\n\t\t\t\tactivePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile);\n\n\t\t\t\t//TODO: generalise this test\n\t\t\t\tif (activePass.key == \"\")\n\t\t\t\t\tthis._pContext.calcAnimationCode(renderable.material, activePass);\n\n\t\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\t\tdo {\n\t\t\t\t\trenderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\n\t\t\t\trenderable.material._iDeactivatePass(activePass, this._pStage);\n\t\t\t}\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n}\n\nexport = DepthRenderer;", - "import Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\nimport Filter3DBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/filters/Filter3DBase\");\nimport Filter3DTaskBase\t\t\t\t= require(\"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\n\n/**\n * @class away.render.Filter3DRenderer\n */\nclass Filter3DRenderer\n{\n\tprivate _filters:Array;\n\tprivate _tasks:Array;\n\tprivate _filterTasksInvalid:boolean;\n\tprivate _mainInputTexture:ITexture;\n\tprivate _requireDepthRender:boolean;\n\tprivate _rttManager:RTTBufferManager;\n\tprivate _stage:Stage;\n\tprivate _filterSizesInvalid:boolean = true;\n\tprivate _onRTTResizeDelegate:(event:Event) => void;\n\n\tconstructor(stage:Stage)\n\t{\n\t\tthis._onRTTResizeDelegate = (event:Event) => this.onRTTResize(event);\n\n\t\tthis._stage = stage;\n\t\tthis._rttManager = RTTBufferManager.getInstance(stage);\n\t\tthis._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate);\n\n\t}\n\n\tprivate onRTTResize(event:Event)\n\t{\n\t\tthis._filterSizesInvalid = true;\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\tif (this._filterTasksInvalid) {\n\n\t\t\tthis.updateFilterTasks(stage);\n\n\t\t}\n\n\t\treturn this._mainInputTexture;\n\t}\n\n\tpublic get filters():Filter3DBase[]\n\t{\n\t\treturn this._filters;\n\t}\n\n\tpublic set filters(value:Filter3DBase[])\n\t{\n\t\tthis._filters = value;\n\n\t\tthis._filterTasksInvalid = true;\n\n\t\tthis._requireDepthRender = false;\n\n\t\tif (!this._filters) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tfor (var i:number = 0; i < this._filters.length; ++i) {\n\n\t\t\t// TODO: check logic:\n\t\t\t// this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender )\n\n\t\t\tvar s:any = this._filters[i];\n\t\t\tvar b:boolean = ( s.requireDepthRender == null )? false : s.requireDepthRender;\n\n\t\t\tthis._requireDepthRender = this._requireDepthRender || b;\n\n\t\t}\n\n\t\tthis._filterSizesInvalid = true;\n\n\t}\n\n\tprivate updateFilterTasks(stage:Stage)\n\t{\n\t\tvar len:number;\n\n\t\tif (this._filterSizesInvalid) {\n\n\t\t\tthis.updateFilterSizes();\n\n\t\t}\n\n\t\tif (!this._filters) {\n\t\t\tthis._tasks = null;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tasks = new Array();\n\n\t\tlen = this._filters.length - 1;\n\n\t\tvar filter:Filter3DBase;\n\n\t\tfor (var i:number = 0; i <= len; ++i) {\n\n\t\t\t// make sure all internal tasks are linked together\n\t\t\tfilter = this._filters[i];\n\n\t\t\t// TODO: check logic\n\t\t\t// filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage);\n\n\t\t\tfilter.setRenderTargets(i == len? null : this._filters[i + 1].getMainInputTexture(stage), stage);\n\n\t\t\tthis._tasks = this._tasks.concat(filter.tasks);\n\n\t\t}\n\n\t\tthis._mainInputTexture = this._filters[0].getMainInputTexture(stage);\n\n\t}\n\n\tpublic render(stage:Stage, camera:Camera, depthTexture:ITexture)\n\t{\n\t\tvar len:number;\n\t\tvar i:number;\n\t\tvar task:Filter3DTaskBase;\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tvar indexBuffer:IIndexBuffer = this._rttManager.indexBuffer;\n\n\t\tvar vertexBuffer:IVertexBuffer = this._rttManager.renderToTextureVertexBuffer;\n\n\t\tif (!this._filters) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._filterSizesInvalid) {\n\t\t\tthis.updateFilterSizes();\n\t\t}\n\n\t\tif (this._filterTasksInvalid) {\n\t\t\tthis.updateFilterTasks(stage);\n\t\t}\n\n\t\tlen = this._filters.length;\n\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._filters[i].update(stage, camera);\n\t\t}\n\n\t\tlen = this._tasks.length;\n\n\t\tif (len > 1) {\n\t\t\tcontext.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t\tcontext.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t}\n\n\t\tfor (i = 0; i < len; ++i) {\n\n\t\t\ttask = this._tasks[i];\n\n\t\t\t//stage.setRenderTarget(task.target); //TODO\n\n\t\t\tif (!task.target) {\n\n\t\t\t\tstage.scissorRect = null;\n\t\t\t\tvertexBuffer = this._rttManager.renderToScreenVertexBuffer;\n\t\t\t\tcontext.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t\t\tcontext.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2);\n\n\t\t\t}\n\n\t\t\tcontext.setTextureAt(0, task.getMainInputTexture(stage));\n\t\t\tcontext.setProgram(task.getProgram(stage));\n\t\t\tcontext.clear(0.0, 0.0, 0.0, 0.0);\n\n\t\t\ttask.activate(stage, camera, depthTexture);\n\n\t\t\tcontext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\t\t\tcontext.drawTriangles(indexBuffer, 0, 2);\n\n\t\t\ttask.deactivate(stage);\n\t\t}\n\n\t\tcontext.setTextureAt(0, null);\n\t\tcontext.setVertexBufferAt(0, null);\n\t\tcontext.setVertexBufferAt(1, null);\n\t}\n\n\tprivate updateFilterSizes()\n\t{\n\t\tfor (var i:number = 0; i < this._filters.length; ++i) {\n\t\t\tthis._filters[i].textureWidth = this._rttManager.textureWidth;\n\t\t\tthis._filters[i].textureHeight = this._rttManager.textureHeight;\n\t\t}\n\n\t\tthis._filterSizesInvalid = true;\n\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate);\n\t\tthis._rttManager = null;\n\t\tthis._stage = null;\n\t}\n}\n\nexport = Filter3DRenderer;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Point\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Point\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport LineSubMesh\t\t\t\t\t= require(\"awayjs-display/lib/base/LineSubMesh\");\nimport TriangleSubMesh\t\t\t\t= require(\"awayjs-display/lib/base/TriangleSubMesh\");\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport EntityListItem\t\t\t\t= require(\"awayjs-display/lib/pool/EntityListItem\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IEntitySorter\t\t\t\t= require(\"awayjs-display/lib/sort/IEntitySorter\");\nimport RenderableMergeSort\t\t\t= require(\"awayjs-display/lib/sort/RenderableMergeSort\");\nimport IRenderer\t\t\t\t\t= require(\"awayjs-display/lib/render/IRenderer\");\nimport Billboard\t\t\t\t\t= require(\"awayjs-display/lib/entities/Billboard\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport Skybox\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Skybox\");\n\nimport RendererEvent\t\t\t\t= require(\"awayjs-display/lib/events/RendererEvent\");\nimport StageEvent\t\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ICollector\t\t\t\t\t= require(\"awayjs-display/lib/traverse/ICollector\");\nimport ShadowCasterCollector\t\t= require(\"awayjs-display/lib/traverse/ShadowCasterCollector\");\n\nimport BillboardRenderable\t\t\t= require(\"awayjs-stagegl/lib/core/pool/BillboardRenderable\");\nimport LineSubMeshRenderable\t\t= require(\"awayjs-stagegl/lib/core/pool/LineSubMeshRenderable\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport TriangleSubMeshRenderable\t= require(\"awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\nimport DefaultMaterialManager\t\t= require(\"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager\");\n\n/**\n * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the\n * contents of a partition\n *\n * @class away.render.RendererBase\n */\nclass RendererBase extends EventDispatcher\n{\n\tprivate _billboardRenderablePool:RenderablePool;\n\tprivate _triangleSubMeshRenderablePool:RenderablePool;\n\tprivate _lineSubMeshRenderablePool:RenderablePool;\n\n\tpublic _pContext:IContextStageGL;\n\tpublic _pStage:Stage;\n\n\tpublic _pCamera:Camera;\n\tpublic _iEntryPoint:Vector3D;\n\tpublic _pCameraForward:Vector3D;\n\n\tpublic _pRttBufferManager:RTTBufferManager;\n\tprivate _viewPort:Rectangle = new Rectangle();\n\tprivate _viewportDirty:boolean;\n\tprivate _scissorDirty:boolean;\n\n\tpublic _pBackBufferInvalid:boolean = true;\n\tpublic _pDepthTextureInvalid:boolean = true;\n\tpublic _depthPrepass:boolean = false;\n\tprivate _backgroundR:number = 0;\n\tprivate _backgroundG:number = 0;\n\tprivate _backgroundB:number = 0;\n\tprivate _backgroundAlpha:number = 1;\n\tpublic _shareContext:boolean = false;\n\n\t// only used by renderers that need to render geometry to textures\n\tpublic _width:number;\n\tpublic _height:number;\n\n\tpublic textureRatioX:number = 1;\n\tpublic textureRatioY:number = 1;\n\n\tprivate _snapshotBitmapData:BitmapData;\n\tprivate _snapshotRequired:boolean;\n\n\tpublic _pRttViewProjectionMatrix:Matrix3D = new Matrix3D();\n\n\tprivate _localPos:Point = new Point();\n\tprivate _globalPos:Point = new Point();\n\tpublic _pScissorRect:Rectangle = new Rectangle();\n\n\tprivate _scissorUpdated:RendererEvent;\n\tprivate _viewPortUpdated:RendererEvent;\n\n\tprivate _onContextUpdateDelegate:Function;\n\tprivate _onViewportUpdatedDelegate;\n\n\tpublic _pNumTriangles:number = 0;\n\n\tpublic _pOpaqueRenderableHead:RenderableBase;\n\tpublic _pBlendedRenderableHead:RenderableBase;\n\n\t/**\n\t *\n\t */\n\tpublic get numTriangles():number\n\t{\n\t\treturn this._pNumTriangles;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic renderableSorter:IEntitySorter;\n\n\n\t/**\n\t * A viewPort rectangle equivalent of the Stage size and position.\n\t */\n\tpublic get viewPort():Rectangle\n\t{\n\t\treturn this._viewPort;\n\t}\n\n\t/**\n\t * A scissor rectangle equivalent of the view size and position.\n\t */\n\tpublic get scissorRect():Rectangle\n\t{\n\t\treturn this._pScissorRect;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get x():number\n\t{\n\t\treturn this._localPos.x;\n\t}\n\n\tpublic set x(value:number)\n\t{\n\t\tif (this.x == value)\n\t\t\treturn;\n\n\t\tthis._globalPos.x = this._localPos.x = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get y():number\n\t{\n\t\treturn this._localPos.y;\n\t}\n\n\tpublic set y(value:number)\n\t{\n\t\tif (this.y == value)\n\t\t\treturn;\n\n\t\tthis._globalPos.y = this._localPos.y = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic set width(value:number)\n\t{\n\t\tif (this._width == value)\n\t\t\treturn;\n\n\t\tthis._width = value;\n\t\tthis._pScissorRect.width = value;\n\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.viewWidth = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t\tthis._pDepthTextureInvalid = true;\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic set height(value:number)\n\t{\n\t\tif (this._height == value)\n\t\t\treturn;\n\n\t\tthis._height = value;\n\t\tthis._pScissorRect.height = value;\n\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.viewHeight = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t\tthis._pDepthTextureInvalid = true;\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\t/**\n\t * Creates a new RendererBase object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis._onViewportUpdatedDelegate = (event:StageEvent) => this.onViewportUpdated(event);\n\n\t\tthis._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable);\n\t\tthis._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable);\n\t\tthis._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable);\n\n\t\tthis._onContextUpdateDelegate = (event:Event) => this.onContextUpdate(event);\n\n\t\t//default sorting algorithm\n\t\tthis.renderableSorter = new RenderableMergeSort();\n\t}\n\n\tpublic _iCreateEntityCollector():ICollector\n\t{\n\t\treturn new EntityCollector();\n\t}\n\n\t/**\n\t * The background color's red component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundR():number\n\t{\n\t\treturn this._backgroundR;\n\t}\n\n\tpublic set _iBackgroundR(value:number)\n\t{\n\t\tif (this._backgroundR == value)\n\t\t\treturn;\n\n\t\tthis._backgroundR = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The background color's green component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundG():number\n\t{\n\t\treturn this._backgroundG;\n\t}\n\n\tpublic set _iBackgroundG(value:number)\n\t{\n\t\tif (this._backgroundG == value)\n\t\t\treturn;\n\n\t\tthis._backgroundG = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The background color's blue component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundB():number\n\t{\n\t\treturn this._backgroundB;\n\t}\n\n\tpublic set _iBackgroundB(value:number)\n\t{\n\t\tif (this._backgroundB == value)\n\t\t\treturn;\n\n\t\tthis._backgroundB = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The Stage that will provide the ContextGL used for rendering.\n\t */\n\tpublic get stage():Stage\n\t{\n\t\treturn this._pStage;\n\t}\n\n\tpublic set stage(value:Stage)\n\t{\n\t\tif (value == this._pStage)\n\t\t\treturn;\n\n\t\tthis.iSetStage(value);\n\t}\n\n\tpublic iSetStage(value:Stage)\n\t{\n\t\tif (this._pStage) {\n\t\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\t\t}\n\n\t\tif (!value) {\n\t\t\tthis._pStage = null;\n\t\t\tthis._pContext = null;\n\t\t} else {\n\t\t\tthis._pStage = value;\n\t\t\tthis._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\n\t\t\t/*\n\t\t\t if (_backgroundImageRenderer)\n\t\t\t _backgroundImageRenderer.stage = value;\n\t\t\t */\n\t\t\tif (this._pStage.context)\n\t\t\t\tthis._pContext = this._pStage.context;\n\t\t}\n\n\t\tthis._pBackBufferInvalid = true;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks\n\t * to share the same ContextGL object.\n\t */\n\tpublic get shareContext():boolean\n\t{\n\t\treturn this._shareContext;\n\t}\n\n\tpublic set shareContext(value:boolean)\n\t{\n\t\tif (this._shareContext == value)\n\t\t\treturn;\n\n\t\tthis._shareContext = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t * Disposes the resources used by the RendererBase.\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.dispose();\n\n\t\tthis._pRttBufferManager = null;\n\n\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\tthis._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\n\t\tthis._pStage = null;\n\n\t\t/*\n\t\t if (_backgroundImageRenderer) {\n\t\t _backgroundImageRenderer.dispose();\n\t\t _backgroundImageRenderer = null;\n\t\t }\n\t\t */\n\t}\n\n\tpublic render(entityCollector:ICollector)\n\t{\n\t\tthis._viewportDirty = false;\n\t\tthis._scissorDirty = false;\n\t}\n\n\t/**\n\t * Renders the potentially visible geometry to the back buffer or texture.\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t * @param target An option target texture to render to.\n\t * @param surfaceSelector The index of a CubeTexture's face to render to.\n\t * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted.\n\t */\n\tpublic _iRender(entityCollector:ICollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\t//TODO refactor setTarget so that rendertextures are created before this check\n\t\tif (!this._pStage || !this._pContext)\n\t\t\treturn;\n\n\t\tthis._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection);\n\t\tthis._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1);\n\n\t\tthis.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector);\n\n\t\t// generate mip maps on target (if target exists) //TODO\n\t\t//if (target)\n\t\t//\t(target).generateMipmaps();\n\n\t\t// clear buffers\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tthis._pContext.setVertexBufferAt(i, null);\n\t\t\tthis._pContext.setTextureAt(i, null);\n\t\t}\n\t}\n\n\tpublic _iRenderCascades(entityCollector:ShadowCasterCollector, target:TextureProxyBase, numCascades:number, scissorRects:Array, cameras:Array)\n\t{\n\n\t}\n\n\tpublic pCollectRenderables(entityCollector:ICollector)\n\t{\n\t\t//reset head values\n\t\tthis._pBlendedRenderableHead = null;\n\t\tthis._pOpaqueRenderableHead = null;\n\t\tthis._pNumTriangles = 0;\n\n\t\t//grab entity head\n\t\tvar item:EntityListItem = entityCollector.entityHead;\n\n\t\t//set temp values for entry point and camera forward vector\n\t\tthis._pCamera = entityCollector.camera;\n\t\tthis._iEntryPoint = this._pCamera.scenePosition;\n\t\tthis._pCameraForward = this._pCamera.transform.forwardVector;\n\n\t\t//iterate through all entities\n\t\twhile (item) {\n\t\t\titem.entity._iCollectRenderables(this);\n\t\t\titem = item.next;\n\t\t}\n\n\t\t//sort the resulting renderables\n\t\tthis._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead);\n\t\tthis._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead);\n\t}\n\n\t/**\n\t * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up.\n\t *\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t * @param target An option target texture to render to.\n\t * @param surfaceSelector The index of a CubeTexture's face to render to.\n\t * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted.\n\t */\n\tpublic pExecuteRender(entityCollector:ICollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\tthis._pContext.setRenderTarget(target, true, surfaceSelector);\n\n\t\tif ((target || !this._shareContext) && !this._depthPrepass)\n\t\t\tthis._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0);\n\n\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS);\n\n\t\tthis._pStage.scissorRect = scissorRect;\n\n\t\t/*\n\t\t if (_backgroundImageRenderer)\n\t\t _backgroundImageRenderer.render();\n\t\t */\n\n\t\tthis.pDraw(entityCollector, target);\n\n\t\t//line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED!\n\t\t//this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie\n\n\t\tif (!this._shareContext) {\n\t\t\tif (this._snapshotRequired && this._snapshotBitmapData) {\n\t\t\t\tthis._pContext.drawToBitmapData(this._snapshotBitmapData);\n\t\t\t\tthis._snapshotRequired = false;\n\t\t\t}\n\t\t}\n\n\t\tthis._pStage.scissorRect = null;\n\t}\n\n\t/*\n\t * Will draw the renderer's output on next render to the provided bitmap data.\n\t * */\n\tpublic queueSnapshot(bmd:BitmapData)\n\t{\n\t\tthis._snapshotRequired = true;\n\t\tthis._snapshotBitmapData = bmd;\n\t}\n\n\t/**\n\t * Performs the actual drawing of geometry to the target.\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t */\n\tpublic pDraw(entityCollector:ICollector, target:TextureProxyBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * Assign the context once retrieved\n\t */\n\tprivate onContextUpdate(event:Event)\n\t{\n\t\tthis._pContext = this._pStage.context;\n\t}\n\n\tpublic get _iBackgroundAlpha():number\n\t{\n\t\treturn this._backgroundAlpha;\n\t}\n\n\tpublic set _iBackgroundAlpha(value:number)\n\t{\n\t\tif (this._backgroundAlpha == value)\n\t\t\treturn;\n\n\t\tthis._backgroundAlpha = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/*\n\t public get iBackground():Texture2DBase\n\t {\n\t return this._background;\n\t }\n\t */\n\n\t/*\n\t public set iBackground(value:Texture2DBase)\n\t {\n\t if (this._backgroundImageRenderer && !value) {\n\t this._backgroundImageRenderer.dispose();\n\t this._backgroundImageRenderer = null;\n\t }\n\n\t if (!this._backgroundImageRenderer && value)\n\t {\n\n\t this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage);\n\n\t }\n\n\n\t this._background = value;\n\n\t if (this._backgroundImageRenderer)\n\t this._backgroundImageRenderer.texture = value;\n\t }\n\t */\n\t/*\n\t public get backgroundImageRenderer():BackgroundImageRenderer\n\t {\n\t return _backgroundImageRenderer;\n\t }\n\t */\n\n\n\t/**\n\t * @private\n\t */\n\tprivate notifyScissorUpdate()\n\t{\n\t\tif (this._scissorDirty)\n\t\t\treturn;\n\n\t\tthis._scissorDirty = true;\n\n\t\tif (!this._scissorUpdated)\n\t\t\tthis._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED);\n\n\t\tthis.dispatchEvent(this._scissorUpdated);\n\t}\n\n\n\t/**\n\t * @private\n\t */\n\tprivate notifyViewportUpdate()\n\t{\n\t\tif (this._viewportDirty)\n\t\t\treturn;\n\n\t\tthis._viewportDirty = true;\n\n\t\tif (!this._viewPortUpdated)\n\t\t\tthis._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED);\n\n\t\tthis.dispatchEvent(this._viewPortUpdated);\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic onViewportUpdated(event:StageEvent)\n\t{\n\t\tthis._viewPort = this._pStage.viewPort;\n\t\t//TODO stop firing viewport updated for every stagegl viewport change\n\n\t\tif (this._shareContext) {\n\t\t\tthis._pScissorRect.x = this._globalPos.x - this._pStage.x;\n\t\t\tthis._pScissorRect.y = this._globalPos.y - this._pStage.y;\n\t\t\tthis.notifyScissorUpdate();\n\t\t}\n\n\t\tthis.notifyViewportUpdate();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic updateGlobalPos()\n\t{\n\t\tif (this._shareContext) {\n\t\t\tthis._pScissorRect.x = this._globalPos.x - this._viewPort.x;\n\t\t\tthis._pScissorRect.y = this._globalPos.y - this._viewPort.y;\n\t\t} else {\n\t\t\tthis._pScissorRect.x = 0;\n\t\t\tthis._pScissorRect.y = 0;\n\t\t\tthis._viewPort.x = this._globalPos.x;\n\t\t\tthis._viewPort.y = this._globalPos.y;\n\t\t}\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\n\t/**\n\t *\n\t * @param billboard\n\t * @protected\n\t */\n\tpublic applyBillboard(billboard:Billboard)\n\t{\n\t\tthis._applyRenderable( this._billboardRenderablePool.getItem(billboard));\n\t}\n\n\t/**\n\t *\n\t * @param triangleSubMesh\n\t */\n\tpublic applyTriangleSubMesh(triangleSubMesh:TriangleSubMesh)\n\t{\n\t\tthis._applyRenderable( this._triangleSubMeshRenderablePool.getItem(triangleSubMesh));\n\t}\n\n\t/**\n\t *\n\t * @param lineSubMesh\n\t */\n\tpublic applyLineSubMesh(lineSubMesh:LineSubMesh)\n\t{\n\t\tthis._applyRenderable( this._lineSubMeshRenderablePool.getItem(lineSubMesh));\n\t}\n\n\t/**\n\t *\n\t * @param renderable\n\t * @protected\n\t */\n\tprivate _applyRenderable(renderable:RenderableBase)\n\t{\n\t\tvar material:MaterialBase = renderable.materialOwner.material;\n\t\tvar entity:IEntity = renderable.sourceEntity;\n\t\tvar position:Vector3D = entity.scenePosition;\n\n\t\tif (!material)\n\t\t\tmaterial = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner);\n\n\t\t//update material if invalidated\n\t\tmaterial._iUpdateMaterial();\n\n\t\t//set ids for faster referencing\n\t\trenderable.material = material;\n\t\trenderable.materialId = material._iMaterialId;\n\t\trenderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId;\n\t\trenderable.cascaded = false;\n\n\t\t// project onto camera's z-axis\n\t\tposition = this._iEntryPoint.subtract(position);\n\t\trenderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward);\n\n\t\t//store reference to scene transform\n\t\trenderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera);\n\n\t\tif (material.requiresBlending) {\n\t\t\trenderable.next = this._pBlendedRenderableHead;\n\t\t\tthis._pBlendedRenderableHead = renderable;\n\t\t} else {\n\t\t\trenderable.next = this._pOpaqueRenderableHead;\n\t\t\tthis._pOpaqueRenderableHead = renderable;\n\t\t}\n\n\t\tthis._pNumTriangles += renderable.numTriangles;\n\n\t\t//handle any overflow for renderables with data that exceeds GPU limitations\n\t\tif (renderable.overflow)\n\t\t\tthis._applyRenderable(renderable.overflow);\n\t}\n}\n\nexport = RendererBase;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport IContext\t\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport AGALMiniAssembler\t\t\t= require(\"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler\");\nimport AnimatorBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimatorBase\");\nimport AnimationSetBase\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimationSetBase\");\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassDataPool\");\nimport TextureData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/TextureData\");\nimport TextureDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/TextureDataPool\");\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/ProgramData\");\nimport ProgramDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/ProgramDataPool\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialData\");\nimport MaterialDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialDataPool\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/VertexData\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ICubeTexture\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITextureBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n * Stage provides a proxy class to handle the creation and attachment of the Context\n * (and in turn the back buffer) it uses. Stage should never be created directly,\n * but requested through StageManager.\n *\n * @see away.managers.StageManager\n *\n */\nclass ContextGLBase implements IContext\n{\n\tprivate _programData:Array = new Array();\n\tprivate _numUsedStreams:number = 0;\n\tprivate _numUsedTextures:number = 0;\n\n\tpublic _pContainer:HTMLElement;\n\n\tprivate _texturePool:TextureDataPool;\n\n\tprivate _materialDataPool:MaterialDataPool;\n\n\tprivate _programDataPool:ProgramDataPool;\n\n\tprivate _width:number;\n\tprivate _height:number;\n\n\t//private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame\n\n\tprivate _stageIndex:number = -1;\n\tprivate _antiAlias:number = 0;\n\tprivate _enableDepthAndStencil:boolean;\n\tprivate _renderTarget:TextureProxyBase = null;\n\tprivate _renderSurfaceSelector:number = 0;\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tconstructor(stageIndex:number)\n\t{\n\t\tthis._stageIndex = stageIndex;\n\t\tthis._texturePool = new TextureDataPool(this);\n\t\tthis._materialDataPool = new MaterialDataPool(this);\n\t\tthis._programDataPool = new ProgramDataPool(this);\n\t}\n\n\tpublic setRenderTarget(target:TextureProxyBase, enableDepthAndStencil:boolean = false, surfaceSelector:number = 0)\n\t{\n\t\tif (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil)\n\t\t\treturn;\n\n\t\tthis._renderTarget = target;\n\t\tthis._renderSurfaceSelector = surfaceSelector;\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\t\tif (target instanceof RenderTexture) {\n\t\t\tthis.setRenderToTexture(this.getRenderTexture( target), enableDepthAndStencil, this._antiAlias, surfaceSelector);\n\t\t} else {\n\t\t\tthis.setRenderToBackBuffer();\n\t\t\tthis.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\t\t}\n\t}\n\n\tpublic getRenderTexture(textureProxy:RenderTexture):ITextureBase\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture)\n\t\t\ttextureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true);\n\n\t\treturn textureData.texture;\n\t}\n\n\tpublic getProgram(materialPassData:MaterialPassData):ProgramData\n\t{\n\t\t//check key doesn't need re-concatenating\n\t\tif (!materialPassData.key.length) {\n\t\t\tmaterialPassData.key = materialPassData.animationVertexCode +\n\t\t\t\tmaterialPassData.vertexCode +\n\t\t\t\t\"---\" +\n\t\t\t\tmaterialPassData.fragmentCode +\n\t\t\t\tmaterialPassData.animationFragmentCode +\n\t\t\t\tmaterialPassData.postAnimationFragmentCode;\n\t\t} else {\n\t\t\treturn materialPassData.programData;\n\t\t}\n\n\t\tvar programData:ProgramData = this._programDataPool.getItem(materialPassData.key);\n\n\t\t//check program data hasn't changed, keep count of program usages\n\t\tif (materialPassData.programData != programData) {\n\t\t\tif (materialPassData.programData)\n\t\t\t\tmaterialPassData.programData.dispose();\n\n\t\t\tmaterialPassData.programData = programData;\n\n\t\t\tprogramData.usages++;\n\t\t}\n\n\t\treturn programData;\n\t}\n\n\t/**\n\t *\n\t * @param material\n\t */\n\tpublic getMaterial(material:StageGLMaterialBase, profile:string):MaterialData\n\t{\n\t\tvar materialData:MaterialData = this._materialDataPool.getItem(material);\n\n\t\tif (materialData.invalidAnimation) {\n\t\t\tmaterialData.invalidAnimation = false;\n\n\t\t\tvar materialDataPasses:Array = materialData.getMaterialPasses(profile);\n\n\t\t\tvar enabledGPUAnimation:boolean = this.getEnabledGPUAnimation(material, materialDataPasses);\n\n\t\t\tvar renderOrderId = 0;\n\t\t\tvar mult:number = 1;\n\t\t\tvar materialPassData:MaterialPassData;\n\t\t\tvar len:number = materialDataPasses.length;\n\t\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\t\tmaterialPassData = materialDataPasses[i];\n\n\t\t\t\tif (materialPassData.usesAnimation != enabledGPUAnimation) {\n\t\t\t\t\tmaterialPassData.usesAnimation = enabledGPUAnimation;\n\t\t\t\t\tmaterialPassData.key == \"\";\n\t\t\t\t}\n\n\t\t\t\tif (materialPassData.key == \"\")\n\t\t\t\t\tthis.calcAnimationCode(material, materialPassData);\n\n\t\t\t\trenderOrderId += this.getProgram(materialPassData).id*mult;\n\t\t\t\tmult *= 1000;\n\t\t\t}\n\n\t\t\tmaterialData.renderOrderId = renderOrderId;\n\t\t}\n\n\t\treturn materialData;\n\t}\n\n\t/**\n\t * Assigns an attribute stream\n\t *\n\t * @param index The attribute stream index for the vertex shader\n\t * @param buffer\n\t * @param offset\n\t * @param stride\n\t * @param format\n\t */\n\tpublic activateBuffer(index:number, buffer:VertexData, offset:number, format:string)\n\t{\n\t\tif (!buffer.contexts[this._stageIndex])\n\t\t\tbuffer.contexts[this._stageIndex] = this;\n\n\t\tif (!buffer.buffers[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length/buffer.dataPerVertex, buffer.dataPerVertex);\n\t\t\tbuffer.invalid[this._stageIndex] = true;\n\t\t}\n\n\t\tif (buffer.invalid[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length/buffer.dataPerVertex);\n\t\t\tbuffer.invalid[this._stageIndex] = false;\n\t\t}\n\n\t\tthis.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format);\n\t}\n\n\tpublic disposeVertexData(buffer:VertexData)\n\t{\n\t\tbuffer.buffers[this._stageIndex].dispose();\n\t\tbuffer.buffers[this._stageIndex] = null;\n\t}\n\n\tpublic activateRenderTexture(index:number, textureProxy:RenderTexture)\n\t{\n\t\tthis.setTextureAt(index, this.getRenderTexture(textureProxy));\n\t}\n\n\tpublic activateMaterialPass(materialPassData:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\t//clear unused vertex streams\n\t\tfor (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++)\n\t\t\tthis.setVertexBufferAt(i, null);\n\n\t\t//clear unused texture streams\n\t\tfor (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++)\n\t\t\tthis.setTextureAt(i, null);\n\n\t\tif (materialPassData.usesAnimation)\n\t\t\t( materialPassData.material.animationSet).activate(shaderObject, stage);\n\n\t\t//activate shader object\n\t\tshaderObject.iActivate(stage, camera);\n\n\t\t//check program data is uploaded\n\t\tvar programData:ProgramData = this.getProgram(materialPassData);\n\n\t\tif (!programData.program) {\n\t\t\tprogramData.program = this.createProgram();\n\t\t\tvar vertexByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part vertex 1\\n\" + materialPassData.animationVertexCode + materialPassData.vertexCode + \"endpart\"))['vertex'].data;\n\t\t\tvar fragmentByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part fragment 1\\n\" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + \"endpart\"))['fragment'].data;\n\t\t\tprogramData.program.upload(vertexByteCode, fragmentByteCode);\n\t\t}\n\n\t\t//set program data\n\t\tthis.setProgram(programData.program);\n\t}\n\n\tpublic deactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage)\n\t{\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\tif (materialPassData.usesAnimation)\n\t\t\t( materialPassData.material.animationSet).deactivate(shaderObject, stage);\n\n\t\tmaterialPassData.shaderObject.iDeactivate(stage);\n\n\t\tthis._numUsedStreams = shaderObject.numUsedStreams;\n\t\tthis._numUsedTextures = shaderObject.numUsedTextures;\n\t}\n\n\tpublic activateTexture(index:number, textureProxy:Texture2DBase)\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture) {\n\t\t\ttextureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true);\n\t\t\ttextureData.invalid = true;\n\t\t}\n\n\t\tif (textureData.invalid) {\n\t\t\ttextureData.invalid = false;\n\t\t\tif (textureProxy.generateMipmaps) {\n\t\t\t\tvar mipmapData:Array = textureProxy._iGetMipmapData();\n\t\t\t\tvar len:number = mipmapData.length;\n\t\t\t\tfor (var i:number = 0; i < len; i++)\n\t\t\t\t\t( textureData.texture).uploadFromData(mipmapData[i], i);\n\t\t\t} else {\n\t\t\t\t( textureData.texture).uploadFromData(textureProxy._iGetTextureData(), 0);\n\t\t\t}\n\t\t}\n\n\t\tthis.setTextureAt(index, textureData.texture);\n\t}\n\n\tpublic activateCubeTexture(index:number, textureProxy:CubeTextureBase)\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture) {\n\t\t\ttextureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false);\n\t\t\ttextureData.invalid = true;\n\t\t}\n\n\t\tif (textureData.invalid) {\n\t\t\ttextureData.invalid = false;\n\t\t\tfor (var i:number = 0; i < 6; ++i) {\n\t\t\t\tif (textureProxy.generateMipmaps) {\n\t\t\t\t\tvar mipmapData:Array = textureProxy._iGetMipmapData(i);\n\t\t\t\t\tvar len:number = mipmapData.length;\n\t\t\t\t\tfor (var j:number = 0; j < len; j++)\n\t\t\t\t\t\t( textureData.texture).uploadFromData(mipmapData[j], i, j);\n\t\t\t\t} else {\n\t\t\t\t\t( textureData.texture).uploadFromData(textureProxy._iGetTextureData(i), i, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.setTextureAt(index, textureData.texture);\n\t}\n\n\t/**\n\t * Retrieves the VertexBuffer object that contains triangle indices.\n\t * @param context The ContextWeb for which we request the buffer\n\t * @return The VertexBuffer object that contains triangle indices.\n\t */\n\tpublic getIndexBuffer(buffer:IndexData):IIndexBuffer\n\t{\n\t\tif (!buffer.contexts[this._stageIndex])\n\t\t\tbuffer.contexts[this._stageIndex] = this;\n\n\t\tif (!buffer.buffers[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length);\n\t\t\tbuffer.invalid[this._stageIndex] = true;\n\t\t}\n\n\t\tif (buffer.invalid[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length);\n\t\t\tbuffer.invalid[this._stageIndex] = false;\n\t\t}\n\n\t\treturn buffer.buffers[this._stageIndex];\n\t}\n\n\tpublic disposeIndexData(buffer:IndexData)\n\t{\n\t\tbuffer.buffers[this._stageIndex].dispose();\n\t\tbuffer.buffers[this._stageIndex] = null;\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IIndexBuffer\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):IVertexBuffer\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):ITexture\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):ICubeTexture\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createProgram():IProgram\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic dispose()\n\t{\n\n\t}\n\n\tpublic present()\n\t{\n\n\t}\n\n\tpublic setRenderToTexture(target:ITextureBase, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\n\t}\n\n\tpublic setRenderToBackBuffer()\n\t{\n\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\n\t}\n\n\tpublic setTextureAt(sampler:number, texture:ITextureBase)\n\t{\n\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:IVertexBuffer, bufferOffset:number = 0, format:string = null)\n\t{\n\n\t}\n\n\tpublic setProgram(program:IProgram)\n\t{\n\n\t}\n\n\tpublic registerProgram(programData:ProgramData)\n\t{\n\t\tvar i:number = 0;\n\t\twhile (this._programData[i] != null)\n\t\t\ti++;\n\n\t\tthis._programData[i] = programData;\n\t\tprogramData.id = i;\n\t}\n\n\tpublic unRegisterProgram(programData:ProgramData)\n\t{\n\t\tthis._programData[programData.id] = null;\n\t\tprogramData.id = -1;\n\t}\n\n\n\t/**\n\t * test if animation will be able to run on gpu BEFORE compiling materials\n\t * test if the shader objects supports animating the animation set in the vertex shader\n\t * if any object using this material fails to support accelerated animations for any of the shader objects,\n\t * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations)\n\t */\n\tprivate getEnabledGPUAnimation(material:StageGLMaterialBase, materialDataPasses:Array):boolean\n\t{\n\t\tif (material.animationSet) {\n\t\t\tmaterial.animationSet.resetGPUCompatibility();\n\n\t\t\tvar owners:Array = material.iOwners;\n\t\t\tvar numOwners:number = owners.length;\n\n\t\t\tvar len:number = materialDataPasses.length;\n\t\t\tfor (var i:number = 0; i < len; i++)\n\t\t\t\tfor (var j:number = 0; j < numOwners; j++)\n\t\t\t\t\tif (owners[j].animator)\n\t\t\t\t\t\t( owners[j].animator).testGPUCompatibility(materialDataPasses[i].shaderObject);\n\n\t\t\treturn !material.animationSet.usesCPU;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic calcAnimationCode(material:StageGLMaterialBase, materialPassData:MaterialPassData)\n\t{\n\t\t//reset key so that the program is re-calculated\n\t\tmaterialPassData.key = \"\";\n\t\tmaterialPassData.animationVertexCode = \"\";\n\t\tmaterialPassData.animationFragmentCode = \"\";\n\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\t//check to see if GPU animation is used\n\t\tif (materialPassData.usesAnimation) {\n\n\t\t\tvar animationSet:AnimationSetBase = material.animationSet;\n\n\t\t\tmaterialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject);\n\n\t\t\tif (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform)\n\t\t\t\tmaterialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject);\n\n\t\t\tif (shaderObject.usesFragmentAnimation)\n\t\t\t\tmaterialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget);\n\n\t\t\tanimationSet.doneAGALCode(shaderObject);\n\n\t\t} else {\n\t\t\t// simply write attributes to targets, do not animate them\n\t\t\t// projection will pick up on targets[0] to do the projection\n\t\t\tvar len:number = shaderObject.animatableAttributes.length;\n\t\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\t\tmaterialPassData.animationVertexCode += \"mov \" + shaderObject.animationTargetRegisters[i] + \", \" + shaderObject.animatableAttributes[i] + \"\\n\";\n\n\t\t\tif (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform)\n\t\t\t\tmaterialPassData.animationVertexCode += \"mov \" + shaderObject.uvTarget + \",\" + shaderObject.uvSource + \"\\n\";\n\t\t}\n\t}\n}\n\nexport = ContextGLBase;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport IContext\t\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport AGALMiniAssembler\t\t\t= require(\"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler\");\nimport AnimatorBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimatorBase\");\nimport AnimationSetBase\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimationSetBase\");\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassDataPool\");\nimport TextureData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/TextureData\");\nimport TextureDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/TextureDataPool\");\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/ProgramData\");\nimport ProgramDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/ProgramDataPool\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialData\");\nimport MaterialDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialDataPool\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/VertexData\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLClearMask\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFormat\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ICubeTexture\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITextureBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\n\n/**\n * Stage provides a proxy class to handle the creation and attachment of the Context\n * (and in turn the back buffer) it uses. Stage should never be created directly,\n * but requested through StageManager.\n *\n * @see away.managers.StageManager\n *\n */\nclass ContextGLBase implements IContext\n{\n\tprivate _programData:Array = new Array();\n\tprivate _numUsedStreams:number = 0;\n\tprivate _numUsedTextures:number = 0;\n\n\tpublic _pContainer:HTMLElement;\n\n\tprivate _texturePool:TextureDataPool;\n\n\tprivate _materialDataPool:MaterialDataPool;\n\n\tprivate _programDataPool:ProgramDataPool;\n\n\tprivate _width:number;\n\tprivate _height:number;\n\n\t//private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame\n\n\tprivate _stageIndex:number = -1;\n\tprivate _antiAlias:number = 0;\n\tprivate _enableDepthAndStencil:boolean;\n\tprivate _renderTarget:TextureProxyBase = null;\n\tprivate _renderSurfaceSelector:number = 0;\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tconstructor(stageIndex:number)\n\t{\n\t\tthis._stageIndex = stageIndex;\n\t\tthis._texturePool = new TextureDataPool(this);\n\t\tthis._materialDataPool = new MaterialDataPool(this);\n\t\tthis._programDataPool = new ProgramDataPool(this);\n\t}\n\n\tpublic setRenderTarget(target:TextureProxyBase, enableDepthAndStencil:boolean = false, surfaceSelector:number = 0)\n\t{\n\t\tif (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil)\n\t\t\treturn;\n\n\t\tthis._renderTarget = target;\n\t\tthis._renderSurfaceSelector = surfaceSelector;\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\t\tif (target instanceof RenderTexture) {\n\t\t\tthis.setRenderToTexture(this.getRenderTexture( target), enableDepthAndStencil, this._antiAlias, surfaceSelector);\n\t\t} else {\n\t\t\tthis.setRenderToBackBuffer();\n\t\t\tthis.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\t\t}\n\t}\n\n\tpublic getRenderTexture(textureProxy:RenderTexture):ITextureBase\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture)\n\t\t\ttextureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true);\n\n\t\treturn textureData.texture;\n\t}\n\n\tpublic getProgram(materialPassData:MaterialPassData):ProgramData\n\t{\n\t\t//check key doesn't need re-concatenating\n\t\tif (!materialPassData.key.length) {\n\t\t\tmaterialPassData.key = materialPassData.animationVertexCode +\n\t\t\t\tmaterialPassData.vertexCode +\n\t\t\t\t\"---\" +\n\t\t\t\tmaterialPassData.fragmentCode +\n\t\t\t\tmaterialPassData.animationFragmentCode +\n\t\t\t\tmaterialPassData.postAnimationFragmentCode;\n\t\t} else {\n\t\t\treturn materialPassData.programData;\n\t\t}\n\n\t\tvar programData:ProgramData = this._programDataPool.getItem(materialPassData.key);\n\n\t\t//check program data hasn't changed, keep count of program usages\n\t\tif (materialPassData.programData != programData) {\n\t\t\tif (materialPassData.programData)\n\t\t\t\tmaterialPassData.programData.dispose();\n\n\t\t\tmaterialPassData.programData = programData;\n\n\t\t\tprogramData.usages++;\n\t\t}\n\n\t\treturn programData;\n\t}\n\n\t/**\n\t *\n\t * @param material\n\t */\n\tpublic getMaterial(material:StageGLMaterialBase, profile:string):MaterialData\n\t{\n\t\tvar materialData:MaterialData = this._materialDataPool.getItem(material);\n\n\t\tif (materialData.invalidAnimation) {\n\t\t\tmaterialData.invalidAnimation = false;\n\n\t\t\tvar materialDataPasses:Array = materialData.getMaterialPasses(profile);\n\n\t\t\tvar enabledGPUAnimation:boolean = this.getEnabledGPUAnimation(material, materialDataPasses);\n\n\t\t\tvar renderOrderId = 0;\n\t\t\tvar mult:number = 1;\n\t\t\tvar materialPassData:MaterialPassData;\n\t\t\tvar len:number = materialDataPasses.length;\n\t\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\t\tmaterialPassData = materialDataPasses[i];\n\n\t\t\t\tif (materialPassData.usesAnimation != enabledGPUAnimation) {\n\t\t\t\t\tmaterialPassData.usesAnimation = enabledGPUAnimation;\n\t\t\t\t\tmaterialPassData.key == \"\";\n\t\t\t\t}\n\n\t\t\t\tif (materialPassData.key == \"\")\n\t\t\t\t\tthis.calcAnimationCode(material, materialPassData);\n\n\t\t\t\trenderOrderId += this.getProgram(materialPassData).id*mult;\n\t\t\t\tmult *= 1000;\n\t\t\t}\n\n\t\t\tmaterialData.renderOrderId = renderOrderId;\n\t\t}\n\n\t\treturn materialData;\n\t}\n\n\t/**\n\t * Assigns an attribute stream\n\t *\n\t * @param index The attribute stream index for the vertex shader\n\t * @param buffer\n\t * @param offset\n\t * @param stride\n\t * @param format\n\t */\n\tpublic activateBuffer(index:number, buffer:VertexData, offset:number, format:string)\n\t{\n\t\tif (!buffer.contexts[this._stageIndex])\n\t\t\tbuffer.contexts[this._stageIndex] = this;\n\n\t\tif (!buffer.buffers[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length/buffer.dataPerVertex, buffer.dataPerVertex);\n\t\t\tbuffer.invalid[this._stageIndex] = true;\n\t\t}\n\n\t\tif (buffer.invalid[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length/buffer.dataPerVertex);\n\t\t\tbuffer.invalid[this._stageIndex] = false;\n\t\t}\n\n\t\tthis.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format);\n\t}\n\n\tpublic disposeVertexData(buffer:VertexData)\n\t{\n\t\tbuffer.buffers[this._stageIndex].dispose();\n\t\tbuffer.buffers[this._stageIndex] = null;\n\t}\n\n\tpublic activateRenderTexture(index:number, textureProxy:RenderTexture)\n\t{\n\t\tthis.setTextureAt(index, this.getRenderTexture(textureProxy));\n\t}\n\n\tpublic activateMaterialPass(materialPassData:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\t//clear unused vertex streams\n\t\tfor (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++)\n\t\t\tthis.setVertexBufferAt(i, null);\n\n\t\t//clear unused texture streams\n\t\tfor (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++)\n\t\t\tthis.setTextureAt(i, null);\n\n\t\tif (materialPassData.usesAnimation)\n\t\t\t( materialPassData.material.animationSet).activate(shaderObject, stage);\n\n\t\t//activate shader object\n\t\tshaderObject.iActivate(stage, camera);\n\n\t\t//check program data is uploaded\n\t\tvar programData:ProgramData = this.getProgram(materialPassData);\n\n\t\tif (!programData.program) {\n\t\t\tprogramData.program = this.createProgram();\n\t\t\tvar vertexByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part vertex 1\\n\" + materialPassData.animationVertexCode + materialPassData.vertexCode + \"endpart\"))['vertex'].data;\n\t\t\tvar fragmentByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part fragment 1\\n\" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + \"endpart\"))['fragment'].data;\n\t\t\tprogramData.program.upload(vertexByteCode, fragmentByteCode);\n\t\t}\n\n\t\t//set program data\n\t\tthis.setProgram(programData.program);\n\t}\n\n\tpublic deactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage)\n\t{\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\tif (materialPassData.usesAnimation)\n\t\t\t( materialPassData.material.animationSet).deactivate(shaderObject, stage);\n\n\t\tmaterialPassData.shaderObject.iDeactivate(stage);\n\n\t\tthis._numUsedStreams = shaderObject.numUsedStreams;\n\t\tthis._numUsedTextures = shaderObject.numUsedTextures;\n\t}\n\n\tpublic activateTexture(index:number, textureProxy:Texture2DBase)\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture) {\n\t\t\ttextureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true);\n\t\t\ttextureData.invalid = true;\n\t\t}\n\n\t\tif (textureData.invalid) {\n\t\t\ttextureData.invalid = false;\n\t\t\tif (textureProxy.generateMipmaps) {\n\t\t\t\tvar mipmapData:Array = textureProxy._iGetMipmapData();\n\t\t\t\tvar len:number = mipmapData.length;\n\t\t\t\tfor (var i:number = 0; i < len; i++)\n\t\t\t\t\t( textureData.texture).uploadFromData(mipmapData[i], i);\n\t\t\t} else {\n\t\t\t\t( textureData.texture).uploadFromData(textureProxy._iGetTextureData(), 0);\n\t\t\t}\n\t\t}\n\n\t\tthis.setTextureAt(index, textureData.texture);\n\t}\n\n\tpublic activateCubeTexture(index:number, textureProxy:CubeTextureBase)\n\t{\n\t\tvar textureData:TextureData = this._texturePool.getItem(textureProxy);\n\n\t\tif (!textureData.texture) {\n\t\t\ttextureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false);\n\t\t\ttextureData.invalid = true;\n\t\t}\n\n\t\tif (textureData.invalid) {\n\t\t\ttextureData.invalid = false;\n\t\t\tfor (var i:number = 0; i < 6; ++i) {\n\t\t\t\tif (textureProxy.generateMipmaps) {\n\t\t\t\t\tvar mipmapData:Array = textureProxy._iGetMipmapData(i);\n\t\t\t\t\tvar len:number = mipmapData.length;\n\t\t\t\t\tfor (var j:number = 0; j < len; j++)\n\t\t\t\t\t\t( textureData.texture).uploadFromData(mipmapData[j], i, j);\n\t\t\t\t} else {\n\t\t\t\t\t( textureData.texture).uploadFromData(textureProxy._iGetTextureData(i), i, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.setTextureAt(index, textureData.texture);\n\t}\n\n\t/**\n\t * Retrieves the VertexBuffer object that contains triangle indices.\n\t * @param context The ContextWeb for which we request the buffer\n\t * @return The VertexBuffer object that contains triangle indices.\n\t */\n\tpublic getIndexBuffer(buffer:IndexData):IIndexBuffer\n\t{\n\t\tif (!buffer.contexts[this._stageIndex])\n\t\t\tbuffer.contexts[this._stageIndex] = this;\n\n\t\tif (!buffer.buffers[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length);\n\t\t\tbuffer.invalid[this._stageIndex] = true;\n\t\t}\n\n\t\tif (buffer.invalid[this._stageIndex]) {\n\t\t\tbuffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length);\n\t\t\tbuffer.invalid[this._stageIndex] = false;\n\t\t}\n\n\t\treturn buffer.buffers[this._stageIndex];\n\t}\n\n\tpublic disposeIndexData(buffer:IndexData)\n\t{\n\t\tbuffer.buffers[this._stageIndex].dispose();\n\t\tbuffer.buffers[this._stageIndex] = null;\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IIndexBuffer\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):IVertexBuffer\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):ITexture\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):ICubeTexture\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic createProgram():IProgram\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\tpublic dispose()\n\t{\n\n\t}\n\n\tpublic present()\n\t{\n\n\t}\n\n\tpublic setRenderToTexture(target:ITextureBase, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\n\t}\n\n\tpublic setRenderToBackBuffer()\n\t{\n\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\n\t}\n\n\tpublic setTextureAt(sampler:number, texture:ITextureBase)\n\t{\n\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:IVertexBuffer, bufferOffset:number = 0, format:string = null)\n\t{\n\n\t}\n\n\tpublic setProgram(program:IProgram)\n\t{\n\n\t}\n\n\tpublic registerProgram(programData:ProgramData)\n\t{\n\t\tvar i:number = 0;\n\t\twhile (this._programData[i] != null)\n\t\t\ti++;\n\n\t\tthis._programData[i] = programData;\n\t\tprogramData.id = i;\n\t}\n\n\tpublic unRegisterProgram(programData:ProgramData)\n\t{\n\t\tthis._programData[programData.id] = null;\n\t\tprogramData.id = -1;\n\t}\n\n\n\t/**\n\t * test if animation will be able to run on gpu BEFORE compiling materials\n\t * test if the shader objects supports animating the animation set in the vertex shader\n\t * if any object using this material fails to support accelerated animations for any of the shader objects,\n\t * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations)\n\t */\n\tprivate getEnabledGPUAnimation(material:StageGLMaterialBase, materialDataPasses:Array):boolean\n\t{\n\t\tif (material.animationSet) {\n\t\t\tmaterial.animationSet.resetGPUCompatibility();\n\n\t\t\tvar owners:Array = material.iOwners;\n\t\t\tvar numOwners:number = owners.length;\n\n\t\t\tvar len:number = materialDataPasses.length;\n\t\t\tfor (var i:number = 0; i < len; i++)\n\t\t\t\tfor (var j:number = 0; j < numOwners; j++)\n\t\t\t\t\tif (owners[j].animator)\n\t\t\t\t\t\t( owners[j].animator).testGPUCompatibility(materialDataPasses[i].shaderObject);\n\n\t\t\treturn !material.animationSet.usesCPU;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic calcAnimationCode(material:StageGLMaterialBase, materialPassData:MaterialPassData)\n\t{\n\t\t//reset key so that the program is re-calculated\n\t\tmaterialPassData.key = \"\";\n\t\tmaterialPassData.animationVertexCode = \"\";\n\t\tmaterialPassData.animationFragmentCode = \"\";\n\n\t\tvar shaderObject:ShaderObjectBase = materialPassData.shaderObject;\n\n\t\t//check to see if GPU animation is used\n\t\tif (materialPassData.usesAnimation) {\n\n\t\t\tvar animationSet:AnimationSetBase = material.animationSet;\n\n\t\t\tmaterialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject);\n\n\t\t\tif (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform)\n\t\t\t\tmaterialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject);\n\n\t\t\tif (shaderObject.usesFragmentAnimation)\n\t\t\t\tmaterialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget);\n\n\t\t\tanimationSet.doneAGALCode(shaderObject);\n\n\t\t} else {\n\t\t\t// simply write attributes to targets, do not animate them\n\t\t\t// projection will pick up on targets[0] to do the projection\n\t\t\tvar len:number = shaderObject.animatableAttributes.length;\n\t\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\t\tmaterialPassData.animationVertexCode += \"mov \" + shaderObject.animationTargetRegisters[i] + \", \" + shaderObject.animatableAttributes[i] + \"\\n\";\n\n\t\t\tif (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform)\n\t\t\t\tmaterialPassData.animationVertexCode += \"mov \" + shaderObject.uvTarget + \",\" + shaderObject.uvSource + \"\\n\";\n\t\t}\n\t}\n}\n\nexport = ContextGLBase;", "class ContextGLBlendFactor\n{\n\tpublic static DESTINATION_ALPHA:string = \"destinationAlpha\";\n\tpublic static DESTINATION_COLOR:string = \"destinationColor\";\n\tpublic static ONE:string = \"one\";\n\tpublic static ONE_MINUS_DESTINATION_ALPHA:string = \"oneMinusDestinationAlpha\";\n\tpublic static ONE_MINUS_DESTINATION_COLOR:string = \"oneMinusDestinationColor\";\n\tpublic static ONE_MINUS_SOURCE_ALPHA:string = \"oneMinusSourceAlpha\";\n\tpublic static ONE_MINUS_SOURCE_COLOR:string = \"oneMinusSourceColor\";\n\tpublic static SOURCE_ALPHA:string = \"sourceAlpha\";\n\tpublic static SOURCE_COLOR:string = \"sourceColor\";\n\tpublic static ZERO:string = \"zero\";\n}\n\nexport = ContextGLBlendFactor;", "class ContextGLClearMask\n{\n\tstatic COLOR:number = 1;\n\tstatic DEPTH:number = 2;\n\tstatic STENCIL:number = 4;\n\tstatic ALL:number = ContextGLClearMask.COLOR | ContextGLClearMask.DEPTH | ContextGLClearMask.STENCIL;\n}\n\nexport = ContextGLClearMask;", "class ContextGLCompareMode\n{\n\tpublic static ALWAYS:string = \"always\";\n\tpublic static EQUAL:string = \"equal\";\n\tpublic static GREATER:string = \"greater\";\n\tpublic static GREATER_EQUAL:string = \"greaterEqual\";\n\tpublic static LESS:string = \"less\";\n\tpublic static LESS_EQUAL:string = \"lessEqual\";\n\tpublic static NEVER:string = \"never\";\n\tpublic static NOT_EQUAL:string = \"notEqual\";\n}\n\nexport = ContextGLCompareMode;", @@ -193,75 +171,97 @@ "class ContextGLTriangleFace\n{\n\tstatic BACK:string = \"back\";\n\tstatic FRONT:string = \"front\";\n\tstatic FRONT_AND_BACK:string = \"frontAndBack\";\n\tstatic NONE:string = \"none\";\n}\n\nexport = ContextGLTriangleFace;", "class ContextGLVertexBufferFormat\n{\n\tstatic BYTES_4:string = \"bytes4\";\n\tstatic FLOAT_1:string = \"float1\";\n\tstatic FLOAT_2:string = \"float2\";\n\tstatic FLOAT_3:string = \"float3\";\n\tstatic FLOAT_4:string = \"float4\";\n}\n\nexport = ContextGLVertexBufferFormat;", "class ContextGLWrapMode\n{\n\tpublic static CLAMP:string = \"clamp\";\n\tpublic static REPEAT:string = \"repeat\";\n}\n\nexport = ContextGLWrapMode;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\n\nimport swfobject\t\t\t\t\t= require(\"awayjs-stagegl/lib/swfobject\");\nimport Sampler\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Sampler\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport CubeTextureFlash\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/CubeTextureFlash\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport IndexBufferFlash\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IndexBufferFlash\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ProgramFlash\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ProgramFlash\");\nimport TextureFlash\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/TextureFlash\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\nimport VertexBufferFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/VertexBufferFlash\");\n\nclass ContextStage3D extends ContextGLBase implements IContextStageGL\n{\n\tpublic static contexts:Object = new Object();\n\tpublic static maxvertexconstants:number = 128;\n\tpublic static maxfragconstants:number = 28;\n\tpublic static maxtemp:number = 8;\n\tpublic static maxstreams:number = 8;\n\tpublic static maxtextures:number = 8;\n\tpublic static defaultsampler = new Sampler();\n\n\tpublic _iDriverInfo;\n\n\tprivate _cmdStream:string = \"\";\n\tprivate _errorCheckingEnabled:boolean;\n\tprivate _resources:Array;\n\tprivate _oldCanvas:HTMLCanvasElement;\n\tprivate _oldParent:HTMLElement;\n\n\n\tpublic static debug:boolean = false;\n\tpublic static logStream:boolean = false;\n\n\tpublic _iCallback:(context:IContextStageGL) => void;\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tpublic get driverInfo()\n\t{\n\t\treturn this._iDriverInfo;\n\t}\n\n\tpublic get errorCheckingEnabled():boolean\n\t{\n\t\treturn this._errorCheckingEnabled;\n\t}\n\n\tpublic set errorCheckingEnabled(value:boolean)\n\t{\n\t\tif (this._errorCheckingEnabled == value)\n\t\t\treturn;\n\n\t\tthis._errorCheckingEnabled = value;\n\n\t\tthis.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value? OpCodes.trueValue : OpCodes.falseValue));\n\t\tthis.execute();\n\t}\n\n\t//TODO: get rid of hack that fixes including definition file\n\tconstructor(container:HTMLCanvasElement, stageIndex:number, callback:(context:IContextStageGL) => void, include?:Sampler)\n\t{\n\t\tsuper(stageIndex);\n\n\t\tthis._resources = new Array();\n\n\t\tvar swfVersionStr = \"11.0.0\";\n\n\t\t// To use express install, set to playerProductInstall.swf, otherwise the empty string.\n\t\tvar flashvars = {\n\t\t\tid:container.id\n\t\t};\n\n\t\tvar params = {\n\t\t\tquality:\"high\",\n\t\t\tbgcolor:\"#ffffff\",\n\t\t\tallowscriptaccess:\"sameDomain\",\n\t\t\tallowfullscreen:\"true\",\n\t\t\twmode:\"direct\"\n\t\t};\n\n\t\tthis._errorCheckingEnabled = false;\n\t\tthis._iDriverInfo = \"Unknown\";\n\n\t\tvar attributes = {\n\t\t\tsalign:\"tl\",\n\t\t\tid:container.id,\n\t\t\tname:container[\"name\"] //TODO: needed?\n\t\t};\n\n\t\tthis._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose\n\t\tthis._oldParent = container.parentNode;\n\n\t\tvar context3dObj = this;\n\t\tContextStage3D.contexts[container.id] = this;\n\n\t\tfunction callbackSWFObject(callbackInfo)\n\t\t{\n\t\t\tif (!callbackInfo.success)\n\t\t\t\treturn;\n\n\t\t\tcontext3dObj._pContainer = callbackInfo.ref;\n\t\t\tcontext3dObj._iCallback = callback;\n\t\t}\n\n\t\tswfobject.embedSWF(\"../libs/molehill_js_flashbridge.swf\", container.id, String(container.width), String(container.height), swfVersionStr, \"\", flashvars, params, attributes, callbackSWFObject);\n\t}\n\n\tpublic _iAddResource(resource:ResourceBaseFlash)\n\t{\n\t\tthis._resources.push(resource);\n\t}\n\n\tpublic _iRemoveResource(resource:ResourceBaseFlash)\n\t{\n\t\tthis._resources.splice(this._resources.indexOf(resource));\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):TextureFlash\n\t{\n\t\t//TODO:streaming\n\t\treturn new TextureFlash(this, width, height, format, optimizeForRenderToTexture);\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):CubeTextureFlash\n\t{\n\t\t//TODO:streaming\n\t\treturn new CubeTextureFlash(this, size, format, optimizeForRenderToTexture);\n\t}\n\n\n\tpublic setTextureAt(sampler:number, texture:ResourceBaseFlash)\n\t{\n\t\tif (texture) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + \",\" + texture.id + \",\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + \",\");\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string):void\n\t{\n\t\t//nothing to do here\n\t}\n\n\tpublic setStencilActions(triangleFace:string = \"frontAndBack\", compareMode:string = \"always\", actionOnBothPass:string = \"keep\", actionOnDepthFail:string = \"keep\", actionOnDepthPassStencilFail:string = \"keep\")\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + \"$\" + compareMode + \"$\" + actionOnBothPass + \"$\" + actionOnDepthFail + \"$\" + actionOnDepthPassStencilFail + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setStencilReferenceValue(referenceValue:number, readMask:number = 255, writeMask:number = 255)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setCulling(triangleFaceToCull:string, coordinateSystem:string = \"leftHanded\")\n\t{\n\t\t//TODO implement coordinateSystem option\n\t\tthis.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic drawTriangles(indexBuffer:IndexBufferFlash, firstIndex:number = 0, numTriangles:number = -1)\n\t{\n\t\tfirstIndex = firstIndex || 0;\n\t\tif (!numTriangles || numTriangles < 0)\n\t\t\tnumTriangles = indexBuffer.numIndices/3;\n\n\t\tthis.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + \",\" + numTriangles + \",\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix:boolean = false)\n\t{\n\t\t//this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData));\n\n\t\t//TODO remove special case for WebGL matrix calls?\n\t\tvar d:number[] = matrix.rawData;\n\t\tif (transposedMatrix) {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[4], d[8], d[12] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[1], d[5], d[9], d[13] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[2], d[6], d[10], d[14] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[3], d[7], d[11], d[15] ], 1);\n\t\t} else {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[1], d[2], d[3] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[4], d[5], d[6], d[7] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[8], d[9], d[10], d[11] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[12], d[13], d[14], d[15] ], 1);\n\t\t}\n\t}\n\n\tpublic setProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters:number = -1)\n\t{\n\t\tvar startIndex:number;\n\t\tvar target:number = (programType == ContextGLProgramType.VERTEX)? OpCodes.trueValue : OpCodes.falseValue;\n\t\tfor (var i:number = 0; i < numRegisters; i++) {\n\t\t\tstartIndex = i*4;\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + \",\" + data[startIndex + 1] + \",\" + data[startIndex + 2] + \",\" + data[startIndex + 3] + \",\");\n\n\t\t\tif (ContextStage3D.debug)\n\t\t\t\tthis.execute();\n\t\t}\n\t}\n\n\tpublic setProgram(program:ProgramFlash)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic present()\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.present));\n\t\tthis.execute();\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.clear) + red + \",\" + green + \",\" + blue + \",\" + alpha + \",\" + depth + \",\" + stencil + \",\" + mask + \",\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic createProgram():ProgramFlash\n\t{\n\t\treturn new ProgramFlash(this);\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):VertexBufferFlash\n\t{\n\t\treturn new VertexBufferFlash(this, numVertices, data32PerVertex);\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IndexBufferFlash\n\t{\n\t\treturn new IndexBufferFlash(this, numIndices);\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tsuper.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil);\n\n\t\t//TODO: add Anitalias setting\n\t\tthis.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + \",\" + height + \",\");\n\t}\n\n\tpublic drawToBitmapData(destination:BitmapData)\n\t{\n\t\t//TODO\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:VertexBufferFlash, bufferOffset:number = 0, format:string = null)\n\t{\n\t\tif (buffer) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + \",\" + bufferOffset + \",\" + format + \"$\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask));\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setColorMask, red? OpCodes.trueValue : OpCodes.falseValue, green? OpCodes.trueValue : OpCodes.falseValue, blue? OpCodes.trueValue : OpCodes.falseValue, alpha? OpCodes.trueValue : OpCodes.falseValue));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setBlendFactors(sourceFactor:string, destinationFactor:string)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + \"$\" + destinationFactor + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setRenderToTexture(target:ResourceBaseFlash, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\t\tif (target === null || target === undefined) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearRenderToTexture));\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil? OpCodes.trueValue : OpCodes.falseValue) + target.id + \",\" + (antiAlias || 0) + \",\");\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\n\tpublic setRenderToBackBuffer()\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.clearRenderToTexture));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\t\tif (rectangle) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + \",\" + rectangle.y + \",\" + rectangle.width + \",\" + rectangle.height + \",\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearScissorRect));\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setDepthTest(depthMask:boolean, passCompareMode:string)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (this._pContainer == null)\n\t\t\treturn;\n\n\t\tconsole.log(\"Context3D dispose, releasing \" + this._resources.length + \" resources.\");\n\n\t\twhile (this._resources.length)\n\t\t\tthis._resources[0].dispose();\n\n\t\tif (this._pContainer) {\n\t\t\t// encode command\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.disposeContext));\n\t\t\tthis.execute();\n\t\t\tswfobject.removeSWF(this._oldCanvas.id);\n\t\t\tif (this._oldCanvas && this._oldParent) {\n\t\t\t\tthis._oldParent.appendChild(this._oldCanvas);\n\t\t\t\tthis._oldParent = null;\n\t\t\t}\n\t\t\tthis._pContainer = null;\n\t\t}\n\n\t\tthis._oldCanvas = null;\n\t}\n\n\tpublic addStream(stream:string)\n\t{\n\t\tthis._cmdStream += stream;\n\t}\n\n\tpublic execute():number\n\t{\n\t\tif (ContextStage3D.logStream)\n\t\t\tconsole.log(this._cmdStream);\n\n\t\tvar result:number = this._pContainer[\"CallFunction\"](\"\" + this._cmdStream + \"\");\n\n\t\tif (Number(result) <= -3)\n\t\t\tthrow \"Exec stream failed\";\n\n\t\tthis._cmdStream = \"\";\n\n\t\treturn Number(result);\n\t}\n}\n\nexport = ContextStage3D;\n\n/**\n* global function for flash callback\n*/\nfunction mountain_js_context_available(id, driverInfo)\n{\n\tvar ctx:ContextStage3D = ContextStage3D.contexts[id];\n\tif (ctx._iCallback) {\n\t\tctx._iDriverInfo = driverInfo;\n\t\t// get out of the current JS stack frame and call back from flash player\n\t\tvar timeOutId = window.setTimeout(function ()\n\t\t{\n\t\t\twindow.clearTimeout(timeOutId);\n\t\t\ttry {\n\t\t\t\tctx._iCallback(ctx);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"Callback failed during flash initialization with '\" + e.toString() + \"'\");\n\t\t\t}\n\t\t}, 1);\n\t}\n}\n", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLClearMask\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLTriangleFace\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport CubeTextureWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport IndexBufferWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL\");\nimport ProgramWebGL\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ProgramWebGL\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL\");\nimport TextureWebGL\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/TextureWebGL\");\nimport SamplerState\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/SamplerState\");\nimport VertexBufferWebGL\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL\");\n\nclass ContextWebGL extends ContextGLBase implements IContextStageGL\n{\n\tprivate _blendFactorDictionary:Object = new Object();\n\tprivate _depthTestDictionary:Object = new Object();\n\tprivate _textureIndexDictionary:Array = new Array(8);\n\tprivate _textureTypeDictionary:Object = new Object();\n\tprivate _wrapDictionary:Object = new Object();\n\tprivate _filterDictionary:Object = new Object();\n\tprivate _mipmapFilterDictionary:Object = new Object();\n\tprivate _uniformLocationNameDictionary:Object = new Object();\n\tprivate _vertexBufferDimensionDictionary:Object = new Object();\n\n\tprivate _drawing:boolean;\n\tprivate _blendEnabled:boolean;\n\tprivate _blendSourceFactor:number;\n\tprivate _blendDestinationFactor:number;\n\n\tprivate _indexBufferList:Array = new Array();\n\tprivate _vertexBufferList:Array = new Array();\n\tprivate _textureList:Array = new Array();\n\tprivate _programList:Array = new Array();\n\n\tprivate _samplerStates:Array = new Array(8);\n\n\tpublic static MAX_SAMPLERS:number = 8;\n\n\t//@protected\n\tpublic _gl:WebGLRenderingContext;\n\n\t//@protected\n\tpublic _currentProgram:ProgramWebGL;\n\tprivate _activeTexture:number;\n\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tconstructor(canvas:HTMLCanvasElement, stageIndex:number)\n\t{\n\t\tsuper(stageIndex);\n\n\t\tthis._pContainer = canvas;\n\n\t\ttry {\n\t\t\tthis._gl = canvas.getContext(\"experimental-webgl\", { premultipliedAlpha:false, alpha:false });\n\n\t\t\tif (!this._gl)\n\t\t\t\tthis._gl = canvas.getContext(\"webgl\", { premultipliedAlpha:false, alpha:false });\n\t\t} catch (e) {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) );\n\t\t}\n\n\t\tif (this._gl) {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) );\n\t\t\t//setup shortcut dictionaries\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO;\n\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL;\n\n\t\t\tthis._textureIndexDictionary[0] = this._gl.TEXTURE0;\n\t\t\tthis._textureIndexDictionary[1] = this._gl.TEXTURE1;\n\t\t\tthis._textureIndexDictionary[2] = this._gl.TEXTURE2;\n\t\t\tthis._textureIndexDictionary[3] = this._gl.TEXTURE3;\n\t\t\tthis._textureIndexDictionary[4] = this._gl.TEXTURE4;\n\t\t\tthis._textureIndexDictionary[5] = this._gl.TEXTURE5;\n\t\t\tthis._textureIndexDictionary[6] = this._gl.TEXTURE6;\n\t\t\tthis._textureIndexDictionary[7] = this._gl.TEXTURE7;\n\n\t\t\tthis._textureTypeDictionary[\"texture2d\"] = this._gl.TEXTURE_2D;\n\t\t\tthis._textureTypeDictionary[\"textureCube\"] = this._gl.TEXTURE_CUBE_MAP;\n\n\t\t\tthis._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT;\n\t\t\tthis._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE;\n\n\t\t\tthis._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR;\n\t\t\tthis._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST;\n\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object();\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object();\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST;\n\n\t\t\tthis._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = \"vc\";\n\t\t\tthis._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = \"fc\";\n\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4;\n\t\t} else {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) );\n\t\t\talert(\"WebGL is not available.\");\n\t\t}\n\n\t\t//defaults\n\t\tfor (var i:number = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) {\n\t\t\tthis._samplerStates[i] = new SamplerState();\n\t\t\tthis._samplerStates[i].wrap = this._gl.REPEAT;\n\t\t\tthis._samplerStates[i].filter = this._gl.LINEAR;\n\t\t\tthis._samplerStates[i].mipfilter = this._gl.LINEAR;\n\t\t}\n\t}\n\n\tpublic gl():WebGLRenderingContext\n\t{\n\t\treturn this._gl;\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\t\tif (!this._drawing) {\n\t\t\tthis.updateBlendStatus();\n\t\t\tthis._drawing = true;\n\t\t}\n\n\t\tvar glmask:number = 0;\n\t\tif (mask & ContextGLClearMask.COLOR) glmask |= this._gl.COLOR_BUFFER_BIT;\n\t\tif (mask & ContextGLClearMask.STENCIL) glmask |= this._gl.STENCIL_BUFFER_BIT;\n\t\tif (mask & ContextGLClearMask.DEPTH) glmask |= this._gl.DEPTH_BUFFER_BIT;\n\n\t\tthis._gl.clearColor(red, green, blue, alpha);\n\t\tthis._gl.clearDepth(depth);\n\t\tthis._gl.clearStencil(stencil);\n\t\tthis._gl.clear(glmask);\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tsuper.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil);\n\n\t\tif (enableDepthAndStencil) {\n\t\t\tthis._gl.enable(this._gl.STENCIL_TEST);\n\t\t\tthis._gl.enable(this._gl.DEPTH_TEST);\n\t\t}\n\n\t\tthis._gl.viewport['width'] = width;\n\t\tthis._gl.viewport['height'] = height;\n\n\t\tthis._gl.viewport(0, 0, width, height);\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):CubeTextureWebGL\n\t{\n\t\tvar texture:CubeTextureWebGL = new CubeTextureWebGL(this._gl, size);\n\t\tthis._textureList.push(texture);\n\t\treturn texture;\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IndexBufferWebGL\n\t{\n\t\tvar indexBuffer:IndexBufferWebGL = new IndexBufferWebGL(this._gl, numIndices);\n\t\tthis._indexBufferList.push(indexBuffer);\n\t\treturn indexBuffer;\n\t}\n\n\tpublic createProgram():ProgramWebGL\n\t{\n\t\tvar program:ProgramWebGL = new ProgramWebGL(this._gl);\n\t\tthis._programList.push(program);\n\t\treturn program;\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):TextureWebGL\n\t{\n\t\t//TODO streaming\n\t\tvar texture:TextureWebGL = new TextureWebGL(this._gl, width, height);\n\t\tthis._textureList.push(texture);\n\t\treturn texture;\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):VertexBufferWebGL\n\t{\n\t\tvar vertexBuffer:VertexBufferWebGL = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex);\n\t\tthis._vertexBufferList.push(vertexBuffer);\n\t\treturn vertexBuffer;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tvar i:number;\n\t\tfor (i = 0; i < this._indexBufferList.length; ++i)\n\t\t\tthis._indexBufferList[i].dispose();\n\n\t\tthis._indexBufferList = null;\n\n\t\tfor (i = 0; i < this._vertexBufferList.length; ++i)\n\t\t\tthis._vertexBufferList[i].dispose();\n\n\t\tthis._vertexBufferList = null;\n\n\t\tfor (i = 0; i < this._textureList.length; ++i)\n\t\t\tthis._textureList[i].dispose();\n\n\t\tthis._textureList = null;\n\n\t\tfor (i = 0; i < this._programList.length; ++i)\n\t\t\tthis._programList[i].dispose();\n\n\t\tfor (i = 0; i < this._samplerStates.length; ++i)\n\t\t\tthis._samplerStates[i] = null;\n\n\t\tthis._programList = null;\n\t}\n\n\tpublic drawToBitmapData(destination:BitmapData)\n\t{\n\t\tvar arrayBuffer:ArrayBuffer = new ArrayBuffer(destination.width*destination.height*4);\n\n\t\tthis._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer));\n\n\t\tvar byteArray:ByteArray = new ByteArray();\n\t\tbyteArray.setArrayBuffer(arrayBuffer);\n\n\t\tdestination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray);\n\t}\n\n\tpublic drawTriangles(indexBuffer:IndexBufferWebGL, firstIndex:number = 0, numTriangles:number = -1)\n\t{\n\t\tif (!this._drawing)\n\t\t\tthrow \"Need to clear before drawing if the buffer has not been cleared since the last present() call.\";\n\n\t\tthis._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer);\n\t\tthis._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1)? indexBuffer.numIndices : numTriangles*3, this._gl.UNSIGNED_SHORT, firstIndex);\n\t}\n\n\tpublic present()\n\t{\n\t\tthis._drawing = false;\n\t}\n\n\tpublic setBlendFactors(sourceFactor:string, destinationFactor:string)\n\t{\n\t\tthis._blendEnabled = true;\n\n\t\tthis._blendSourceFactor = this._blendFactorDictionary[sourceFactor];\n\n\t\tthis._blendDestinationFactor = this._blendFactorDictionary[destinationFactor];\n\n\t\tthis.updateBlendStatus();\n\t}\n\n\tpublic setColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean)\n\t{\n\t\tthis._gl.colorMask(red, green, blue, alpha);\n\t}\n\n\tpublic setCulling(triangleFaceToCull:string, coordinateSystem:string = \"leftHanded\")\n\t{\n\t\tif (triangleFaceToCull == ContextGLTriangleFace.NONE) {\n\t\t\tthis._gl.disable(this._gl.CULL_FACE);\n\t\t} else {\n\t\t\tthis._gl.enable(this._gl.CULL_FACE);\n\t\t\tswitch (triangleFaceToCull) {\n\t\t\t\tcase ContextGLTriangleFace.BACK:\n\t\t\t\t\tthis._gl.cullFace((coordinateSystem == \"leftHanded\")? this._gl.FRONT : this._gl.BACK);\n\t\t\t\t\tbreak\n\t\t\t\tcase ContextGLTriangleFace.FRONT:\n\t\t\t\t\tthis._gl.cullFace((coordinateSystem == \"leftHanded\")? this._gl.BACK : this._gl.FRONT);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ContextGLTriangleFace.FRONT_AND_BACK:\n\t\t\t\t\tthis._gl.cullFace(this._gl.FRONT_AND_BACK);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Unknown ContextGLTriangleFace type.\"; // TODO error\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO ContextGLCompareMode\n\tpublic setDepthTest(depthMask:boolean, passCompareMode:string)\n\t{\n\t\tthis._gl.depthFunc(this._depthTestDictionary[passCompareMode]);\n\n\t\tthis._gl.depthMask(depthMask);\n\t}\n\n\tpublic setProgram(program:ProgramWebGL)\n\t{\n\t\t//TODO decide on construction/reference resposibilities\n\t\tthis._currentProgram = program;\n\t\tprogram.focusProgram();\n\t}\n\n\tpublic setProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix:boolean = false)\n\t{\n\t\t//this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData));\n\n\t\t//TODO remove special case for WebGL matrix calls?\n\t\tvar d:number[] = matrix.rawData;\n\t\tif (transposedMatrix) {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[4], d[8], d[12] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[1], d[5], d[9], d[13] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[2], d[6], d[10], d[14] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[3], d[7], d[11], d[15] ], 1);\n\t\t} else {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[1], d[2], d[3] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[4], d[5], d[6], d[7] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[8], d[9], d[10], d[11] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[12], d[13], d[14], d[15] ], 1);\n\t\t}\n\t}\n\n\tpublic static modulo:number = 0;\n\n\tpublic setProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters:number = -1)\n\t{\n\t\tvar locationName:string = this._uniformLocationNameDictionary[programType];\n\t\tvar startIndex:number;\n\t\tfor (var i:number = 0; i < numRegisters; i++) {\n\t\t\tstartIndex = i*4;\n\t\t\tthis._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]);\n\t\t}\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\t\tif (!rectangle) {\n\t\t\tthis._gl.disable(this._gl.SCISSOR_TEST);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.enable(this._gl.SCISSOR_TEST);\n\t\tthis._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n\t}\n\n\tpublic setTextureAt(sampler:number, texture:TextureBaseWebGL)\n\t{\n\t\tvar samplerState:SamplerState = this._samplerStates[sampler];\n\n\t\tif (this._activeTexture != sampler && (texture || samplerState.type)) {\n\t\t\tthis._activeTexture = sampler;\n\t\t\tthis._gl.activeTexture(this._textureIndexDictionary[sampler]);\n\t\t}\n\n\t\tif (!texture) {\n\t\t\tif (samplerState.type) {\n\t\t\t\tthis._gl.bindTexture(samplerState.type, null);\n\t\t\t\tsamplerState.type = null;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar textureType:number = this._textureTypeDictionary[texture.textureType];\n\t\tsamplerState.type = textureType;\n\n\t\tthis._gl.bindTexture(textureType, texture.glTexture);\n\n\t\tthis._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, \"fs\" + sampler), sampler);\n\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap);\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap);\n\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter);\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter);\n\t}\n\n\tpublic setSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string):void\n\t{\n\t\tif (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) {\n\t\t\tthis._samplerStates[sampler].wrap = this._wrapDictionary[wrap];\n\t\t\tthis._samplerStates[sampler].filter = this._filterDictionary[filter];\n\t\t\tthis._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter];\n\t\t} else {\n\t\t\tthrow \"Sampler is out of bounds.\";\n\t\t}\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:VertexBufferWebGL, bufferOffset:number = 0, format:string = null)\n\t{\n\t\tvar location:number = this._currentProgram? this._gl.getAttribLocation(this._currentProgram.glProgram, \"va\" + index) : -1;\n\n\t\tif (!buffer) {\n\t\t\tif (location > -1)\n\t\t\t\tthis._gl.disableVertexAttribArray(location);\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer);\n\t\tthis._gl.enableVertexAttribArray(location);\n\t\tthis._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex*4, bufferOffset*4);\n\t}\n\n\tpublic setRenderToTexture(target:TextureBaseWebGL, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\t\tvar texture:TextureWebGL = target;\n\t\tvar frameBuffer:WebGLFramebuffer = texture.frameBuffer;\n\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer);\n\n\t\tif (enableDepthAndStencil) {\n\t\t\tthis._gl.enable(this._gl.STENCIL_TEST);\n\t\t\tthis._gl.enable(this._gl.DEPTH_TEST);\n\t\t}\n\n\t\tthis._gl.viewport(0, 0, texture.width, texture.height );\n\t}\n\n\tpublic setRenderToBackBuffer()\n\t{\n\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n\t}\n\n\tprivate updateBlendStatus()\n\t{\n\t\tif (this._blendEnabled) {\n\t\t\tthis._gl.enable(this._gl.BLEND);\n\t\t\tthis._gl.blendEquation(this._gl.FUNC_ADD);\n\t\t\tthis._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor);\n\t\t} else {\n\t\t\tthis._gl.disable(this._gl.BLEND);\n\t\t}\n\t}\n}\n\nexport = ContextWebGL;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\nimport ByteArrayBase\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArrayBase\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ICubeTexture\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\n\nclass CubeTextureFlash extends ResourceBaseFlash implements ICubeTexture\n{\n\tprivate _context:ContextStage3D;\n\tprivate _size:number;\n\n\tpublic get size():number\n\t{\n\t\treturn this._size;\n\t}\n\n\tconstructor(context:ContextStage3D, size:number, format:string, forRTT:boolean, streaming:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._size = size;\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initCubeTexture, (forRTT? OpCodes.trueValue : OpCodes.falseValue)) + size + \",\" + streaming + \",\" + format + \"$\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeCubeTexture) + this._pId.toString() + \",\");\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\tpublic uploadFromData(data:any, side:number, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData) {\n\t\t\tdata = ( data).imageData.data;\n\t\t} else if (data instanceof HTMLImageElement) {\n\t\t\tvar can = document.createElement(\"canvas\");\n\t\t\tvar w = data.width;\n\t\t\tvar h = data.height;\n\t\t\tcan.width = w;\n\t\t\tcan.height = h;\n\t\t\tvar ctx = can.getContext(\"2d\");\n\t\t\tctx.drawImage(data, 0, 0);\n\t\t\tdata = ctx.getImageData(0, 0, w, h).data;\n\t\t}\n\n\t\tvar pos = 0;\n\t\tvar bytes = ByteArrayBase.internalGetBase64String(data.length, function () {\n\t\t\treturn data[pos++];\n\t\t}, null);\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadBytesCubeTexture) + this._pId + \",\" + miplevel + \",\" + side + \",\" + (this.size >> miplevel) + \",\" + bytes + \"%\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\n\t}\n}\n\nexport = CubeTextureFlash;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ICubeTexture\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL\");\n\nclass CubeTextureWebGL extends TextureBaseWebGL implements ICubeTexture\n{\n\n\tprivate _textureSelectorDictionary:Array = new Array(6);\n\n\tpublic textureType:string = \"textureCube\";\n\tprivate _texture:WebGLTexture;\n\tprivate _size:number;\n\n\tconstructor(gl:WebGLRenderingContext, size:number)\n\t{\n\t\tsuper(gl);\n\t\tthis._size = size;\n\t\tthis._texture = this._gl.createTexture();\n\n\t\tthis._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X;\n\t\tthis._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\t\tthis._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\t\tthis._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\t\tthis._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\t\tthis._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteTexture(this._texture);\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\tpublic uploadFromData(data:any, side:number, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData)\n\t\t\tdata = ( data).imageData;\n\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture);\n\t\tthis._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data);\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null);\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\n\t}\n\n\tpublic get size():number\n\t{\n\t\treturn this._size;\n\t}\n\n\tpublic get glTexture():WebGLTexture\n\t{\n\t\treturn this._texture;\n\t}\n}\n\nexport = CubeTextureWebGL;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport IContext\t\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/IndexData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/VertexData\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ICubeTexture\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITextureBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\n\ninterface IContextStageGL extends IContext\n{\n\tsetRenderTarget(target:TextureProxyBase, enableDepthAndStencil?:boolean, surfaceSelector?:number);\n\n\tgetRenderTexture(textureProxy:RenderTexture):ITextureBase;\n\n\tactivateBuffer(index:number, buffer:VertexData, offset:number, format:string);\n\n\tdisposeVertexData(buffer:VertexData);\n\n\tactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage, camera:Camera);\n\n\tactivateRenderTexture(index:number, textureProxy:RenderTexture);\n\n\tactivateTexture(index:number, textureProxy:Texture2DBase);\n\n\tactivateCubeTexture(index:number, textureProxy:CubeTextureBase);\n\n\tgetIndexBuffer(buffer:IndexData):IIndexBuffer;\n\n\tgetMaterial(material:MaterialBase, profile:string):MaterialData;\n\n\tdisposeIndexData(buffer:IndexData);\n\n\tclear(red?:number, green?:number, blue?:number, alpha?:number, depth?:number, stencil?:number, mask?:number);\n\n\tconfigureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil?:boolean);\n\n\tcreateCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels?:number):ICubeTexture;\n\n\tcreateIndexBuffer(numIndices:number):IIndexBuffer;\n\n\tcreateProgram():IProgram;\n\n\tcreateTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels?:number):ITexture;\n\n\tcreateVertexBuffer(numVertices:number, data32PerVertex:number):IVertexBuffer;\n\n\tdeactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage);\n\n\tdispose();\n\n\tdrawToBitmapData(destination:BitmapData);\n\n\tdrawTriangles(indexBuffer:IIndexBuffer, firstIndex?:number, numTriangles?:number);\n\n\tpresent();\n\n\tsetBlendFactors(sourceFactor:string, destinationFactor:string);\n\n\tsetColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean);\n\n\tsetCulling(triangleFaceToCull:string, coordinateSystem?:string);\n\n\tsetDepthTest(depthMask:boolean, passCompareMode:string);\n\n\tsetProgram(program:IProgram);\n\n\tsetProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix?:boolean);\n\n\tsetProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters?:number);\n\n\tsetSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string);\n\n\tsetScissorRectangle(rectangle:Rectangle);\n\n\tsetTextureAt(sampler:number, texture:ITextureBase);\n\n\tsetVertexBufferAt(index:number, buffer:IVertexBuffer, bufferOffset?:number, format?:string);\n\n\tsetRenderToTexture(target:ITextureBase, enableDepthAndStencil?:boolean, antiAlias?:number, surfaceSelector?:number);\n\n\tsetRenderToBackBuffer();\n\n\tcalcAnimationCode(material:MaterialBase, materialPassData:MaterialPassData);\n}\n\nexport = IContextStageGL;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITextureBase\");\n\ninterface ICubeTexture extends ITextureBase\n{\n\tsize:number;\n\n\tuploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tuploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\n\tuploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number, async:boolean);\n}\n\nexport = ICubeTexture;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\n\nimport swfobject\t\t\t\t\t= require(\"awayjs-stagegl/lib/swfobject\");\nimport Sampler\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/Sampler\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLClearMask\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport CubeTextureFlash\t\t\t\t= require(\"awayjs-stagegl/lib/base/CubeTextureFlash\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport IndexBufferFlash\t\t\t\t= require(\"awayjs-stagegl/lib/base/IndexBufferFlash\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ProgramFlash\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ProgramFlash\");\nimport TextureFlash\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/TextureFlash\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\nimport VertexBufferFlash\t\t\t= require(\"awayjs-stagegl/lib/base/VertexBufferFlash\");\n\nclass ContextStage3D extends ContextGLBase implements IContextStageGL\n{\n\tpublic static contexts:Object = new Object();\n\tpublic static maxvertexconstants:number = 128;\n\tpublic static maxfragconstants:number = 28;\n\tpublic static maxtemp:number = 8;\n\tpublic static maxstreams:number = 8;\n\tpublic static maxtextures:number = 8;\n\tpublic static defaultsampler = new Sampler();\n\n\tpublic _iDriverInfo;\n\n\tprivate _cmdStream:string = \"\";\n\tprivate _errorCheckingEnabled:boolean;\n\tprivate _resources:Array;\n\tprivate _oldCanvas:HTMLCanvasElement;\n\tprivate _oldParent:HTMLElement;\n\n\n\tpublic static debug:boolean = false;\n\tpublic static logStream:boolean = false;\n\n\tpublic _iCallback:(context:IContextStageGL) => void;\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tpublic get driverInfo()\n\t{\n\t\treturn this._iDriverInfo;\n\t}\n\n\tpublic get errorCheckingEnabled():boolean\n\t{\n\t\treturn this._errorCheckingEnabled;\n\t}\n\n\tpublic set errorCheckingEnabled(value:boolean)\n\t{\n\t\tif (this._errorCheckingEnabled == value)\n\t\t\treturn;\n\n\t\tthis._errorCheckingEnabled = value;\n\n\t\tthis.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value? OpCodes.trueValue : OpCodes.falseValue));\n\t\tthis.execute();\n\t}\n\n\t//TODO: get rid of hack that fixes including definition file\n\tconstructor(container:HTMLCanvasElement, stageIndex:number, callback:(context:IContextStageGL) => void, include?:Sampler)\n\t{\n\t\tsuper(stageIndex);\n\n\t\tthis._resources = new Array();\n\n\t\tvar swfVersionStr = \"11.0.0\";\n\n\t\t// To use express install, set to playerProductInstall.swf, otherwise the empty string.\n\t\tvar flashvars = {\n\t\t\tid:container.id\n\t\t};\n\n\t\tvar params = {\n\t\t\tquality:\"high\",\n\t\t\tbgcolor:\"#ffffff\",\n\t\t\tallowscriptaccess:\"sameDomain\",\n\t\t\tallowfullscreen:\"true\",\n\t\t\twmode:\"direct\"\n\t\t};\n\n\t\tthis._errorCheckingEnabled = false;\n\t\tthis._iDriverInfo = \"Unknown\";\n\n\t\tvar attributes = {\n\t\t\tsalign:\"tl\",\n\t\t\tid:container.id,\n\t\t\tname:container[\"name\"] //TODO: needed?\n\t\t};\n\n\t\tthis._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose\n\t\tthis._oldParent = container.parentNode;\n\n\t\tvar context3dObj = this;\n\t\tContextStage3D.contexts[container.id] = this;\n\n\t\tfunction callbackSWFObject(callbackInfo)\n\t\t{\n\t\t\tif (!callbackInfo.success)\n\t\t\t\treturn;\n\n\t\t\tcontext3dObj._pContainer = callbackInfo.ref;\n\t\t\tcontext3dObj._iCallback = callback;\n\t\t}\n\n\t\tswfobject.embedSWF(\"libs/molehill_js_flashbridge.swf\", container.id, String(container.width), String(container.height), swfVersionStr, \"\", flashvars, params, attributes, callbackSWFObject);\n\t}\n\n\tpublic _iAddResource(resource:ResourceBaseFlash)\n\t{\n\t\tthis._resources.push(resource);\n\t}\n\n\tpublic _iRemoveResource(resource:ResourceBaseFlash)\n\t{\n\t\tthis._resources.splice(this._resources.indexOf(resource));\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):TextureFlash\n\t{\n\t\t//TODO:streaming\n\t\treturn new TextureFlash(this, width, height, format, optimizeForRenderToTexture);\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):CubeTextureFlash\n\t{\n\t\t//TODO:streaming\n\t\treturn new CubeTextureFlash(this, size, format, optimizeForRenderToTexture);\n\t}\n\n\n\tpublic setTextureAt(sampler:number, texture:ResourceBaseFlash)\n\t{\n\t\tif (texture) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + \",\" + texture.id + \",\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + \",\");\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string):void\n\t{\n\t\t//nothing to do here\n\t}\n\n\tpublic setStencilActions(triangleFace:string = \"frontAndBack\", compareMode:string = \"always\", actionOnBothPass:string = \"keep\", actionOnDepthFail:string = \"keep\", actionOnDepthPassStencilFail:string = \"keep\")\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + \"$\" + compareMode + \"$\" + actionOnBothPass + \"$\" + actionOnDepthFail + \"$\" + actionOnDepthPassStencilFail + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setStencilReferenceValue(referenceValue:number, readMask:number = 255, writeMask:number = 255)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setCulling(triangleFaceToCull:string, coordinateSystem:string = \"leftHanded\")\n\t{\n\t\t//TODO implement coordinateSystem option\n\t\tthis.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic drawTriangles(indexBuffer:IndexBufferFlash, firstIndex:number = 0, numTriangles:number = -1)\n\t{\n\t\tfirstIndex = firstIndex || 0;\n\t\tif (!numTriangles || numTriangles < 0)\n\t\t\tnumTriangles = indexBuffer.numIndices/3;\n\n\t\tthis.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + \",\" + numTriangles + \",\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix:boolean = false)\n\t{\n\t\t//this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData));\n\n\t\t//TODO remove special case for WebGL matrix calls?\n\t\tvar d:number[] = matrix.rawData;\n\t\tif (transposedMatrix) {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[4], d[8], d[12] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[1], d[5], d[9], d[13] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[2], d[6], d[10], d[14] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[3], d[7], d[11], d[15] ], 1);\n\t\t} else {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[1], d[2], d[3] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[4], d[5], d[6], d[7] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[8], d[9], d[10], d[11] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[12], d[13], d[14], d[15] ], 1);\n\t\t}\n\t}\n\n\tpublic setProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters:number = -1)\n\t{\n\t\tvar startIndex:number;\n\t\tvar target:number = (programType == ContextGLProgramType.VERTEX)? OpCodes.trueValue : OpCodes.falseValue;\n\t\tfor (var i:number = 0; i < numRegisters; i++) {\n\t\t\tstartIndex = i*4;\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + \",\" + data[startIndex + 1] + \",\" + data[startIndex + 2] + \",\" + data[startIndex + 3] + \",\");\n\n\t\t\tif (ContextStage3D.debug)\n\t\t\t\tthis.execute();\n\t\t}\n\t}\n\n\tpublic setProgram(program:ProgramFlash)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic present()\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.present));\n\t\tthis.execute();\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.clear) + red + \",\" + green + \",\" + blue + \",\" + alpha + \",\" + depth + \",\" + stencil + \",\" + mask + \",\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic createProgram():ProgramFlash\n\t{\n\t\treturn new ProgramFlash(this);\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):VertexBufferFlash\n\t{\n\t\treturn new VertexBufferFlash(this, numVertices, data32PerVertex);\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IndexBufferFlash\n\t{\n\t\treturn new IndexBufferFlash(this, numIndices);\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tsuper.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil);\n\n\t\t//TODO: add Anitalias setting\n\t\tthis.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + \",\" + height + \",\");\n\t}\n\n\tpublic drawToBitmapData(destination:BitmapData)\n\t{\n\t\t//TODO\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:VertexBufferFlash, bufferOffset:number = 0, format:string = null)\n\t{\n\t\tif (buffer) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + \",\" + bufferOffset + \",\" + format + \"$\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask));\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setColorMask, red? OpCodes.trueValue : OpCodes.falseValue, green? OpCodes.trueValue : OpCodes.falseValue, blue? OpCodes.trueValue : OpCodes.falseValue, alpha? OpCodes.trueValue : OpCodes.falseValue));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setBlendFactors(sourceFactor:string, destinationFactor:string)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + \"$\" + destinationFactor + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setRenderToTexture(target:ResourceBaseFlash, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\t\tif (target === null || target === undefined) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearRenderToTexture));\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil? OpCodes.trueValue : OpCodes.falseValue) + target.id + \",\" + (antiAlias || 0) + \",\");\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\n\tpublic setRenderToBackBuffer()\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.clearRenderToTexture));\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\t\tif (rectangle) {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + \",\" + rectangle.y + \",\" + rectangle.width + \",\" + rectangle.height + \",\");\n\t\t} else {\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.clearScissorRect));\n\t\t}\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic setDepthTest(depthMask:boolean, passCompareMode:string)\n\t{\n\t\tthis.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + \"$\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis.execute();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (this._pContainer == null)\n\t\t\treturn;\n\n\t\tconsole.log(\"Context3D dispose, releasing \" + this._resources.length + \" resources.\");\n\n\t\twhile (this._resources.length)\n\t\t\tthis._resources[0].dispose();\n\n\t\tif (this._pContainer) {\n\t\t\t// encode command\n\t\t\tthis.addStream(String.fromCharCode(OpCodes.disposeContext));\n\t\t\tthis.execute();\n\t\t\tswfobject.removeSWF(this._oldCanvas.id);\n\t\t\tif (this._oldCanvas && this._oldParent) {\n\t\t\t\tthis._oldParent.appendChild(this._oldCanvas);\n\t\t\t\tthis._oldParent = null;\n\t\t\t}\n\t\t\tthis._pContainer = null;\n\t\t}\n\n\t\tthis._oldCanvas = null;\n\t}\n\n\tpublic addStream(stream:string)\n\t{\n\t\tthis._cmdStream += stream;\n\t}\n\n\tpublic execute():number\n\t{\n\t\tif (ContextStage3D.logStream)\n\t\t\tconsole.log(this._cmdStream);\n\n\t\tvar result:number = this._pContainer[\"CallFunction\"](\"\" + this._cmdStream + \"\");\n\n\t\tif (Number(result) <= -3)\n\t\t\tthrow \"Exec stream failed\";\n\n\t\tthis._cmdStream = \"\";\n\n\t\treturn Number(result);\n\t}\n}\n\nexport = ContextStage3D;\n\n/**\n* global function for flash callback\n*/\nfunction mountain_js_context_available(id, driverInfo)\n{\n\tvar ctx:ContextStage3D = ContextStage3D.contexts[id];\n\tif (ctx._iCallback) {\n\t\tctx._iDriverInfo = driverInfo;\n\t\t// get out of the current JS stack frame and call back from flash player\n\t\tvar timeOutId = window.setTimeout(function ()\n\t\t{\n\t\t\twindow.clearTimeout(timeOutId);\n\t\t\ttry {\n\t\t\t\tctx._iCallback(ctx);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"Callback failed during flash initialization with '\" + e.toString() + \"'\");\n\t\t\t}\n\t\t}, 1);\n\t}\n}\n", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBlendFactor\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLClearMask\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLTriangleFace\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTriangleFace\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport CubeTextureWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/CubeTextureWebGL\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport IndexBufferWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IndexBufferWebGL\");\nimport ProgramWebGL\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ProgramWebGL\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/TextureBaseWebGL\");\nimport TextureWebGL\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/TextureWebGL\");\nimport SamplerState\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/SamplerState\");\nimport VertexBufferWebGL\t\t\t= require(\"awayjs-stagegl/lib/base/VertexBufferWebGL\");\n\nclass ContextWebGL extends ContextGLBase implements IContextStageGL\n{\n\tprivate _blendFactorDictionary:Object = new Object();\n\tprivate _depthTestDictionary:Object = new Object();\n\tprivate _textureIndexDictionary:Array = new Array(8);\n\tprivate _textureTypeDictionary:Object = new Object();\n\tprivate _wrapDictionary:Object = new Object();\n\tprivate _filterDictionary:Object = new Object();\n\tprivate _mipmapFilterDictionary:Object = new Object();\n\tprivate _uniformLocationNameDictionary:Object = new Object();\n\tprivate _vertexBufferDimensionDictionary:Object = new Object();\n\n\tprivate _drawing:boolean;\n\tprivate _blendEnabled:boolean;\n\tprivate _blendSourceFactor:number;\n\tprivate _blendDestinationFactor:number;\n\n\tprivate _indexBufferList:Array = new Array();\n\tprivate _vertexBufferList:Array = new Array();\n\tprivate _textureList:Array = new Array();\n\tprivate _programList:Array = new Array();\n\n\tprivate _samplerStates:Array = new Array(8);\n\n\tpublic static MAX_SAMPLERS:number = 8;\n\n\t//@protected\n\tpublic _gl:WebGLRenderingContext;\n\n\t//@protected\n\tpublic _currentProgram:ProgramWebGL;\n\tprivate _activeTexture:number;\n\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._pContainer;\n\t}\n\n\tconstructor(canvas:HTMLCanvasElement, stageIndex:number)\n\t{\n\t\tsuper(stageIndex);\n\n\t\tthis._pContainer = canvas;\n\n\t\ttry {\n\t\t\tthis._gl = canvas.getContext(\"experimental-webgl\", { premultipliedAlpha:false, alpha:false });\n\n\t\t\tif (!this._gl)\n\t\t\t\tthis._gl = canvas.getContext(\"webgl\", { premultipliedAlpha:false, alpha:false });\n\t\t} catch (e) {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) );\n\t\t}\n\n\t\tif (this._gl) {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) );\n\t\t\t//setup shortcut dictionaries\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR;\n\t\t\tthis._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO;\n\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER;\n\t\t\tthis._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL;\n\n\t\t\tthis._textureIndexDictionary[0] = this._gl.TEXTURE0;\n\t\t\tthis._textureIndexDictionary[1] = this._gl.TEXTURE1;\n\t\t\tthis._textureIndexDictionary[2] = this._gl.TEXTURE2;\n\t\t\tthis._textureIndexDictionary[3] = this._gl.TEXTURE3;\n\t\t\tthis._textureIndexDictionary[4] = this._gl.TEXTURE4;\n\t\t\tthis._textureIndexDictionary[5] = this._gl.TEXTURE5;\n\t\t\tthis._textureIndexDictionary[6] = this._gl.TEXTURE6;\n\t\t\tthis._textureIndexDictionary[7] = this._gl.TEXTURE7;\n\n\t\t\tthis._textureTypeDictionary[\"texture2d\"] = this._gl.TEXTURE_2D;\n\t\t\tthis._textureTypeDictionary[\"textureCube\"] = this._gl.TEXTURE_CUBE_MAP;\n\n\t\t\tthis._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT;\n\t\t\tthis._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE;\n\n\t\t\tthis._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR;\n\t\t\tthis._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST;\n\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object();\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object();\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR;\n\t\t\tthis._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST;\n\n\t\t\tthis._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = \"vc\";\n\t\t\tthis._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = \"fc\";\n\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4;\n\t\t\tthis._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4;\n\t\t} else {\n\t\t\t//this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) );\n\t\t\talert(\"WebGL is not available.\");\n\t\t}\n\n\t\t//defaults\n\t\tfor (var i:number = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) {\n\t\t\tthis._samplerStates[i] = new SamplerState();\n\t\t\tthis._samplerStates[i].wrap = this._gl.REPEAT;\n\t\t\tthis._samplerStates[i].filter = this._gl.LINEAR;\n\t\t\tthis._samplerStates[i].mipfilter = this._gl.LINEAR;\n\t\t}\n\t}\n\n\tpublic gl():WebGLRenderingContext\n\t{\n\t\treturn this._gl;\n\t}\n\n\tpublic clear(red:number = 0, green:number = 0, blue:number = 0, alpha:number = 1, depth:number = 1, stencil:number = 0, mask:number = ContextGLClearMask.ALL)\n\t{\n\t\tif (!this._drawing) {\n\t\t\tthis.updateBlendStatus();\n\t\t\tthis._drawing = true;\n\t\t}\n\n\t\tvar glmask:number = 0;\n\t\tif (mask & ContextGLClearMask.COLOR) glmask |= this._gl.COLOR_BUFFER_BIT;\n\t\tif (mask & ContextGLClearMask.STENCIL) glmask |= this._gl.STENCIL_BUFFER_BIT;\n\t\tif (mask & ContextGLClearMask.DEPTH) glmask |= this._gl.DEPTH_BUFFER_BIT;\n\n\t\tthis._gl.clearColor(red, green, blue, alpha);\n\t\tthis._gl.clearDepth(depth);\n\t\tthis._gl.clearStencil(stencil);\n\t\tthis._gl.clear(glmask);\n\t}\n\n\tpublic configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil:boolean = true)\n\t{\n\t\tsuper.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil);\n\n\t\tif (enableDepthAndStencil) {\n\t\t\tthis._gl.enable(this._gl.STENCIL_TEST);\n\t\t\tthis._gl.enable(this._gl.DEPTH_TEST);\n\t\t}\n\n\t\tthis._gl.viewport['width'] = width;\n\t\tthis._gl.viewport['height'] = height;\n\n\t\tthis._gl.viewport(0, 0, width, height);\n\t}\n\n\tpublic createCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):CubeTextureWebGL\n\t{\n\t\tvar texture:CubeTextureWebGL = new CubeTextureWebGL(this._gl, size);\n\t\tthis._textureList.push(texture);\n\t\treturn texture;\n\t}\n\n\tpublic createIndexBuffer(numIndices:number):IndexBufferWebGL\n\t{\n\t\tvar indexBuffer:IndexBufferWebGL = new IndexBufferWebGL(this._gl, numIndices);\n\t\tthis._indexBufferList.push(indexBuffer);\n\t\treturn indexBuffer;\n\t}\n\n\tpublic createProgram():ProgramWebGL\n\t{\n\t\tvar program:ProgramWebGL = new ProgramWebGL(this._gl);\n\t\tthis._programList.push(program);\n\t\treturn program;\n\t}\n\n\tpublic createTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels:number = 0):TextureWebGL\n\t{\n\t\t//TODO streaming\n\t\tvar texture:TextureWebGL = new TextureWebGL(this._gl, width, height);\n\t\tthis._textureList.push(texture);\n\t\treturn texture;\n\t}\n\n\tpublic createVertexBuffer(numVertices:number, data32PerVertex:number):VertexBufferWebGL\n\t{\n\t\tvar vertexBuffer:VertexBufferWebGL = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex);\n\t\tthis._vertexBufferList.push(vertexBuffer);\n\t\treturn vertexBuffer;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tvar i:number;\n\t\tfor (i = 0; i < this._indexBufferList.length; ++i)\n\t\t\tthis._indexBufferList[i].dispose();\n\n\t\tthis._indexBufferList = null;\n\n\t\tfor (i = 0; i < this._vertexBufferList.length; ++i)\n\t\t\tthis._vertexBufferList[i].dispose();\n\n\t\tthis._vertexBufferList = null;\n\n\t\tfor (i = 0; i < this._textureList.length; ++i)\n\t\t\tthis._textureList[i].dispose();\n\n\t\tthis._textureList = null;\n\n\t\tfor (i = 0; i < this._programList.length; ++i)\n\t\t\tthis._programList[i].dispose();\n\n\t\tfor (i = 0; i < this._samplerStates.length; ++i)\n\t\t\tthis._samplerStates[i] = null;\n\n\t\tthis._programList = null;\n\t}\n\n\tpublic drawToBitmapData(destination:BitmapData)\n\t{\n\t\tvar arrayBuffer:ArrayBuffer = new ArrayBuffer(destination.width*destination.height*4);\n\n\t\tthis._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer));\n\n\t\tvar byteArray:ByteArray = new ByteArray();\n\t\tbyteArray.setArrayBuffer(arrayBuffer);\n\n\t\tdestination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray);\n\t}\n\n\tpublic drawTriangles(indexBuffer:IndexBufferWebGL, firstIndex:number = 0, numTriangles:number = -1)\n\t{\n\t\tif (!this._drawing)\n\t\t\tthrow \"Need to clear before drawing if the buffer has not been cleared since the last present() call.\";\n\n\t\tthis._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer);\n\t\tthis._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1)? indexBuffer.numIndices : numTriangles*3, this._gl.UNSIGNED_SHORT, firstIndex);\n\t}\n\n\tpublic present()\n\t{\n\t\tthis._drawing = false;\n\t}\n\n\tpublic setBlendFactors(sourceFactor:string, destinationFactor:string)\n\t{\n\t\tthis._blendEnabled = true;\n\n\t\tthis._blendSourceFactor = this._blendFactorDictionary[sourceFactor];\n\n\t\tthis._blendDestinationFactor = this._blendFactorDictionary[destinationFactor];\n\n\t\tthis.updateBlendStatus();\n\t}\n\n\tpublic setColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean)\n\t{\n\t\tthis._gl.colorMask(red, green, blue, alpha);\n\t}\n\n\tpublic setCulling(triangleFaceToCull:string, coordinateSystem:string = \"leftHanded\")\n\t{\n\t\tif (triangleFaceToCull == ContextGLTriangleFace.NONE) {\n\t\t\tthis._gl.disable(this._gl.CULL_FACE);\n\t\t} else {\n\t\t\tthis._gl.enable(this._gl.CULL_FACE);\n\t\t\tswitch (triangleFaceToCull) {\n\t\t\t\tcase ContextGLTriangleFace.BACK:\n\t\t\t\t\tthis._gl.cullFace((coordinateSystem == \"leftHanded\")? this._gl.FRONT : this._gl.BACK);\n\t\t\t\t\tbreak\n\t\t\t\tcase ContextGLTriangleFace.FRONT:\n\t\t\t\t\tthis._gl.cullFace((coordinateSystem == \"leftHanded\")? this._gl.BACK : this._gl.FRONT);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ContextGLTriangleFace.FRONT_AND_BACK:\n\t\t\t\t\tthis._gl.cullFace(this._gl.FRONT_AND_BACK);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Unknown ContextGLTriangleFace type.\"; // TODO error\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO ContextGLCompareMode\n\tpublic setDepthTest(depthMask:boolean, passCompareMode:string)\n\t{\n\t\tthis._gl.depthFunc(this._depthTestDictionary[passCompareMode]);\n\n\t\tthis._gl.depthMask(depthMask);\n\t}\n\n\tpublic setProgram(program:ProgramWebGL)\n\t{\n\t\t//TODO decide on construction/reference resposibilities\n\t\tthis._currentProgram = program;\n\t\tprogram.focusProgram();\n\t}\n\n\tpublic setProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix:boolean = false)\n\t{\n\t\t//this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData));\n\n\t\t//TODO remove special case for WebGL matrix calls?\n\t\tvar d:number[] = matrix.rawData;\n\t\tif (transposedMatrix) {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[4], d[8], d[12] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[1], d[5], d[9], d[13] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[2], d[6], d[10], d[14] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[3], d[7], d[11], d[15] ], 1);\n\t\t} else {\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister, [ d[0], d[1], d[2], d[3] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 1, [ d[4], d[5], d[6], d[7] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 2, [ d[8], d[9], d[10], d[11] ], 1);\n\t\t\tthis.setProgramConstantsFromArray(programType, firstRegister + 3, [ d[12], d[13], d[14], d[15] ], 1);\n\t\t}\n\t}\n\n\tpublic static modulo:number = 0;\n\n\tpublic setProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters:number = -1)\n\t{\n\t\tvar locationName:string = this._uniformLocationNameDictionary[programType];\n\t\tvar startIndex:number;\n\t\tfor (var i:number = 0; i < numRegisters; i++) {\n\t\t\tstartIndex = i*4;\n\t\t\tthis._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]);\n\t\t}\n\t}\n\n\tpublic setScissorRectangle(rectangle:Rectangle)\n\t{\n\t\tif (!rectangle) {\n\t\t\tthis._gl.disable(this._gl.SCISSOR_TEST);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.enable(this._gl.SCISSOR_TEST);\n\t\tthis._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n\t}\n\n\tpublic setTextureAt(sampler:number, texture:TextureBaseWebGL)\n\t{\n\t\tvar samplerState:SamplerState = this._samplerStates[sampler];\n\n\t\tif (this._activeTexture != sampler && (texture || samplerState.type)) {\n\t\t\tthis._activeTexture = sampler;\n\t\t\tthis._gl.activeTexture(this._textureIndexDictionary[sampler]);\n\t\t}\n\n\t\tif (!texture) {\n\t\t\tif (samplerState.type) {\n\t\t\t\tthis._gl.bindTexture(samplerState.type, null);\n\t\t\t\tsamplerState.type = null;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar textureType:number = this._textureTypeDictionary[texture.textureType];\n\t\tsamplerState.type = textureType;\n\n\t\tthis._gl.bindTexture(textureType, texture.glTexture);\n\n\t\tthis._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, \"fs\" + sampler), sampler);\n\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap);\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap);\n\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter);\n\t\tthis._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter);\n\t}\n\n\tpublic setSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string):void\n\t{\n\t\tif (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) {\n\t\t\tthis._samplerStates[sampler].wrap = this._wrapDictionary[wrap];\n\t\t\tthis._samplerStates[sampler].filter = this._filterDictionary[filter];\n\t\t\tthis._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter];\n\t\t} else {\n\t\t\tthrow \"Sampler is out of bounds.\";\n\t\t}\n\t}\n\n\tpublic setVertexBufferAt(index:number, buffer:VertexBufferWebGL, bufferOffset:number = 0, format:string = null)\n\t{\n\t\tvar location:number = this._currentProgram? this._gl.getAttribLocation(this._currentProgram.glProgram, \"va\" + index) : -1;\n\n\t\tif (!buffer) {\n\t\t\tif (location > -1)\n\t\t\t\tthis._gl.disableVertexAttribArray(location);\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer);\n\t\tthis._gl.enableVertexAttribArray(location);\n\t\tthis._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex*4, bufferOffset*4);\n\t}\n\n\tpublic setRenderToTexture(target:TextureBaseWebGL, enableDepthAndStencil:boolean = false, antiAlias:number = 0, surfaceSelector:number = 0)\n\t{\n\t\tvar texture:TextureWebGL = target;\n\t\tvar frameBuffer:WebGLFramebuffer = texture.frameBuffer;\n\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer);\n\n\t\tif (enableDepthAndStencil) {\n\t\t\tthis._gl.enable(this._gl.STENCIL_TEST);\n\t\t\tthis._gl.enable(this._gl.DEPTH_TEST);\n\t\t}\n\n\t\tthis._gl.viewport(0, 0, texture.width, texture.height );\n\t}\n\n\tpublic setRenderToBackBuffer()\n\t{\n\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n\t}\n\n\tprivate updateBlendStatus()\n\t{\n\t\tif (this._blendEnabled) {\n\t\t\tthis._gl.enable(this._gl.BLEND);\n\t\t\tthis._gl.blendEquation(this._gl.FUNC_ADD);\n\t\t\tthis._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor);\n\t\t} else {\n\t\t\tthis._gl.disable(this._gl.BLEND);\n\t\t}\n\t}\n}\n\nexport = ContextWebGL;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\nimport ByteArrayBase\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArrayBase\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ICubeTexture\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\n\nclass CubeTextureFlash extends ResourceBaseFlash implements ICubeTexture\n{\n\tprivate _context:ContextStage3D;\n\tprivate _size:number;\n\n\tpublic get size():number\n\t{\n\t\treturn this._size;\n\t}\n\n\tconstructor(context:ContextStage3D, size:number, format:string, forRTT:boolean, streaming:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._size = size;\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initCubeTexture, (forRTT? OpCodes.trueValue : OpCodes.falseValue)) + size + \",\" + streaming + \",\" + format + \"$\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeCubeTexture) + this._pId.toString() + \",\");\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\tpublic uploadFromData(data:any, side:number, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData) {\n\t\t\tdata = ( data).imageData.data;\n\t\t} else if (data instanceof HTMLImageElement) {\n\t\t\tvar can = document.createElement(\"canvas\");\n\t\t\tvar w = data.width;\n\t\t\tvar h = data.height;\n\t\t\tcan.width = w;\n\t\t\tcan.height = h;\n\t\t\tvar ctx = can.getContext(\"2d\");\n\t\t\tctx.drawImage(data, 0, 0);\n\t\t\tdata = ctx.getImageData(0, 0, w, h).data;\n\t\t}\n\n\t\tvar pos = 0;\n\t\tvar bytes = ByteArrayBase.internalGetBase64String(data.length, function () {\n\t\t\treturn data[pos++];\n\t\t}, null);\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadBytesCubeTexture) + this._pId + \",\" + miplevel + \",\" + side + \",\" + (this.size >> miplevel) + \",\" + bytes + \"%\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\n\t}\n}\n\nexport = CubeTextureFlash;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ICubeTexture\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/TextureBaseWebGL\");\n\nclass CubeTextureWebGL extends TextureBaseWebGL implements ICubeTexture\n{\n\n\tprivate _textureSelectorDictionary:Array = new Array(6);\n\n\tpublic textureType:string = \"textureCube\";\n\tprivate _texture:WebGLTexture;\n\tprivate _size:number;\n\n\tconstructor(gl:WebGLRenderingContext, size:number)\n\t{\n\t\tsuper(gl);\n\t\tthis._size = size;\n\t\tthis._texture = this._gl.createTexture();\n\n\t\tthis._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X;\n\t\tthis._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\t\tthis._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\t\tthis._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\t\tthis._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\t\tthis._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteTexture(this._texture);\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\tpublic uploadFromData(data:any, side:number, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData)\n\t\t\tdata = ( data).imageData;\n\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture);\n\t\tthis._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data);\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null);\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\n\t}\n\n\tpublic get size():number\n\t{\n\t\treturn this._size;\n\t}\n\n\tpublic get glTexture():WebGLTexture\n\t{\n\t\treturn this._texture;\n\t}\n}\n\nexport = CubeTextureWebGL;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport IContext\t\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/VertexData\");\nimport ICubeTexture\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ICubeTexture\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITextureBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\n\ninterface IContextStageGL extends IContext\n{\n\tsetRenderTarget(target:TextureProxyBase, enableDepthAndStencil?:boolean, surfaceSelector?:number);\n\n\tgetRenderTexture(textureProxy:RenderTexture):ITextureBase;\n\n\tactivateBuffer(index:number, buffer:VertexData, offset:number, format:string);\n\n\tdisposeVertexData(buffer:VertexData);\n\n\tactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage, camera:Camera);\n\n\tactivateRenderTexture(index:number, textureProxy:RenderTexture);\n\n\tactivateTexture(index:number, textureProxy:Texture2DBase);\n\n\tactivateCubeTexture(index:number, textureProxy:CubeTextureBase);\n\n\tgetIndexBuffer(buffer:IndexData):IIndexBuffer;\n\n\tgetMaterial(material:MaterialBase, profile:string):MaterialData;\n\n\tdisposeIndexData(buffer:IndexData);\n\n\tclear(red?:number, green?:number, blue?:number, alpha?:number, depth?:number, stencil?:number, mask?:number);\n\n\tconfigureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil?:boolean);\n\n\tcreateCubeTexture(size:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels?:number):ICubeTexture;\n\n\tcreateIndexBuffer(numIndices:number):IIndexBuffer;\n\n\tcreateProgram():IProgram;\n\n\tcreateTexture(width:number, height:number, format:string, optimizeForRenderToTexture:boolean, streamingLevels?:number):ITexture;\n\n\tcreateVertexBuffer(numVertices:number, data32PerVertex:number):IVertexBuffer;\n\n\tdeactivateMaterialPass(materialPassData:MaterialPassData, stage:Stage);\n\n\tdispose();\n\n\tdrawToBitmapData(destination:BitmapData);\n\n\tdrawTriangles(indexBuffer:IIndexBuffer, firstIndex?:number, numTriangles?:number);\n\n\tpresent();\n\n\tsetBlendFactors(sourceFactor:string, destinationFactor:string);\n\n\tsetColorMask(red:boolean, green:boolean, blue:boolean, alpha:boolean);\n\n\tsetCulling(triangleFaceToCull:string, coordinateSystem?:string);\n\n\tsetDepthTest(depthMask:boolean, passCompareMode:string);\n\n\tsetProgram(program:IProgram);\n\n\tsetProgramConstantsFromMatrix(programType:string, firstRegister:number, matrix:Matrix3D, transposedMatrix?:boolean);\n\n\tsetProgramConstantsFromArray(programType:string, firstRegister:number, data:number[], numRegisters?:number);\n\n\tsetSamplerStateAt(sampler:number, wrap:string, filter:string, mipfilter:string);\n\n\tsetScissorRectangle(rectangle:Rectangle);\n\n\tsetTextureAt(sampler:number, texture:ITextureBase);\n\n\tsetVertexBufferAt(index:number, buffer:IVertexBuffer, bufferOffset?:number, format?:string);\n\n\tsetRenderToTexture(target:ITextureBase, enableDepthAndStencil?:boolean, antiAlias?:number, surfaceSelector?:number);\n\n\tsetRenderToBackBuffer();\n\n\tcalcAnimationCode(material:MaterialBase, materialPassData:MaterialPassData);\n}\n\nexport = IContextStageGL;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITextureBase\");\n\ninterface ICubeTexture extends ITextureBase\n{\n\tsize:number;\n\n\tuploadFromData(bitmapData:BitmapData, side:number, miplevel?:number);\n\tuploadFromData(image:HTMLImageElement, side:number, miplevel?:number);\n\n\tuploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number, async:boolean);\n}\n\nexport = ICubeTexture;", "interface IIndexBuffer\n{\n\tnumIndices:number;\n\n\tuploadFromArray(data:number[], startOffset:number, count:number);\n\n\tdispose();\n}\n\nexport = IIndexBuffer;", "import ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\ninterface IProgram\n{\n\tupload(vertexProgram:ByteArray, fragmentProgram:ByteArray);\n\n\tdispose();\n}\n\nexport = IProgram;", "interface ITextureBase\n{\n\tdispose();\n}\n\nexport = ITextureBase;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\n\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITextureBase\");\n\ninterface ITexture extends ITextureBase\n{\n\twidth:number;\n\n\theight:number;\n\n\tuploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tuploadFromData(image:HTMLImageElement, miplevel?:number);\n\n}\n\nexport = ITexture;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\n\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITextureBase\");\n\ninterface ITexture extends ITextureBase\n{\n\twidth:number;\n\n\theight:number;\n\n\tuploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tuploadFromData(image:HTMLImageElement, miplevel?:number);\n\n}\n\nexport = ITexture;", "interface IVertexBuffer\n{\n\tnumVertices:number;\n\n\tdata32PerVertex:number;\n\n\tuploadFromArray(data:number[], startVertex:number, numVertices:number);\n\n\tdispose();\n}\n\nexport = IVertexBuffer;", - "import ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\n\nclass IndexBufferFlash extends ResourceBaseFlash implements IIndexBuffer\n{\n\tprivate _context:ContextStage3D;\n\tprivate _numIndices:number;\n\n\tconstructor(context:ContextStage3D, numIndices:number)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._numIndices = numIndices;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initIndexBuffer, numIndices + OpCodes.intMask));\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic uploadFromArray(data:number[], startOffset:number, count:number):void\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadArrayIndexBuffer, this._pId + OpCodes.intMask) + data.join() + \"#\" + startOffset + \",\" + count + \",\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic dispose():void\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeIndexBuffer, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic get numIndices():number\n\t{\n\t\treturn this._numIndices;\n\t}\n}\n\nexport = IndexBufferFlash;", - "import IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\n\nclass IndexBufferWebGL implements IIndexBuffer\n{\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _numIndices:number;\n\tprivate _buffer:WebGLBuffer;\n\n\tconstructor(gl:WebGLRenderingContext, numIndices:number)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._buffer = this._gl.createBuffer();\n\t\tthis._numIndices = numIndices;\n\t}\n\n\tpublic uploadFromArray(data:number[], startOffset:number, count:number):void\n\t{\n\t\tthis._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer);\n\n\t\t// TODO add index offsets\n\t\tthis._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW);\n\t}\n\n\tpublic dispose():void\n\t{\n\t\tthis._gl.deleteBuffer(this._buffer);\n\t}\n\n\tpublic get numIndices():number\n\t{\n\t\treturn this._numIndices;\n\t}\n\n\tpublic get glBuffer():WebGLBuffer\n\t{\n\t\treturn this._buffer;\n\t}\n}\n\nexport = IndexBufferWebGL;", + "import ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\n\nclass IndexBufferFlash extends ResourceBaseFlash implements IIndexBuffer\n{\n\tprivate _context:ContextStage3D;\n\tprivate _numIndices:number;\n\n\tconstructor(context:ContextStage3D, numIndices:number)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._numIndices = numIndices;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initIndexBuffer, numIndices + OpCodes.intMask));\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic uploadFromArray(data:number[], startOffset:number, count:number):void\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadArrayIndexBuffer, this._pId + OpCodes.intMask) + data.join() + \"#\" + startOffset + \",\" + count + \",\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic dispose():void\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeIndexBuffer, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic get numIndices():number\n\t{\n\t\treturn this._numIndices;\n\t}\n}\n\nexport = IndexBufferFlash;", + "import IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\n\nclass IndexBufferWebGL implements IIndexBuffer\n{\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _numIndices:number;\n\tprivate _buffer:WebGLBuffer;\n\n\tconstructor(gl:WebGLRenderingContext, numIndices:number)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._buffer = this._gl.createBuffer();\n\t\tthis._numIndices = numIndices;\n\t}\n\n\tpublic uploadFromArray(data:number[], startOffset:number, count:number):void\n\t{\n\t\tthis._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer);\n\n\t\t// TODO add index offsets\n\t\tthis._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW);\n\t}\n\n\tpublic dispose():void\n\t{\n\t\tthis._gl.deleteBuffer(this._buffer);\n\t}\n\n\tpublic get numIndices():number\n\t{\n\t\treturn this._numIndices;\n\t}\n\n\tpublic get glBuffer():WebGLBuffer\n\t{\n\t\treturn this._buffer;\n\t}\n}\n\nexport = IndexBufferWebGL;", "class OpCodes\n{\n\tpublic static trueValue:number = 32;\n\tpublic static falseValue:number = 33;\n\tpublic static intMask:number = 63;\n\tpublic static drawTriangles:number = 41;\n\tpublic static setProgramConstant:number = 42;\n\tpublic static setProgram:number = 43;\n\tpublic static present:number = 44;\n\tpublic static clear:number = 45;\n\tpublic static initProgram:number = 46;\n\tpublic static initVertexBuffer:number = 47;\n\tpublic static initIndexBuffer:number = 48;\n\tpublic static configureBackBuffer:number = 49;\n\tpublic static uploadArrayIndexBuffer:number = 50;\n\tpublic static uploadArrayVertexBuffer:number = 51;\n\tpublic static uploadAGALBytesProgram:number = 52;\n\tpublic static setVertexBufferAt:number = 53;\n\tpublic static uploadBytesIndexBuffer:number = 54;\n\tpublic static uploadBytesVertexBuffer:number = 55;\n\tpublic static setColorMask:number = 56;\n\tpublic static setDepthTest:number = 57;\n\tpublic static disposeProgram:number = 58;\n\tpublic static disposeContext:number = 59;\n\t// must skip 60 '<' as it will invalidate xml being passed over the bridge\n\tpublic static disposeVertexBuffer:number = 61;\n\t// must skip 62 '>' as it will invalidate xml being passed over the bridge\n\tpublic static disposeIndexBuffer:number = 63;\n\tpublic static initTexture:number = 64;\n\tpublic static setTextureAt:number = 65;\n\tpublic static uploadBytesTexture:number = 66;\n\tpublic static disposeTexture:number = 67;\n\tpublic static setCulling:number = 68;\n\tpublic static setScissorRect:number = 69;\n\tpublic static clearScissorRect:number = 70;\n\tpublic static setBlendFactors:number = 71;\n\tpublic static setRenderToTexture:number = 72;\n\tpublic static clearTextureAt:number = 73;\n\tpublic static clearVertexBufferAt:number = 74;\n\tpublic static setStencilActions:number = 75;\n\tpublic static setStencilReferenceValue:number = 76;\n\tpublic static initCubeTexture:number = 77;\n\tpublic static disposeCubeTexture:number = 78;\n\tpublic static uploadBytesCubeTexture:number = 79;\n\tpublic static clearRenderToTexture:number = 80;\n\tpublic static enableErrorChecking:number = 81;\n}\n\nexport = OpCodes;", - "import ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\n\nclass ProgramFlash extends ResourceBaseFlash implements IProgram\n{\n\tprivate _context:ContextStage3D;\n\n\tconstructor(context:ContextStage3D)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initProgram));\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic upload(vertexProgram:ByteArray, fragmentProgram:ByteArray)\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + \"%\" + fragmentProgram.readBase64String(fragmentProgram.length) + \"%\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis._context.execute();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n}\n\nexport = ProgramFlash;", - "import ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport AGALTokenizer\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/AGALTokenizer\");\nimport AGLSLParser\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/AGLSLParser\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\n\n\nclass ProgramWebGL implements IProgram\n{\n\tprivate static _tokenizer:AGALTokenizer = new AGALTokenizer();\n\tprivate static _aglslParser:AGLSLParser = new AGLSLParser();\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _program:WebGLProgram;\n\tprivate _vertexShader:WebGLShader;\n\tprivate _fragmentShader:WebGLShader;\n\n\tconstructor(gl:WebGLRenderingContext)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._program = this._gl.createProgram();\n\t}\n\n\tpublic upload(vertexProgram:ByteArray, fragmentProgram:ByteArray)\n\t{\n\t\tvar vertexString:string = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram));\n\t\tvar fragmentString:string = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram));\n\n\t\tthis._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER);\n\t\tthis._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER);\n\n\t\tthis._gl.shaderSource(this._vertexShader, vertexString);\n\t\tthis._gl.compileShader(this._vertexShader);\n\n\t\tif (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(this._gl.getShaderInfoLog(this._vertexShader));\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.shaderSource(this._fragmentShader, fragmentString);\n\t\tthis._gl.compileShader(this._fragmentShader);\n\n\t\tif (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(this._gl.getShaderInfoLog(this._fragmentShader));\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.attachShader(this._program, this._vertexShader);\n\t\tthis._gl.attachShader(this._program, this._fragmentShader);\n\t\tthis._gl.linkProgram(this._program);\n\n\t\tif (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) {\n\t\t\tthrow new Error(this._gl.getProgramInfoLog(this._program));\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteProgram(this._program);\n\t}\n\n\tpublic focusProgram()\n\t{\n\t\tthis._gl.useProgram(this._program);\n\t}\n\n\tpublic get glProgram():WebGLProgram\n\t{\n\t\treturn this._program;\n\t}\n}\n\nexport = ProgramWebGL;", + "import ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\n\nclass ProgramFlash extends ResourceBaseFlash implements IProgram\n{\n\tprivate _context:ContextStage3D;\n\n\tconstructor(context:ContextStage3D)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initProgram));\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic upload(vertexProgram:ByteArray, fragmentProgram:ByteArray)\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + \"%\" + fragmentProgram.readBase64String(fragmentProgram.length) + \"%\");\n\n\t\tif (ContextStage3D.debug)\n\t\t\tthis._context.execute();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n}\n\nexport = ProgramFlash;", + "import ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport AGALTokenizer\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/AGALTokenizer\");\nimport AGLSLParser\t\t\t\t\t= require(\"awayjs-stagegl/lib/aglsl/AGLSLParser\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\n\n\nclass ProgramWebGL implements IProgram\n{\n\tprivate static _tokenizer:AGALTokenizer = new AGALTokenizer();\n\tprivate static _aglslParser:AGLSLParser = new AGLSLParser();\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _program:WebGLProgram;\n\tprivate _vertexShader:WebGLShader;\n\tprivate _fragmentShader:WebGLShader;\n\n\tconstructor(gl:WebGLRenderingContext)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._program = this._gl.createProgram();\n\t}\n\n\tpublic upload(vertexProgram:ByteArray, fragmentProgram:ByteArray)\n\t{\n\t\tvar vertexString:string = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram));\n\t\tvar fragmentString:string = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram));\n\n\t\tthis._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER);\n\t\tthis._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER);\n\n\t\tthis._gl.shaderSource(this._vertexShader, vertexString);\n\t\tthis._gl.compileShader(this._vertexShader);\n\n\t\tif (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(this._gl.getShaderInfoLog(this._vertexShader));\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.shaderSource(this._fragmentShader, fragmentString);\n\t\tthis._gl.compileShader(this._fragmentShader);\n\n\t\tif (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(this._gl.getShaderInfoLog(this._fragmentShader));\n\t\t\treturn;\n\t\t}\n\n\t\tthis._gl.attachShader(this._program, this._vertexShader);\n\t\tthis._gl.attachShader(this._program, this._fragmentShader);\n\t\tthis._gl.linkProgram(this._program);\n\n\t\tif (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) {\n\t\t\tthrow new Error(this._gl.getProgramInfoLog(this._program));\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteProgram(this._program);\n\t}\n\n\tpublic focusProgram()\n\t{\n\t\tthis._gl.useProgram(this._program);\n\t}\n\n\tpublic get glProgram():WebGLProgram\n\t{\n\t\treturn this._program;\n\t}\n}\n\nexport = ProgramWebGL;", "class ResourceBaseFlash\n{\n\tpublic _pId:number;\n\n\tpublic get id():number\n\t{\n\t\treturn this._pId;\n\t}\n\n\tpublic dispose()\n\t{\n\n\t}\n}\n\nexport = ResourceBaseFlash;", "class SamplerState\n{\n\tpublic type:number;\n\tpublic wrap:number;\n\tpublic filter:number;\n\tpublic mipfilter:number;\n}\n\nexport = SamplerState;", + "import Rectangle\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Event\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\nimport EventDispatcher\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport CubeTextureBase\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport RenderTexture\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport TextureProxyBase\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\nimport CSS\t\t\t\t\t\t= require(\"awayjs-core/lib/utils/CSS\");\n\nimport ContextMode\t\t\t\t= require(\"awayjs-display/lib/display/ContextMode\");\nimport IContext\t\t\t\t\t= require(\"awayjs-display/lib/display/IContext\");\nimport StageEvent\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\n\nimport StageManager\t\t\t\t= require(\"managers/StageManager\");\nimport ContextStage3D\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport ContextWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextWebGL\");\n\n/**\n * Stage provides a proxy class to handle the creation and attachment of the Context\n * (and in turn the back buffer) it uses. Stage should never be created directly,\n * but requested through StageManager.\n *\n * @see away.managers.StageManager\n *\n */\nclass Stage extends EventDispatcher\n{\n\tprivate _context:IContext;\n\tprivate _container:HTMLElement;\n\tprivate _width:number;\n\tprivate _height:number;\n\tprivate _x:number = 0;\n\tprivate _y:number = 0;\n\n\t//private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame\n\n\tprivate _stageIndex:number = -1;\n\n\tprivate _usesSoftwareRendering:boolean;\n\tprivate _profile:string;\n\tprivate _stageManager:StageManager;\n\tprivate _antiAlias:number = 0;\n\tprivate _enableDepthAndStencil:boolean;\n\tprivate _contextRequested:boolean;\n\n\t//private var _activeVertexBuffers : Vector. = new Vector.(8, true);\n\t//private var _activeTextures : Vector. = new Vector.(8, true);\n\tprivate _renderTarget:TextureProxyBase = null;\n\tprivate _renderSurfaceSelector:number = 0;\n\tprivate _scissorRect:Rectangle;\n\tprivate _color:number;\n\tprivate _backBufferDirty:boolean;\n\tprivate _viewPort:Rectangle;\n\tprivate _enterFrame:Event;\n\tprivate _exitFrame:Event;\n\tprivate _viewportUpdated:StageEvent;\n\tprivate _viewportDirty:boolean;\n\tprivate _bufferClear:boolean;\n\n\t//private _mouse3DManager:away.managers.Mouse3DManager;\n\t//private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager\n\n\tprivate _initialised:boolean = false;\n\n\tconstructor(container:HTMLCanvasElement, stageIndex:number, stageManager:StageManager, forceSoftware:boolean = false, profile:string = \"baseline\")\n\t{\n\t\tsuper();\n\n\t\tthis._container = container;\n\n\t\tthis._stageIndex = stageIndex;\n\n\t\tthis._stageManager = stageManager;\n\n\t\tthis._viewPort = new Rectangle();\n\n\t\tthis._enableDepthAndStencil = true;\n\n\t\tCSS.setElementX(this._container, 0);\n\t\tCSS.setElementY(this._container, 0);\n\n\t\tthis.visible = true;\n\t}\n\n\t/**\n\t * Requests a Context object to attach to the managed gl canvas.\n\t */\n\tpublic requestContext(forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\")\n\t{\n\t\t// If forcing software, we can be certain that the\n\t\t// returned Context will be running software mode.\n\t\t// If not, we can't be sure and should stick to the\n\t\t// old value (will likely be same if re-requesting.)\n\n\t\tif (this._usesSoftwareRendering != null)\n\t\t\tthis._usesSoftwareRendering = forceSoftware;\n\n\t\tthis._profile = profile;\n\n\t\ttry {\n\t\t\tif (mode == ContextMode.FLASH)\n\t\t\t\tnew ContextStage3D( this._container, this._stageIndex, (context:IContext) => this._callback(context));\n\t\t\telse\n\t\t\t\tthis._context = new ContextWebGL( this._container, this._stageIndex);\n\n\t\t} catch (e) {\n\t\t\ttry {\n\t\t\t\tif (mode == ContextMode.AUTO)\n\t\t\t\t\tnew ContextStage3D( this._container, this._stageIndex, (context:IContext) => this._callback(context));\n\t\t\t\telse\n\t\t\t\t\tthis.dispatchEvent(new Event(Event.ERROR));\n\t\t\t} catch (e) {\n\t\t\t\tthis.dispatchEvent(new Event(Event.ERROR));\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._context)\n\t\t\tthis._callback(this._context);\n\t}\n\n\t/**\n\t * The width of the gl canvas\n\t */\n\tpublic get width()\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic set width(val:number)\n\t{\n\t\tif (this._width == val)\n\t\t\treturn;\n\n\t\tCSS.setElementWidth(this._container, val);\n\n\t\tthis._width = this._viewPort.width = val;\n\n\t\tthis._backBufferDirty = true;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The height of the gl canvas\n\t */\n\tpublic get height()\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic set height(val:number)\n\t{\n\t\tif (this._height == val)\n\t\t\treturn;\n\n\t\tCSS.setElementHeight(this._container, val);\n\n\t\tthis._height = this._viewPort.height = val;\n\n\t\tthis._backBufferDirty = true;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The x position of the gl canvas\n\t */\n\tpublic get x()\n\t{\n\t\treturn this._x;\n\t}\n\n\tpublic set x(val:number)\n\t{\n\t\tif (this._x == val)\n\t\t\treturn;\n\n\t\tCSS.setElementX(this._container, val);\n\n\t\tthis._x = this._viewPort.x = val;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\t/**\n\t * The y position of the gl canvas\n\t */\n\tpublic get y()\n\t{\n\t\treturn this._y;\n\t}\n\n\tpublic set y(val:number)\n\t{\n\t\tif (this._y == val)\n\t\t\treturn;\n\n\t\tCSS.setElementY(this._container, val);\n\n\t\tthis._y = this._viewPort.y = val;\n\n\t\tthis.notifyViewportUpdated();\n\t}\n\n\tpublic set visible(val:boolean)\n\t{\n\t\tCSS.setElementVisibility(this._container, val);\n\t}\n\n\tpublic get visible()\n\t{\n\t\treturn CSS.getElementVisibility(this._container);\n\t}\n\n\tpublic get container():HTMLElement\n\t{\n\t\treturn this._container;\n\t}\n\n\t/**\n\t * The Context object associated with the given stage object.\n\t */\n\tpublic get context():IContext\n\t{\n\t\treturn this._context;\n\t}\n\n\tprivate notifyViewportUpdated()\n\t{\n\t\tif (this._viewportDirty)\n\t\t\treturn;\n\n\t\tthis._viewportDirty = true;\n\n\t\t//if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED))\n\t\t//return;\n\n\t\t//if (!_viewportUpdated)\n\t\tthis._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED);\n\n\t\tthis.dispatchEvent(this._viewportUpdated);\n\t}\n\n\tprivate notifyEnterFrame()\n\t{\n\t\t//if (!hasEventListener(Event.ENTER_FRAME))\n\t\t//return;\n\n\t\tif (!this._enterFrame)\n\t\t\tthis._enterFrame = new Event(Event.ENTER_FRAME);\n\n\t\tthis.dispatchEvent(this._enterFrame);\n\n\t}\n\n\tprivate notifyExitFrame()\n\t{\n\t\t//if (!hasEventListener(Event.EXIT_FRAME))\n\t\t//return;\n\n\t\tif (!this._exitFrame)\n\t\t\tthis._exitFrame = new Event(Event.EXIT_FRAME);\n\n\t\tthis.dispatchEvent(this._exitFrame);\n\t}\n\n\tpublic get profile():string\n\t{\n\t\treturn this._profile;\n\t}\n\n\t/**\n\t * Disposes the Stage object, freeing the Context attached to the Stage.\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._stageManager.iRemoveStage(this);\n\t\tthis.freeContext();\n\t\tthis._stageManager = null;\n\t\tthis._stageIndex = -1;\n\t}\n\n\t/**\n\t * Configures the back buffer associated with the Stage object.\n\t * @param backBufferWidth The width of the backbuffer.\n\t * @param backBufferHeight The height of the backbuffer.\n\t * @param antiAlias The amount of anti-aliasing to use.\n\t * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer.\n\t */\n\tpublic configureBackBuffer(backBufferWidth:number, backBufferHeight:number, antiAlias:number, enableDepthAndStencil:boolean)\n\t{\n\t\tthis.width = backBufferWidth;\n\t\tthis.height = backBufferHeight;\n\n\t\tthis._antiAlias = antiAlias;\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\n\t\tif (this._context)\n\t\t\tthis._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil);\n\t}\n\n\t/*\n\t * Indicates whether the depth and stencil buffer is used\n\t */\n\tpublic get enableDepthAndStencil():boolean\n\t{\n\t\treturn this._enableDepthAndStencil;\n\t}\n\n\tpublic set enableDepthAndStencil(enableDepthAndStencil:boolean)\n\t{\n\t\tthis._enableDepthAndStencil = enableDepthAndStencil;\n\t\tthis._backBufferDirty = true;\n\t}\n\n\tpublic get renderTarget():TextureProxyBase\n\t{\n\t\treturn this._renderTarget;\n\t}\n\n\tpublic get renderSurfaceSelector():number\n\t{\n\t\treturn this._renderSurfaceSelector;\n\t}\n\n\t/*\n\t * Clear and reset the back buffer when using a shared context\n\t */\n\tpublic clear()\n\t{\n\t\tif (!this._context)\n\t\t\treturn;\n\n\t\tif (this._backBufferDirty) {\n\t\t\tthis.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\t\t\tthis._backBufferDirty = false;\n\t\t}\n\n\t\tthis._context.clear(( this._color & 0xff000000 ) >>> 24, // <--------- Zero-fill right shift\n\t\t\t\t\t\t\t ( this._color & 0xff0000 ) >>> 16, // <-------------|\n\t\t\t\t\t\t\t ( this._color & 0xff00 ) >>> 8, // <----------------|\n\t\t\t\t\t\t\t\tthis._color & 0xff);\n\n\t\tthis._bufferClear = true;\n\t}\n\n\t/**\n\t * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode.\n\t * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority.\n\t *\n\t * @param type The type of event.\n\t * @param listener The listener function that processes the event.\n\t * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false.\n\t * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0.\n\t * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not.\n\t */\n\tpublic addEventListener(type:string, listener:Function)\n\t{\n\t\tsuper.addEventListener(type, listener);\n\n\t\t//away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame');\n\n\t\t//if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){\n\n\t\t//_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference);\n\n\t\t//}\n\n\t\t/* Original code\n\t\t if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){\n\n\t\t _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference);\n\n\n\t\t }\n\t\t */\n\t}\n\n\t/**\n\t * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode.\n\t * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect.\n\t *\n\t * @param type The type of event.\n\t * @param listener The listener object to remove.\n\t * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false.\n\t */\n\tpublic removeEventListener(type:string, listener:Function)\n\t{\n\t\tsuper.removeEventListener(type, listener);\n\n\t\t/*\n\t\t // Remove the main rendering listener if no EnterFrame listeners remain\n\t\t if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this )\n\t\t && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME))\n\t\t {\n\n\t\t //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this );\n\n\t\t }\n\t\t */\n\t}\n\n\tpublic get scissorRect():Rectangle\n\t{\n\t\treturn this._scissorRect;\n\t}\n\n\tpublic set scissorRect(value:Rectangle)\n\t{\n\t\tthis._scissorRect = value;\n\n\t\tthis._context.setScissorRectangle(this._scissorRect);\n\t}\n\n\t/**\n\t * The index of the Stage which is managed by this instance of StageProxy.\n\t */\n\tpublic get stageIndex():number\n\t{\n\t\treturn this._stageIndex;\n\t}\n\n\t/**\n\t * Indicates whether the Stage managed by this proxy is running in software mode.\n\t * Remember to wait for the CONTEXT_CREATED event before checking this property,\n\t * as only then will it be guaranteed to be accurate.\n\t */\n\tpublic get usesSoftwareRendering():boolean\n\t{\n\t\treturn this._usesSoftwareRendering;\n\t}\n\n\t/**\n\t * The antiAliasing of the Stage.\n\t */\n\tpublic get antiAlias():number\n\t{\n\t\treturn this._antiAlias;\n\t}\n\n\tpublic set antiAlias(antiAlias:number)\n\t{\n\t\tthis._antiAlias = antiAlias;\n\t\tthis._backBufferDirty = true;\n\t}\n\n\t/**\n\t * A viewPort rectangle equivalent of the Stage size and position.\n\t */\n\tpublic get viewPort():Rectangle\n\t{\n\t\tthis._viewportDirty = false;\n\n\t\treturn this._viewPort;\n\t}\n\n\t/**\n\t * The background color of the Stage.\n\t */\n\tpublic get color():number\n\t{\n\t\treturn this._color;\n\t}\n\n\tpublic set color(color:number)\n\t{\n\t\tthis._color = color;\n\t}\n\n\t/**\n\t * The freshly cleared state of the backbuffer before any rendering\n\t */\n\tpublic get bufferClear():boolean\n\t{\n\t\treturn this._bufferClear;\n\t}\n\n\tpublic set bufferClear(newBufferClear:boolean)\n\t{\n\t\tthis._bufferClear = newBufferClear;\n\t}\n\n\t/*\n\t * Access to fire mouseevents across multiple layered view3D instances\n\t */\n\t//\t\tpublic get mouse3DManager():Mouse3DManager\n\t//\t\t{\n\t//\t\t\treturn this._mouse3DManager;\n\t//\t\t}\n\t//\n\t//\t\tpublic set mouse3DManager(value:Mouse3DManager)\n\t//\t\t{\n\t//\t\t\tthis._mouse3DManager = value;\n\t//\t\t}\n\n\t/* TODO: implement dependency Touch3DManager\n\t public get touch3DManager():Touch3DManager\n\t {\n\t return _touch3DManager;\n\t }\n\n\t public set touch3DManager(value:Touch3DManager)\n\t {\n\t _touch3DManager = value;\n\t }\n\t */\n\n\t/**\n\t * Frees the Context associated with this StageProxy.\n\t */\n\tprivate freeContext()\n\t{\n\t\tif (this._context) {\n\t\t\tthis._context.dispose();\n\n\t\t\tthis.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED));\n\t\t}\n\n\t\tthis._context = null;\n\n\t\tthis._initialised = false;\n\t}\n\n\t/**\n\t * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers.\n\t * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance.\n\t */\n\tprivate onEnterFrame(event:Event)\n\t{\n\t\tif (!this._context)\n\t\t\treturn;\n\n\t\t// Clear the stage instance\n\t\tthis.clear();\n\t\t//notify the enterframe listeners\n\t\tthis.notifyEnterFrame();\n\t\t// Call the present() to render the frame\n\t\tif (!this._context)\n\t\t\tthis._context.present();\n\t\t//notify the exitframe listeners\n\t\tthis.notifyExitFrame();\n\t}\n\n\tpublic recoverFromDisposal():boolean\n\t{\n\t\tif (!this._context)\n\t\t\treturn false;\n\n\t\t//away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' );\n\n\t\t/*\n\t\t if (this._iContext.driverInfo == \"Disposed\")\n\t\t {\n\t\t this._iContext = null;\n\t\t this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED));\n\t\t return false;\n\n\t\t }\n\t\t */\n\t\treturn true;\n\n\t}\n\n\tprivate _callback(context:IContext)\n\t{\n\t\tthis._context = context;\n\n\t\tthis._container = this._context.container;\n\n\t\t// Only configure back buffer if width and height have been set,\n\t\t// which they may not have been if View.render() has yet to be\n\t\t// invoked for the first time.\n\t\tif (this._width && this._height)\n\t\t\tthis._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil);\n\n\t\t// Dispatch the appropriate event depending on whether context was\n\t\t// created for the first time or recreated after a device loss.\n\t\tthis.dispatchEvent(new StageEvent(this._initialised? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED));\n\n\t\tthis._initialised = true;\n\t}\n}\n\nexport = Stage;", "import AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nclass TextureBaseWebGL\n{\n\tpublic textureType:string = \"\";\n\tpublic _gl:WebGLRenderingContext;\n\n\tconstructor(gl:WebGLRenderingContext)\n\t{\n\t\tthis._gl = gl;\n\t}\n\n\tpublic dispose():void\n\t{\n\t\tthrow \"Abstract method must be overridden.\";\n\t}\n\n\tpublic get glTexture():WebGLTexture\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n}\n\nexport = TextureBaseWebGL;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArrayBase\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArrayBase\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\n\nclass TextureFlash extends ResourceBaseFlash implements ITexture\n{\n\tprivate _context:ContextStage3D;\n\tprivate _width:number;\n\tprivate _height:number;\n\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tconstructor(context:ContextStage3D, width:number, height:number, format:string, forRTT:boolean, streaming:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initTexture, (forRTT? OpCodes.trueValue : OpCodes.falseValue)) + width + \",\" + height + \",\" + streaming + \",\" + format + \"$\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeTexture) + this._pId.toString() + \",\");\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, miplevel?:number);\n\tpublic uploadFromData(data:any, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData) {\n\t\t\tdata = ( data).imageData.data;\n\t\t} else if (data instanceof HTMLImageElement) {\n\t\t\tvar can = document.createElement(\"canvas\");\n\t\t\tvar w = data.width;\n\t\t\tvar h = data.height;\n\t\t\tcan.width = w;\n\t\t\tcan.height = h;\n\t\t\tvar ctx = can.getContext(\"2d\");\n\t\t\tctx.drawImage(data, 0, 0);\n\t\t\tdata = ctx.getImageData(0, 0, w, h).data;\n\t\t}\n\n\t\tvar pos = 0;\n\t\tvar bytes = ByteArrayBase.internalGetBase64String(data.length, function () {\n\t\t\treturn data[pos++];\n\t\t}, null);\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadBytesTexture) + this._pId + \",\" + miplevel + \",\" + (this._width >> miplevel) + \",\" + (this._height >> miplevel) + \",\" + bytes + \"%\");\n\t\tthis._context.execute();\n\t}\n}\n\nexport = TextureFlash;", - "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL\");\n\nclass TextureWebGL extends TextureBaseWebGL implements ITexture\n{\n\n\tpublic textureType:string = \"texture2d\";\n\n\tprivate _width:number;\n\tprivate _height:number;\n\n\tprivate _frameBuffer:WebGLFramebuffer;\n\n\tprivate _glTexture:WebGLTexture;\n\n\tconstructor(gl:WebGLRenderingContext, width:number, height:number)\n\t{\n\t\tsuper(gl);\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis._glTexture = this._gl.createTexture();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteTexture(this._glTexture);\n\t}\n\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic get frameBuffer():WebGLFramebuffer\n\t{\n\t\tif (!this._frameBuffer) {\n\t\t\tthis._frameBuffer = this._gl.createFramebuffer();\n\t\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer);\n\t\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture);\n\t\t\tthis._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null);\n\n\t\t\tvar renderBuffer:WebGLRenderbuffer = this._gl.createRenderbuffer();\n\t\t\tthis._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer);\n\t\t\tthis._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height);\n\n\t\t\tthis._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0);\n\t\t\tthis._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer);\n\n\t\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, null);\n\t\t\tthis._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null);\n\t\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n\t\t}\n\n\t\treturn this._frameBuffer;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, miplevel?:number);\n\tpublic uploadFromData(data:any, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData)\n\t\t\tdata = ( data).imageData;\n\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture);\n\t\tthis._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data);\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, null);\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\t\tvar ext:Object = this._gl.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");\n\t\t//this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this)\n\t}\n\n\tpublic get glTexture():WebGLTexture\n\t{\n\t\treturn this._glTexture;\n\t}\n\n\tpublic generateMipmaps()\n\t{\n\t\t//TODO: implement generating mipmaps\n\t\t//this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture );\n\t\t//this._gl.generateMipmap(this._gl.TEXTURE_2D);\n\t\t//this._gl.bindTexture( this._gl.TEXTURE_2D, null );\n\t}\n}\n\nexport = TextureWebGL;", - "import ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextStage3D\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash\");\n\nclass VertexBufferFlash extends ResourceBaseFlash implements IVertexBuffer\n{\n\tprivate _context:ContextStage3D;\n\tprivate _numVertices:number;\n\tprivate _data32PerVertex:number;\n\n\tconstructor(context:ContextStage3D, numVertices:number, data32PerVertex:number)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._numVertices = numVertices;\n\t\tthis._data32PerVertex = data32PerVertex;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initVertexBuffer, data32PerVertex + OpCodes.intMask) + numVertices.toString() + \",\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic uploadFromArray(data:number[], startVertex:number, numVertices:number)\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadArrayVertexBuffer, this._pId + OpCodes.intMask) + data.join() + \"#\" + [startVertex, numVertices].join() + \",\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic get numVertices():number\n\t{\n\t\treturn this._numVertices;\n\t}\n\n\tpublic get data32PerVertex():number\n\t{\n\t\treturn this._data32PerVertex;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeVertexBuffer, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n}\n\nexport = VertexBufferFlash;", - "import IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\n\nclass VertexBufferWebGL implements IVertexBuffer\n{\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _numVertices:number;\n\tprivate _data32PerVertex:number;\n\tprivate _buffer:WebGLBuffer;\n\n\tconstructor(gl:WebGLRenderingContext, numVertices:number, data32PerVertex:number)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._buffer = this._gl.createBuffer();\n\t\tthis._numVertices = numVertices;\n\t\tthis._data32PerVertex = data32PerVertex;\n\t}\n\n\tpublic uploadFromArray(vertices:number[], startVertex:number, numVertices:number)\n\t{\n\t\tthis._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer);\n\n\t\t//console.log( \"** WARNING upload not fully implemented, startVertex & numVertices not considered.\" );\n\t\t// TODO add offsets , startVertex, numVertices * this._data32PerVertex\n\t\tthis._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW);\n\t}\n\n\tpublic get numVertices():number\n\t{\n\t\treturn this._numVertices;\n\t}\n\n\tpublic get data32PerVertex():number\n\t{\n\t\treturn this._data32PerVertex;\n\t}\n\n\tpublic get glBuffer():WebGLBuffer\n\t{\n\t\treturn this._buffer;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteBuffer(this._buffer);\n\t}\n}\n\nexport = VertexBufferWebGL;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArrayBase\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArrayBase\");\n\nimport ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\n\nclass TextureFlash extends ResourceBaseFlash implements ITexture\n{\n\tprivate _context:ContextStage3D;\n\tprivate _width:number;\n\tprivate _height:number;\n\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tconstructor(context:ContextStage3D, width:number, height:number, format:string, forRTT:boolean, streaming:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initTexture, (forRTT? OpCodes.trueValue : OpCodes.falseValue)) + width + \",\" + height + \",\" + streaming + \",\" + format + \"$\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeTexture) + this._pId.toString() + \",\");\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, miplevel?:number);\n\tpublic uploadFromData(data:any, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData) {\n\t\t\tdata = ( data).imageData.data;\n\t\t} else if (data instanceof HTMLImageElement) {\n\t\t\tvar can = document.createElement(\"canvas\");\n\t\t\tvar w = data.width;\n\t\t\tvar h = data.height;\n\t\t\tcan.width = w;\n\t\t\tcan.height = h;\n\t\t\tvar ctx = can.getContext(\"2d\");\n\t\t\tctx.drawImage(data, 0, 0);\n\t\t\tdata = ctx.getImageData(0, 0, w, h).data;\n\t\t}\n\n\t\tvar pos = 0;\n\t\tvar bytes = ByteArrayBase.internalGetBase64String(data.length, function () {\n\t\t\treturn data[pos++];\n\t\t}, null);\n\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadBytesTexture) + this._pId + \",\" + miplevel + \",\" + (this._width >> miplevel) + \",\" + (this._height >> miplevel) + \",\" + bytes + \"%\");\n\t\tthis._context.execute();\n\t}\n}\n\nexport = TextureFlash;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport TextureBaseWebGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/TextureBaseWebGL\");\n\nclass TextureWebGL extends TextureBaseWebGL implements ITexture\n{\n\n\tpublic textureType:string = \"texture2d\";\n\n\tprivate _width:number;\n\tprivate _height:number;\n\n\tprivate _frameBuffer:WebGLFramebuffer;\n\n\tprivate _glTexture:WebGLTexture;\n\n\tconstructor(gl:WebGLRenderingContext, width:number, height:number)\n\t{\n\t\tsuper(gl);\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis._glTexture = this._gl.createTexture();\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteTexture(this._glTexture);\n\t}\n\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic get frameBuffer():WebGLFramebuffer\n\t{\n\t\tif (!this._frameBuffer) {\n\t\t\tthis._frameBuffer = this._gl.createFramebuffer();\n\t\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer);\n\t\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture);\n\t\t\tthis._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null);\n\n\t\t\tvar renderBuffer:WebGLRenderbuffer = this._gl.createRenderbuffer();\n\t\t\tthis._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer);\n\t\t\tthis._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height);\n\n\t\t\tthis._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0);\n\t\t\tthis._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer);\n\n\t\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, null);\n\t\t\tthis._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null);\n\t\t\tthis._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n\t\t}\n\n\t\treturn this._frameBuffer;\n\t}\n\n\tpublic uploadFromData(bitmapData:BitmapData, miplevel?:number);\n\tpublic uploadFromData(image:HTMLImageElement, miplevel?:number);\n\tpublic uploadFromData(data:any, miplevel:number = 0)\n\t{\n\t\tif (data instanceof BitmapData)\n\t\t\tdata = ( data).imageData;\n\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture);\n\t\tthis._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data);\n\t\tthis._gl.bindTexture(this._gl.TEXTURE_2D, null);\n\t}\n\n\tpublic uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:number /*uint*/, async:boolean = false)\n\t{\n\t\tvar ext:Object = this._gl.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");\n\t\t//this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this)\n\t}\n\n\tpublic get glTexture():WebGLTexture\n\t{\n\t\treturn this._glTexture;\n\t}\n\n\tpublic generateMipmaps()\n\t{\n\t\t//TODO: implement generating mipmaps\n\t\t//this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture );\n\t\t//this._gl.generateMipmap(this._gl.TEXTURE_2D);\n\t\t//this._gl.bindTexture( this._gl.TEXTURE_2D, null );\n\t}\n}\n\nexport = TextureWebGL;", + "import ContextStage3D\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextStage3D\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\nimport OpCodes\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/OpCodes\");\nimport ResourceBaseFlash\t\t\t= require(\"awayjs-stagegl/lib/base/ResourceBaseFlash\");\n\nclass VertexBufferFlash extends ResourceBaseFlash implements IVertexBuffer\n{\n\tprivate _context:ContextStage3D;\n\tprivate _numVertices:number;\n\tprivate _data32PerVertex:number;\n\n\tconstructor(context:ContextStage3D, numVertices:number, data32PerVertex:number)\n\t{\n\t\tsuper();\n\n\t\tthis._context = context;\n\t\tthis._numVertices = numVertices;\n\t\tthis._data32PerVertex = data32PerVertex;\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.initVertexBuffer, data32PerVertex + OpCodes.intMask) + numVertices.toString() + \",\");\n\t\tthis._pId = this._context.execute();\n\t\tthis._context._iAddResource(this);\n\t}\n\n\tpublic uploadFromArray(data:number[], startVertex:number, numVertices:number)\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.uploadArrayVertexBuffer, this._pId + OpCodes.intMask) + data.join() + \"#\" + [startVertex, numVertices].join() + \",\");\n\t\tthis._context.execute();\n\t}\n\n\tpublic get numVertices():number\n\t{\n\t\treturn this._numVertices;\n\t}\n\n\tpublic get data32PerVertex():number\n\t{\n\t\treturn this._data32PerVertex;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._context.addStream(String.fromCharCode(OpCodes.disposeVertexBuffer, this._pId + OpCodes.intMask));\n\t\tthis._context.execute();\n\t\tthis._context._iRemoveResource(this);\n\n\t\tthis._context = null;\n\t}\n}\n\nexport = VertexBufferFlash;", + "import IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\n\nclass VertexBufferWebGL implements IVertexBuffer\n{\n\n\tprivate _gl:WebGLRenderingContext;\n\tprivate _numVertices:number;\n\tprivate _data32PerVertex:number;\n\tprivate _buffer:WebGLBuffer;\n\n\tconstructor(gl:WebGLRenderingContext, numVertices:number, data32PerVertex:number)\n\t{\n\t\tthis._gl = gl;\n\t\tthis._buffer = this._gl.createBuffer();\n\t\tthis._numVertices = numVertices;\n\t\tthis._data32PerVertex = data32PerVertex;\n\t}\n\n\tpublic uploadFromArray(vertices:number[], startVertex:number, numVertices:number)\n\t{\n\t\tthis._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer);\n\n\t\t//console.log( \"** WARNING upload not fully implemented, startVertex & numVertices not considered.\" );\n\t\t// TODO add offsets , startVertex, numVertices * this._data32PerVertex\n\t\tthis._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW);\n\t}\n\n\tpublic get numVertices():number\n\t{\n\t\treturn this._numVertices;\n\t}\n\n\tpublic get data32PerVertex():number\n\t{\n\t\treturn this._data32PerVertex;\n\t}\n\n\tpublic get glBuffer():WebGLBuffer\n\t{\n\t\treturn this._buffer;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._gl.deleteBuffer(this._buffer);\n\t}\n}\n\nexport = VertexBufferWebGL;", "import Error\t\t\t\t\t\t= require(\"awayjs-core/lib/errors/Error\");\n\nclass AnimationSetError extends Error\n{\n\tconstructor(message:string)\n\t{\n\t\tsuper(message);\n\t}\n}\n\nexport = AnimationSetError;", "import Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nimport AnimatorBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimatorBase\");\n\n/**\n * Dispatched to notify changes in an animator's state.\n */\nclass AnimatorEvent extends Event\n{\n\t/**\n\t * Defines the value of the type property of a start event object.\n\t */\n\tpublic static START:string = \"start\";\n\n\t/**\n\t * Defines the value of the type property of a stop event object.\n\t */\n\tpublic static STOP:string = \"stop\";\n\n\t/**\n\t * Defines the value of the type property of a cycle complete event object.\n\t */\n\tpublic static CYCLE_COMPLETE:string = \"cycle_complete\";\n\n\tprivate _animator:AnimatorBase;\n\n\t/**\n\t * Create a new AnimatorEvent object.\n\t *\n\t * @param type The event type.\n\t * @param animator The animator object that is the subject of this event.\n\t */\n\tconstructor(type:string, animator:AnimatorBase)\n\t{\n\t\tsuper(type);\n\t\tthis._animator = animator;\n\t}\n\n\tpublic get animator():AnimatorBase\n\t{\n\t\treturn this._animator;\n\t}\n\n\t/**\n\t * Clones the event.\n\t *\n\t * @return An exact duplicate of the current event object.\n\t */\n\tpublic clone():Event\n\t{\n\t\treturn new AnimatorEvent(this.type, this._animator);\n\t}\n}\n\nexport = AnimatorEvent;", "import Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nclass ShadingMethodEvent extends Event\n{\n\tpublic static SHADER_INVALIDATED:string = \"ShaderInvalidated\";\n\n\tconstructor(type:string)\n\t{\n\n\t\tsuper(type);\n\n\t}\n}\n\nexport = ShadingMethodEvent;", - "import Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\nimport Filter3DTaskBase\t\t\t\t= require(\"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase\");\n\nclass Filter3DBase\n{\n\tprivate _tasks:Array;\n\tprivate _requireDepthRender:boolean;\n\tprivate _textureWidth:number;\n\tprivate _textureHeight:number;\n\n\tconstructor()\n\t{\n\t\tthis._tasks = new Array();\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n\tpublic pAddTask(filter:Filter3DTaskBase)\n\t{\n\t\tthis._tasks.push(filter);\n\n\t\tif (this._requireDepthRender == null)\n\t\t\tthis._requireDepthRender = filter.requireDepthRender;\n\t}\n\n\tpublic get tasks():Filter3DTaskBase[]\n\t{\n\t\treturn this._tasks;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\treturn this._tasks[0].getMainInputTexture(stage);\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic set textureWidth(value:number)\n\t{\n\t\tthis._textureWidth = value;\n\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].textureWidth = value;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic set textureHeight(value:number)\n\t{\n\t\tthis._textureHeight = value;\n\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].textureHeight = value;\n\t}\n\n\t// link up the filters correctly with the next filter\n\tpublic setRenderTargets(mainTarget:ITexture, stage:Stage)\n\t{\n\t\tthis._tasks[this._tasks.length - 1].target = mainTarget;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].dispose();\n\t}\n\n\tpublic update(stage:Stage, camera:Camera)\n\t{\n\n\t}\n}\n\nexport = Filter3DBase;", - "import AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport AGALMiniAssembler\t\t\t= require(\"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ITexture\");\n\nclass Filter3DTaskBase\n{\n\tprivate _mainInputTexture:ITexture;\n\n\tprivate _scaledTextureWidth:number = -1;\n\tprivate _scaledTextureHeight:number = -1;\n\tprivate _textureWidth:number = -1;\n\tprivate _textureHeight:number = -1;\n\tprivate _textureDimensionsInvalid:boolean = true;\n\tprivate _program3DInvalid:boolean = true;\n\tprivate _program3D:IProgram;\n\tprivate _target:ITexture;\n\tprivate _requireDepthRender:boolean;\n\tprivate _textureScale:number = 0;\n\n\tconstructor(requireDepthRender:boolean = false)\n\t{\n\n\t\tthis._requireDepthRender = requireDepthRender;\n\n\t}\n\n\t/**\n\t * The texture scale for the input of this texture. This will define the output of the previous entry in the chain\n\t */\n\tpublic get textureScale():number\n\t{\n\t\treturn this._textureScale;\n\t}\n\n\tpublic set textureScale(value:number)\n\t{\n\t\tif (this._textureScale == value)\n\t\t\treturn;\n\n\t\tthis._textureScale = value;\n\t\tthis._scaledTextureWidth = this._textureWidth >> this._textureScale;\n\t\tthis._scaledTextureHeight = this._textureHeight >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic get target():ITexture\n\t{\n\t\treturn this._target;\n\t}\n\n\tpublic set target(value:ITexture)\n\t{\n\t\tthis._target = value;\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic set textureWidth(value:number)\n\t{\n\t\tif (this._textureWidth == value)\n\t\t\treturn;\n\n\t\tthis._textureWidth = value;\n\t\tthis._scaledTextureWidth = this._textureWidth >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic set textureHeight(value:number)\n\t{\n\t\tif (this._textureHeight == value)\n\t\t\treturn;\n\n\t\tthis._textureHeight = value;\n\t\tthis._scaledTextureHeight = this._textureHeight >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\tif (this._textureDimensionsInvalid)\n\t\t\tthis.pUpdateTextures(stage);\n\n\t\treturn this._mainInputTexture;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (this._mainInputTexture)\n\t\t\tthis._mainInputTexture.dispose();\n\n\t\tif (this._program3D)\n\t\t\tthis._program3D.dispose();\n\t}\n\n\tpublic pInvalidateProgram()\n\t{\n\t\tthis._program3DInvalid = true;\n\t}\n\n\tpublic pUpdateProgram(stage:Stage)\n\t{\n\t\tif (this._program3D)\n\t\t\tthis._program3D.dispose();\n\n\t\tthis._program3D = ( stage.context).createProgram();\n\n\t\tvar vertexByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part vertex 1\\n\" + this.pGetVertexCode() + \"endpart\"))['vertex'].data;\n\t\tvar fragmentByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part fragment 1\\n\" + this.pGetFragmentCode() + \"endpart\"))['fragment'].data;\n\t\tthis._program3D.upload(vertexByteCode, fragmentByteCode);\n\t\tthis._program3DInvalid = false;\n\t}\n\n\tpublic pGetVertexCode():string\n\t{\n\t\t// TODO: imeplement AGAL <> GLSL\n\n\t\treturn \"mov op, va0\\n\" + \"mov v0, va1\\n\";\n\t}\n\n\tpublic pGetFragmentCode():string\n\t{\n\t\tthrow new AbstractMethodError();\n\n\t\treturn null;\n\t}\n\n\tpublic pUpdateTextures(stage:Stage)\n\t{\n\t\tif (this._mainInputTexture)\n\t\t\tthis._mainInputTexture.dispose();\n\n\t\tthis._mainInputTexture = ( stage.context).createTexture(this._scaledTextureWidth, this._scaledTextureHeight, ContextGLTextureFormat.BGRA, true);\n\n\t\tthis._textureDimensionsInvalid = false;\n\t}\n\n\tpublic getProgram(stage:Stage):IProgram\n\t{\n\t\tif (this._program3DInvalid)\n\t\t\tthis.pUpdateProgram(stage);\n\n\t\treturn this._program3D;\n\t}\n\n\tpublic activate(stage:Stage, camera:Camera, depthTexture:ITexture)\n\t{\n\t}\n\n\tpublic deactivate(stage:Stage)\n\t{\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n}\n\nexport = Filter3DTaskBase;", - "import Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\nimport EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport TextureUtils\t\t\t\t\t= require(\"awayjs-core/lib/utils/TextureUtils\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBase\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IIndexBuffer\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IVertexBuffer\");\n\nclass RTTBufferManager extends EventDispatcher\n{\n\tprivate static _instances:Array;\n\n\tprivate _renderToTextureVertexBuffer:IVertexBuffer;\n\tprivate _renderToScreenVertexBuffer:IVertexBuffer;\n\n\tprivate _indexBuffer:IIndexBuffer;\n\tprivate _stage:Stage;\n\tprivate _viewWidth:number = -1;\n\tprivate _viewHeight:number = -1;\n\tprivate _textureWidth:number = -1;\n\tprivate _textureHeight:number = -1;\n\tprivate _renderToTextureRect:Rectangle;\n\tprivate _buffersInvalid:boolean = true;\n\n\tprivate _textureRatioX:number;\n\tprivate _textureRatioY:number;\n\n\tconstructor(stage:Stage)\n\t{\n\t\tsuper();\n\n\t\tthis._renderToTextureRect = new Rectangle();\n\n\t\tthis._stage = stage;\n\n\t}\n\n\tpublic static getInstance(stage:Stage):RTTBufferManager\n\t{\n\t\tif (!stage)\n\t\t\tthrow new Error(\"stage key cannot be null!\");\n\n\t\tif (RTTBufferManager._instances == null)\n\t\t\tRTTBufferManager._instances = new Array();\n\n\t\tvar rttBufferManager:RTTBufferManager = RTTBufferManager.getRTTBufferManagerFromStage(stage);\n\n\t\tif (rttBufferManager == null) {\n\t\t\trttBufferManager = new RTTBufferManager(stage);\n\n\t\t\tvar vo:RTTBufferManagerVO = new RTTBufferManagerVO();\n\n\t\t\tvo.stage3d = stage;\n\t\t\tvo.rttbfm = rttBufferManager;\n\n\t\t\tRTTBufferManager._instances.push(vo);\n\t\t}\n\n\t\treturn rttBufferManager;\n\n\t}\n\n\tprivate static getRTTBufferManagerFromStage(stage:Stage):RTTBufferManager\n\t{\n\n\t\tvar l:number = RTTBufferManager._instances.length;\n\t\tvar r:RTTBufferManagerVO;\n\n\t\tfor (var c:number = 0; c < l; c++) {\n\t\t\tr = RTTBufferManager._instances[ c ];\n\n\t\t\tif (r.stage3d === stage)\n\t\t\t\treturn r.rttbfm;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static deleteRTTBufferManager(stage:Stage):void\n\t{\n\t\tvar l:number = RTTBufferManager._instances.length;\n\t\tvar r:RTTBufferManagerVO;\n\n\t\tfor (var c:number = 0; c < l; c++) {\n\t\t\tr = RTTBufferManager._instances[ c ];\n\n\t\t\tif (r.stage3d === stage) {\n\t\t\t\tRTTBufferManager._instances.splice(c, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get textureRatioX():number\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._textureRatioX;\n\t}\n\n\tpublic get textureRatioY():number\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._textureRatioY;\n\t}\n\n\tpublic get viewWidth():number\n\t{\n\t\treturn this._viewWidth;\n\t}\n\n\tpublic set viewWidth(value:number)\n\t{\n\t\tif (value == this._viewWidth)\n\t\t\treturn;\n\n\t\tthis._viewWidth = value;\n\n\t\tthis._buffersInvalid = true;\n\n\t\tthis._textureWidth = TextureUtils.getBestPowerOf2(this._viewWidth);\n\n\t\tif (this._textureWidth > this._viewWidth) {\n\t\t\tthis._renderToTextureRect.x = Math.floor((this._textureWidth - this._viewWidth)*.5);\n\t\t\tthis._renderToTextureRect.width = this._viewWidth;\n\t\t} else {\n\t\t\tthis._renderToTextureRect.x = 0;\n\t\t\tthis._renderToTextureRect.width = this._textureWidth;\n\t\t}\n\n\t\tthis.dispatchEvent(new Event(Event.RESIZE));\n\t}\n\n\tpublic get viewHeight():number\n\t{\n\t\treturn this._viewHeight;\n\t}\n\n\tpublic set viewHeight(value:number)\n\t{\n\t\tif (value == this._viewHeight)\n\t\t\treturn;\n\n\t\tthis._viewHeight = value;\n\n\t\tthis._buffersInvalid = true;\n\n\t\tthis._textureHeight = TextureUtils.getBestPowerOf2(this._viewHeight);\n\n\t\tif (this._textureHeight > this._viewHeight) {\n\t\t\tthis._renderToTextureRect.y = Math.floor((this._textureHeight - this._viewHeight)*.5);\n\t\t\tthis._renderToTextureRect.height = this._viewHeight;\n\t\t} else {\n\t\t\tthis._renderToTextureRect.y = 0;\n\t\t\tthis._renderToTextureRect.height = this._textureHeight;\n\t\t}\n\n\t\tthis.dispatchEvent(new Event(Event.RESIZE));\n\t}\n\n\tpublic get renderToTextureVertexBuffer():IVertexBuffer\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToTextureVertexBuffer;\n\t}\n\n\tpublic get renderToScreenVertexBuffer():IVertexBuffer\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToScreenVertexBuffer;\n\n\t}\n\n\tpublic get indexBuffer():IIndexBuffer\n\t{\n\t\treturn this._indexBuffer;\n\t}\n\n\tpublic get renderToTextureRect():Rectangle\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToTextureRect;\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tRTTBufferManager.deleteRTTBufferManager(this._stage);\n\n\t\tif (this._indexBuffer) {\n\t\t\tthis._indexBuffer.dispose();\n\t\t\tthis._renderToScreenVertexBuffer.dispose();\n\t\t\tthis._renderToTextureVertexBuffer.dispose();\n\t\t\tthis._renderToScreenVertexBuffer = null;\n\t\t\tthis._renderToTextureVertexBuffer = null;\n\t\t\tthis._indexBuffer = null;\n\t\t}\n\t}\n\n\t// todo: place all this in a separate model, since it's used all over the place\n\t// maybe it even has a place in the core (together with screenRect etc)?\n\t// needs to be stored per view of course\n\tprivate updateRTTBuffers()\n\t{\n\t\tvar context:ContextGLBase = this._stage.context;\n\t\tvar textureVerts:number[];\n\t\tvar screenVerts:number[];\n\n\t\tvar x:number;\n\t\tvar y:number;\n\n\t\tif (this._renderToTextureVertexBuffer == null)\n\t\t\tthis._renderToTextureVertexBuffer = context.createVertexBuffer(4, 5);\n\n\t\tif (this._renderToScreenVertexBuffer == null)\n\t\t\tthis._renderToScreenVertexBuffer = context.createVertexBuffer(4, 5);\n\n\t\tif (!this._indexBuffer) {\n\t\t\tthis._indexBuffer = context.createIndexBuffer(6);\n\n\t\t\tthis._indexBuffer.uploadFromArray([2, 1, 0, 3, 2, 0], 0, 6);\n\t\t}\n\n\t\tthis._textureRatioX = x = Math.min(this._viewWidth/this._textureWidth, 1);\n\t\tthis._textureRatioY = y = Math.min(this._viewHeight/this._textureHeight, 1);\n\n\t\tvar u1:number = (1 - x)*.5;\n\t\tvar u2:number = (x + 1)*.5;\n\t\tvar v1:number = (y + 1)*.5;\n\t\tvar v2:number = (1 - y)*.5;\n\n\t\t// last element contains indices for data per vertex that can be passed to the vertex shader if necessary (ie: frustum corners for deferred rendering)\n\t\ttextureVerts = [ -x, -y, u1, v1, 0, x, -y, u2, v1, 1, x, y, u2, v2, 2, -x, y, u1, v2, 3 ];\n\n\t\tscreenVerts = [ -1, -1, u1, v1, 0, 1, -1, u2, v1, 1, 1, 1, u2, v2, 2, -1, 1, u1, v2, 3 ];\n\n\t\tthis._renderToTextureVertexBuffer.uploadFromArray(textureVerts, 0, 4);\n\t\tthis._renderToScreenVertexBuffer.uploadFromArray(screenVerts, 0, 4);\n\n\t\tthis._buffersInvalid = false;\n\t}\n}\n\nexport = RTTBufferManager;\n\nclass RTTBufferManagerVO\n{\n\tpublic stage3d:Stage;\n\n\tpublic rttbfm:RTTBufferManager;\n}", - "import EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport ArgumentError\t\t\t\t= require(\"awayjs-core/lib/errors/ArgumentError\");\n\nimport StageEvent\t\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\n\n/**\n * The StageManager class provides a multiton object that handles management for Stage objects.\n *\n * @see away.base.Stage\n */\nclass StageManager extends EventDispatcher\n{\n\tprivate static STAGE_MAX_QUANTITY:number = 8;\n\tprivate _stages:Array;\n\n\tprivate static _instance:StageManager;\n\tprivate static _numStages:number = 0;\n\tprivate _onContextCreatedDelegate:(event:Event) => void;\n\n\t/**\n\t * Creates a new StageManager class.\n\t * @param stage The Stage object that contains the Stage objects to be managed.\n\t * @private\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis._stages = new Array(StageManager.STAGE_MAX_QUANTITY);\n\n\t\tthis._onContextCreatedDelegate = (event:Event) => this.onContextCreated(event);\n\t}\n\n\t/**\n\t * Gets a StageManager instance for the given Stage object.\n\t * @param stage The Stage object that contains the Stage objects to be managed.\n\t * @return The StageManager instance for the given Stage object.\n\t */\n\tpublic static getInstance():StageManager\n\t{\n\t\tif (this._instance == null)\n\t\t\tthis._instance = new StageManager();\n\n\t\treturn this._instance;\n\t}\n\n\t/**\n\t * Requests the Stage for the given index.\n\t *\n\t * @param index The index of the requested Stage.\n\t * @param forceSoftware Whether to force software mode even if hardware acceleration is available.\n\t * @param profile The compatibility profile, an enumeration of ContextProfile\n\t * @return The Stage for the given index.\n\t */\n\tpublic getStageAt(index:number, forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\"):Stage\n\t{\n\t\tif (index < 0 || index >= StageManager.STAGE_MAX_QUANTITY)\n\t\t\tthrow new ArgumentError(\"Index is out of bounds [0..\" + StageManager.STAGE_MAX_QUANTITY + \"]\");\n\n\t\tif (!this._stages[index]) {\n\t\t\tStageManager._numStages++;\n\n\t\t\tvar canvas:HTMLCanvasElement = document.createElement(\"canvas\");\n\t\t\tcanvas.id = \"stage\" + index;\n\t\t\tdocument.body.appendChild(canvas);\n\t\t\tvar stage:Stage = this._stages[index] = new Stage(canvas, index, this, forceSoftware, profile);\n\t\t\tstage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate);\n\t\t\tstage.requestContext(forceSoftware, profile, mode);\n\t\t}\n\n\t\treturn stage;\n\t}\n\n\t/**\n\t * Removes a Stage from the manager.\n\t * @param stage\n\t * @private\n\t */\n\tpublic iRemoveStage(stage:Stage)\n\t{\n\t\tStageManager._numStages--;\n\n\t\tstage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate);\n\n\t\tthis._stages[stage.stageIndex] = null;\n\t}\n\n\t/**\n\t * Get the next available stage. An error is thrown if there are no StageProxies available\n\t * @param forceSoftware Whether to force software mode even if hardware acceleration is available.\n\t * @param profile The compatibility profile, an enumeration of ContextProfile\n\t * @return The allocated stage\n\t */\n\tpublic getFreeStage(forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\"):Stage\n\t{\n\t\tvar i:number = 0;\n\t\tvar len:number = this._stages.length;\n\n\t\twhile (i < len) {\n\t\t\tif (!this._stages[i])\n\t\t\t\treturn this.getStageAt(i, forceSoftware, profile, mode);\n\n\t\t\t++i;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Checks if a new stage can be created and managed by the class.\n\t * @return true if there is one slot free for a new stage\n\t */\n\tpublic get hasFreeStage():boolean\n\t{\n\t\treturn StageManager._numStages < StageManager.STAGE_MAX_QUANTITY? true : false;\n\t}\n\n\t/**\n\t * Returns the amount of stage objects that can be created and managed by the class\n\t * @return the amount of free slots\n\t */\n\tpublic get numSlotsFree():number\n\t{\n\t\treturn StageManager.STAGE_MAX_QUANTITY - StageManager._numStages;\n\t}\n\n\t/**\n\t * Returns the amount of Stage objects currently managed by the class.\n\t * @return the amount of slots used\n\t */\n\tpublic get numSlotsUsed():number\n\t{\n\t\treturn StageManager._numStages;\n\t}\n\n\t/**\n\t * The maximum amount of Stage objects that can be managed by the class\n\t */\n\tpublic get numSlotsTotal():number\n\t{\n\t\treturn this._stages.length;\n\t}\n\n\tprivate onContextCreated(event:Event):void\n\t{\n\t\t//var stage:Stage = e.target;\n\t\t//document.body.appendChild(stage.canvas)\n\t}\n}\n\nexport = StageManager;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\n\nimport LineSubGeometry\t\t\t\t= require(\"awayjs-display/lib/base/LineSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport LineBasicPass\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/LineBasicPass\");\n\n/**\n * LineMaterial is a material exclusively used to render wireframe objects\n *\n * @see away.entities.Lines\n */\nclass LineBasicMaterial extends StageGLMaterialBase\n{\n\tpublic static pONE_VECTOR:Array = Array(1, 1, 1, 1);\n\tpublic static pFRONT_VECTOR:Array = Array(0, 0, -1, 0);\n\n\tprivate _constants:Array = new Array(0, 0, 0, 0);\n\tprivate _calcMatrix:Matrix3D;\n\tprivate _thickness:number;\n\n\tprivate _screenPass:LineBasicPass;\n\n\t/**\n\t * Creates a new LineMaterial object.\n\t *\n\t * @param thickness The thickness of the wireframe lines.\n\t */\n\tconstructor(thickness:number = 1.25)\n\t{\n\t\tsuper();\n\n\t\tthis._thickness = thickness;\n\n\t\tthis.bothSides = true;\n\n\t\tthis._pAddScreenPass(this._screenPass = new LineBasicPass());\n\n\t\tthis._calcMatrix = new Matrix3D();\n\n\t\tthis._constants[1] = 1/255;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\treturn \"m44 vt0, va0, vc8\t\t\t\\n\" + // transform Q0 to eye space\n\t\t\t\"m44 vt1, va1, vc8\t\t\t\\n\" + // transform Q1 to eye space\n\t\t\t\"sub vt2, vt1, vt0 \t\t\t\\n\" + // L = Q1 - Q0\n\n\t\t\t// test if behind camera near plane\n\t\t\t// if 0 - Q0.z < Camera.near then the point needs to be clipped\n\t\t\t//\"neg vt5.x, vt0.z\t\t\t\t\\n\" + // 0 - Q0.z\n\t\t\t\"slt vt5.x, vt0.z, vc7.z\t\t\t\\n\" + // behind = ( 0 - Q0.z < -Camera.near ) ? 1 : 0\n\t\t\t\"sub vt5.y, vc5.x, vt5.x\t\t\t\\n\" + // !behind = 1 - behind\n\n\t\t\t// p = point on the plane (0,0,-near)\n\t\t\t// n = plane normal (0,0,-1)\n\t\t\t// D = Q1 - Q0\n\t\t\t// t = ( dot( n, ( p - Q0 ) ) / ( dot( n, d )\n\n\t\t\t// solve for t where line crosses Camera.near\n\t\t\t\"add vt4.x, vt0.z, vc7.z\t\t\t\\n\" + // Q0.z + ( -Camera.near )\n\t\t\t\"sub vt4.y, vt0.z, vt1.z\t\t\t\\n\" + // Q0.z - Q1.z\n\n\t\t\t// fix divide by zero for horizontal lines\n\t\t\t\"seq vt4.z, vt4.y vc6.x\t\t\t\\n\" + // offset = (Q0.z - Q1.z)==0 ? 1 : 0\n\t\t\t\"add vt4.y, vt4.y, vt4.z\t\t\t\\n\" + // ( Q0.z - Q1.z ) + offset\n\n\t\t\t\"div vt4.z, vt4.x, vt4.y\t\t\t\\n\" + // t = ( Q0.z - near ) / ( Q0.z - Q1.z )\n\n\t\t\t\"mul vt4.xyz, vt4.zzz, vt2.xyz\t\\n\" + // t(L)\n\t\t\t\"add vt3.xyz, vt0.xyz, vt4.xyz\t\\n\" + // Qclipped = Q0 + t(L)\n\t\t\t\"mov vt3.w, vc5.x\t\t\t\\n\" + // Qclipped.w = 1\n\n\t\t\t// If necessary, replace Q0 with new Qclipped\n\t\t\t\"mul vt0, vt0, vt5.yyyy\t\t\t\\n\" + // !behind * Q0\n\t\t\t\"mul vt3, vt3, vt5.xxxx\t\t\t\\n\" + // behind * Qclipped\n\t\t\t\"add vt0, vt0, vt3\t\t\t\t\\n\" + // newQ0 = Q0 + Qclipped\n\n\t\t\t// calculate side vector for line\n\t\t\t\"sub vt2, vt1, vt0 \t\t\t\\n\" + // L = Q1 - Q0\n\t\t\t\"nrm vt2.xyz, vt2.xyz\t\t\t\\n\" + // normalize( L )\n\t\t\t\"nrm vt5.xyz, vt0.xyz\t\t\t\\n\" + // D = normalize( Q1 )\n\t\t\t\"mov vt5.w, vc5.x\t\t\t\t\\n\" + // D.w = 1\n\t\t\t\"crs vt3.xyz, vt2, vt5\t\t\t\\n\" + // S = L x D\n\t\t\t\"nrm vt3.xyz, vt3.xyz\t\t\t\\n\" + // normalize( S )\n\n\t\t\t// face the side vector properly for the given point\n\t\t\t\"mul vt3.xyz, vt3.xyz, va2.xxx\t\\n\" + // S *= weight\n\t\t\t\"mov vt3.w, vc5.x\t\t\t\\n\" + // S.w = 1\n\n\t\t\t// calculate the amount required to move at the point's distance to correspond to the line's pixel width\n\t\t\t// scale the side vector by that amount\n\t\t\t\"dp3 vt4.x, vt0, vc6\t\t\t\\n\" + // distance = dot( view )\n\t\t\t\"mul vt4.x, vt4.x, vc7.x\t\t\t\\n\" + // distance *= vpsod\n\t\t\t\"mul vt3.xyz, vt3.xyz, vt4.xxx\t\\n\" + // S.xyz *= pixelScaleFactor\n\n\t\t\t// add scaled side vector to Q0 and transform to clip space\n\t\t\t\"add vt0.xyz, vt0.xyz, vt3.xyz\t\\n\" + // Q0 + S\n\n\t\t\t\"m44 op, vt0, vc0\t\t\t\\n\" + // transform Q0 to clip space\n\n\t\t\t// interpolate color\n\t\t\t\"mov v0, va3\t\t\t\t\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivatePass(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivatePass(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tthis._constants[0] = this._thickness/((stage.scissorRect)? Math.min(stage.scissorRect.width, stage.scissorRect.height) : Math.min(stage.width, stage.height));\n\n\t\t// value to convert distance from camera to model length per pixel width\n\t\tthis._constants[2] = camera.projection.near;\n\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 5, LineBasicMaterial.pONE_VECTOR, 1);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 6, LineBasicMaterial.pFRONT_VECTOR, 1);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 7, this._constants, 1);\n\n\t\t// projection matrix\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, camera.projection.matrix, true);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tthis._calcMatrix.copyFrom(renderable.sourceEntity.sceneTransform);\n\t\tthis._calcMatrix.append(camera.inverseSceneTransform);\n\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 8, this._calcMatrix, true);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(LineSubGeometry.START_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.START_POSITION_DATA), LineSubGeometry.POSITION_FORMAT);\n\t\tcontext.activateBuffer(1, renderable.getVertexData(LineSubGeometry.END_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.END_POSITION_DATA), LineSubGeometry.POSITION_FORMAT);\n\t\tcontext.activateBuffer(2, renderable.getVertexData(LineSubGeometry.THICKNESS_DATA), renderable.getVertexOffset(LineSubGeometry.THICKNESS_DATA), LineSubGeometry.THICKNESS_FORMAT);\n\t\tcontext.activateBuffer(3, renderable.getVertexData(LineSubGeometry.COLOR_DATA), renderable.getVertexOffset(LineSubGeometry.COLOR_DATA), LineSubGeometry.COLOR_FORMAT);\n\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = LineBasicMaterial;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport SkyboxPass\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/SkyboxPass\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * SkyboxMaterial is a material exclusively used to render skyboxes\n *\n * @see away3d.primitives.Skybox\n */\nclass SkyboxMaterial extends StageGLMaterialBase\n{\n\tprivate _vertexData:Array;\n\tprivate _cubeMap:CubeTextureBase;\n\tprivate _skyboxPass:SkyboxPass;\n\n\t/**\n\t * Creates a new SkyboxMaterial object.\n\t * @param cubeMap The CubeMap to use as the skybox.\n\t */\n\tconstructor(cubeMap:CubeTextureBase, smooth:boolean = true, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\n\t\tsuper();\n\n\t\tthis._cubeMap = cubeMap;\n\t\tthis._pAddScreenPass(this._skyboxPass = new SkyboxPass());\n\n\t\tthis._vertexData = new Array(0, 0, 0, 0, 1, 1, 1, 1);\n\t}\n\n\t/**\n\t * The cube texture to use as the skybox.\n\t */\n\tpublic get cubeMap():CubeTextureBase\n\t{\n\t\treturn this._cubeMap;\n\t}\n\n\tpublic set cubeMap(value:CubeTextureBase)\n\t{\n\t\tif (value && this._cubeMap && (value.hasMipmaps != this._cubeMap.hasMipmaps || value.format != this._cubeMap.format))\n\t\t\tthis._pInvalidatePasses();\n\n\t\tthis._cubeMap = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"mul vt0, va0, vc5\\n\" +\n\t\t\t\"add vt0, vt0, vc4\\n\" +\n\t\t\t\"m44 op, vt0, vc0\\n\" +\n\t\t\t\"mov v0, va0\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\t//var cubeMapReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\n\t\t//this._texturesIndex = cubeMapReg.index;\n\n\t\t//ShaderCompilerHelper.getTexCubeSampleCode(sharedRegisters.shadedTarget, cubeMapReg, this._cubeTexture, shaderObject.useSmoothTextures, shaderObject.useMipmapping);\n\n\t\tvar mip:string = \",mipnone\";\n\n\t\tif (this._cubeMap.hasMipmaps)\n\t\t\tmip = \",miplinear\";\n\n\t\treturn \"tex ft0, v0, fs0 \\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivatePass(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivatePass(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tcontext.setSamplerStateAt(0, ContextGLWrapMode.CLAMP, ContextGLTextureFilter.LINEAR, this._cubeMap.hasMipmaps? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\tcontext.setDepthTest(false, ContextGLCompareMode.LESS);\n\t\tcontext.activateCubeTexture(0, this._cubeMap);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar pos:Vector3D = camera.scenePosition;\n\t\tthis._vertexData[0] = pos.x;\n\t\tthis._vertexData[1] = pos.y;\n\t\tthis._vertexData[2] = pos.z;\n\t\tthis._vertexData[4] = this._vertexData[5] = this._vertexData[6] = camera.projection.far/Math.sqrt(3);\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, viewProjection, true);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 4, this._vertexData, 2);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT);\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = SkyboxMaterial;", + "import Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport Filter3DTaskBase\t\t\t\t= require(\"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase\");\n\nclass Filter3DBase\n{\n\tprivate _tasks:Array;\n\tprivate _requireDepthRender:boolean;\n\tprivate _textureWidth:number;\n\tprivate _textureHeight:number;\n\n\tconstructor()\n\t{\n\t\tthis._tasks = new Array();\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n\tpublic pAddTask(filter:Filter3DTaskBase)\n\t{\n\t\tthis._tasks.push(filter);\n\n\t\tif (this._requireDepthRender == null)\n\t\t\tthis._requireDepthRender = filter.requireDepthRender;\n\t}\n\n\tpublic get tasks():Filter3DTaskBase[]\n\t{\n\t\treturn this._tasks;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\treturn this._tasks[0].getMainInputTexture(stage);\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic set textureWidth(value:number)\n\t{\n\t\tthis._textureWidth = value;\n\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].textureWidth = value;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic set textureHeight(value:number)\n\t{\n\t\tthis._textureHeight = value;\n\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].textureHeight = value;\n\t}\n\n\t// link up the filters correctly with the next filter\n\tpublic setRenderTargets(mainTarget:ITexture, stage:Stage)\n\t{\n\t\tthis._tasks[this._tasks.length - 1].target = mainTarget;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < this._tasks.length; ++i)\n\t\t\tthis._tasks[i].dispose();\n\t}\n\n\tpublic update(stage:Stage, camera:Camera)\n\t{\n\n\t}\n}\n\nexport = Filter3DBase;", + "import AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport ByteArray\t\t\t\t\t= require(\"awayjs-core/lib/utils/ByteArray\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport AGALMiniAssembler\t\t\t= require(\"awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\n\nclass Filter3DTaskBase\n{\n\tprivate _mainInputTexture:ITexture;\n\n\tprivate _scaledTextureWidth:number = -1;\n\tprivate _scaledTextureHeight:number = -1;\n\tprivate _textureWidth:number = -1;\n\tprivate _textureHeight:number = -1;\n\tprivate _textureDimensionsInvalid:boolean = true;\n\tprivate _program3DInvalid:boolean = true;\n\tprivate _program3D:IProgram;\n\tprivate _target:ITexture;\n\tprivate _requireDepthRender:boolean;\n\tprivate _textureScale:number = 0;\n\n\tconstructor(requireDepthRender:boolean = false)\n\t{\n\n\t\tthis._requireDepthRender = requireDepthRender;\n\n\t}\n\n\t/**\n\t * The texture scale for the input of this texture. This will define the output of the previous entry in the chain\n\t */\n\tpublic get textureScale():number\n\t{\n\t\treturn this._textureScale;\n\t}\n\n\tpublic set textureScale(value:number)\n\t{\n\t\tif (this._textureScale == value)\n\t\t\treturn;\n\n\t\tthis._textureScale = value;\n\t\tthis._scaledTextureWidth = this._textureWidth >> this._textureScale;\n\t\tthis._scaledTextureHeight = this._textureHeight >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic get target():ITexture\n\t{\n\t\treturn this._target;\n\t}\n\n\tpublic set target(value:ITexture)\n\t{\n\t\tthis._target = value;\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic set textureWidth(value:number)\n\t{\n\t\tif (this._textureWidth == value)\n\t\t\treturn;\n\n\t\tthis._textureWidth = value;\n\t\tthis._scaledTextureWidth = this._textureWidth >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic set textureHeight(value:number)\n\t{\n\t\tif (this._textureHeight == value)\n\t\t\treturn;\n\n\t\tthis._textureHeight = value;\n\t\tthis._scaledTextureHeight = this._textureHeight >> this._textureScale;\n\t\tthis._textureDimensionsInvalid = true;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\tif (this._textureDimensionsInvalid)\n\t\t\tthis.pUpdateTextures(stage);\n\n\t\treturn this._mainInputTexture;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (this._mainInputTexture)\n\t\t\tthis._mainInputTexture.dispose();\n\n\t\tif (this._program3D)\n\t\t\tthis._program3D.dispose();\n\t}\n\n\tpublic pInvalidateProgram()\n\t{\n\t\tthis._program3DInvalid = true;\n\t}\n\n\tpublic pUpdateProgram(stage:Stage)\n\t{\n\t\tif (this._program3D)\n\t\t\tthis._program3D.dispose();\n\n\t\tthis._program3D = ( stage.context).createProgram();\n\n\t\tvar vertexByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part vertex 1\\n\" + this.pGetVertexCode() + \"endpart\"))['vertex'].data;\n\t\tvar fragmentByteCode:ByteArray = (new AGALMiniAssembler().assemble(\"part fragment 1\\n\" + this.pGetFragmentCode() + \"endpart\"))['fragment'].data;\n\t\tthis._program3D.upload(vertexByteCode, fragmentByteCode);\n\t\tthis._program3DInvalid = false;\n\t}\n\n\tpublic pGetVertexCode():string\n\t{\n\t\t// TODO: imeplement AGAL <> GLSL\n\n\t\treturn \"mov op, va0\\n\" + \"mov v0, va1\\n\";\n\t}\n\n\tpublic pGetFragmentCode():string\n\t{\n\t\tthrow new AbstractMethodError();\n\n\t\treturn null;\n\t}\n\n\tpublic pUpdateTextures(stage:Stage)\n\t{\n\t\tif (this._mainInputTexture)\n\t\t\tthis._mainInputTexture.dispose();\n\n\t\tthis._mainInputTexture = ( stage.context).createTexture(this._scaledTextureWidth, this._scaledTextureHeight, ContextGLTextureFormat.BGRA, true);\n\n\t\tthis._textureDimensionsInvalid = false;\n\t}\n\n\tpublic getProgram(stage:Stage):IProgram\n\t{\n\t\tif (this._program3DInvalid)\n\t\t\tthis.pUpdateProgram(stage);\n\n\t\treturn this._program3D;\n\t}\n\n\tpublic activate(stage:Stage, camera:Camera, depthTexture:ITexture)\n\t{\n\t}\n\n\tpublic deactivate(stage:Stage)\n\t{\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n}\n\nexport = Filter3DTaskBase;", + "import Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\nimport EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport TextureUtils\t\t\t\t\t= require(\"awayjs-core/lib/utils/TextureUtils\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\n\nclass RTTBufferManager extends EventDispatcher\n{\n\tprivate static _instances:Array;\n\n\tprivate _renderToTextureVertexBuffer:IVertexBuffer;\n\tprivate _renderToScreenVertexBuffer:IVertexBuffer;\n\n\tprivate _indexBuffer:IIndexBuffer;\n\tprivate _stage:Stage;\n\tprivate _viewWidth:number = -1;\n\tprivate _viewHeight:number = -1;\n\tprivate _textureWidth:number = -1;\n\tprivate _textureHeight:number = -1;\n\tprivate _renderToTextureRect:Rectangle;\n\tprivate _buffersInvalid:boolean = true;\n\n\tprivate _textureRatioX:number;\n\tprivate _textureRatioY:number;\n\n\tconstructor(stage:Stage)\n\t{\n\t\tsuper();\n\n\t\tthis._renderToTextureRect = new Rectangle();\n\n\t\tthis._stage = stage;\n\n\t}\n\n\tpublic static getInstance(stage:Stage):RTTBufferManager\n\t{\n\t\tif (!stage)\n\t\t\tthrow new Error(\"stage key cannot be null!\");\n\n\t\tif (RTTBufferManager._instances == null)\n\t\t\tRTTBufferManager._instances = new Array();\n\n\t\tvar rttBufferManager:RTTBufferManager = RTTBufferManager.getRTTBufferManagerFromStage(stage);\n\n\t\tif (rttBufferManager == null) {\n\t\t\trttBufferManager = new RTTBufferManager(stage);\n\n\t\t\tvar vo:RTTBufferManagerVO = new RTTBufferManagerVO();\n\n\t\t\tvo.stage3d = stage;\n\t\t\tvo.rttbfm = rttBufferManager;\n\n\t\t\tRTTBufferManager._instances.push(vo);\n\t\t}\n\n\t\treturn rttBufferManager;\n\n\t}\n\n\tprivate static getRTTBufferManagerFromStage(stage:Stage):RTTBufferManager\n\t{\n\n\t\tvar l:number = RTTBufferManager._instances.length;\n\t\tvar r:RTTBufferManagerVO;\n\n\t\tfor (var c:number = 0; c < l; c++) {\n\t\t\tr = RTTBufferManager._instances[ c ];\n\n\t\t\tif (r.stage3d === stage)\n\t\t\t\treturn r.rttbfm;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static deleteRTTBufferManager(stage:Stage):void\n\t{\n\t\tvar l:number = RTTBufferManager._instances.length;\n\t\tvar r:RTTBufferManagerVO;\n\n\t\tfor (var c:number = 0; c < l; c++) {\n\t\t\tr = RTTBufferManager._instances[ c ];\n\n\t\t\tif (r.stage3d === stage) {\n\t\t\t\tRTTBufferManager._instances.splice(c, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get textureRatioX():number\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._textureRatioX;\n\t}\n\n\tpublic get textureRatioY():number\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._textureRatioY;\n\t}\n\n\tpublic get viewWidth():number\n\t{\n\t\treturn this._viewWidth;\n\t}\n\n\tpublic set viewWidth(value:number)\n\t{\n\t\tif (value == this._viewWidth)\n\t\t\treturn;\n\n\t\tthis._viewWidth = value;\n\n\t\tthis._buffersInvalid = true;\n\n\t\tthis._textureWidth = TextureUtils.getBestPowerOf2(this._viewWidth);\n\n\t\tif (this._textureWidth > this._viewWidth) {\n\t\t\tthis._renderToTextureRect.x = Math.floor((this._textureWidth - this._viewWidth)*.5);\n\t\t\tthis._renderToTextureRect.width = this._viewWidth;\n\t\t} else {\n\t\t\tthis._renderToTextureRect.x = 0;\n\t\t\tthis._renderToTextureRect.width = this._textureWidth;\n\t\t}\n\n\t\tthis.dispatchEvent(new Event(Event.RESIZE));\n\t}\n\n\tpublic get viewHeight():number\n\t{\n\t\treturn this._viewHeight;\n\t}\n\n\tpublic set viewHeight(value:number)\n\t{\n\t\tif (value == this._viewHeight)\n\t\t\treturn;\n\n\t\tthis._viewHeight = value;\n\n\t\tthis._buffersInvalid = true;\n\n\t\tthis._textureHeight = TextureUtils.getBestPowerOf2(this._viewHeight);\n\n\t\tif (this._textureHeight > this._viewHeight) {\n\t\t\tthis._renderToTextureRect.y = Math.floor((this._textureHeight - this._viewHeight)*.5);\n\t\t\tthis._renderToTextureRect.height = this._viewHeight;\n\t\t} else {\n\t\t\tthis._renderToTextureRect.y = 0;\n\t\t\tthis._renderToTextureRect.height = this._textureHeight;\n\t\t}\n\n\t\tthis.dispatchEvent(new Event(Event.RESIZE));\n\t}\n\n\tpublic get renderToTextureVertexBuffer():IVertexBuffer\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToTextureVertexBuffer;\n\t}\n\n\tpublic get renderToScreenVertexBuffer():IVertexBuffer\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToScreenVertexBuffer;\n\n\t}\n\n\tpublic get indexBuffer():IIndexBuffer\n\t{\n\t\treturn this._indexBuffer;\n\t}\n\n\tpublic get renderToTextureRect():Rectangle\n\t{\n\t\tif (this._buffersInvalid)\n\t\t\tthis.updateRTTBuffers();\n\n\t\treturn this._renderToTextureRect;\n\t}\n\n\tpublic get textureWidth():number\n\t{\n\t\treturn this._textureWidth;\n\t}\n\n\tpublic get textureHeight():number\n\t{\n\t\treturn this._textureHeight;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tRTTBufferManager.deleteRTTBufferManager(this._stage);\n\n\t\tif (this._indexBuffer) {\n\t\t\tthis._indexBuffer.dispose();\n\t\t\tthis._renderToScreenVertexBuffer.dispose();\n\t\t\tthis._renderToTextureVertexBuffer.dispose();\n\t\t\tthis._renderToScreenVertexBuffer = null;\n\t\t\tthis._renderToTextureVertexBuffer = null;\n\t\t\tthis._indexBuffer = null;\n\t\t}\n\t}\n\n\t// todo: place all this in a separate model, since it's used all over the place\n\t// maybe it even has a place in the core (together with screenRect etc)?\n\t// needs to be stored per view of course\n\tprivate updateRTTBuffers()\n\t{\n\t\tvar context:ContextGLBase = this._stage.context;\n\t\tvar textureVerts:number[];\n\t\tvar screenVerts:number[];\n\n\t\tvar x:number;\n\t\tvar y:number;\n\n\t\tif (this._renderToTextureVertexBuffer == null)\n\t\t\tthis._renderToTextureVertexBuffer = context.createVertexBuffer(4, 5);\n\n\t\tif (this._renderToScreenVertexBuffer == null)\n\t\t\tthis._renderToScreenVertexBuffer = context.createVertexBuffer(4, 5);\n\n\t\tif (!this._indexBuffer) {\n\t\t\tthis._indexBuffer = context.createIndexBuffer(6);\n\n\t\t\tthis._indexBuffer.uploadFromArray([2, 1, 0, 3, 2, 0], 0, 6);\n\t\t}\n\n\t\tthis._textureRatioX = x = Math.min(this._viewWidth/this._textureWidth, 1);\n\t\tthis._textureRatioY = y = Math.min(this._viewHeight/this._textureHeight, 1);\n\n\t\tvar u1:number = (1 - x)*.5;\n\t\tvar u2:number = (x + 1)*.5;\n\t\tvar v1:number = (y + 1)*.5;\n\t\tvar v2:number = (1 - y)*.5;\n\n\t\t// last element contains indices for data per vertex that can be passed to the vertex shader if necessary (ie: frustum corners for deferred rendering)\n\t\ttextureVerts = [ -x, -y, u1, v1, 0, x, -y, u2, v1, 1, x, y, u2, v2, 2, -x, y, u1, v2, 3 ];\n\n\t\tscreenVerts = [ -1, -1, u1, v1, 0, 1, -1, u2, v1, 1, 1, 1, u2, v2, 2, -1, 1, u1, v2, 3 ];\n\n\t\tthis._renderToTextureVertexBuffer.uploadFromArray(textureVerts, 0, 4);\n\t\tthis._renderToScreenVertexBuffer.uploadFromArray(screenVerts, 0, 4);\n\n\t\tthis._buffersInvalid = false;\n\t}\n}\n\nexport = RTTBufferManager;\n\nclass RTTBufferManagerVO\n{\n\tpublic stage3d:Stage;\n\n\tpublic rttbfm:RTTBufferManager;\n}", + "import EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport ArgumentError\t\t\t\t= require(\"awayjs-core/lib/errors/ArgumentError\");\n\nimport StageEvent\t\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\n\n/**\n * The StageManager class provides a multiton object that handles management for Stage objects.\n *\n * @see away.base.Stage\n */\nclass StageManager extends EventDispatcher\n{\n\tprivate static STAGE_MAX_QUANTITY:number = 8;\n\tprivate _stages:Array;\n\n\tprivate static _instance:StageManager;\n\tprivate static _numStages:number = 0;\n\tprivate _onContextCreatedDelegate:(event:Event) => void;\n\n\t/**\n\t * Creates a new StageManager class.\n\t * @param stage The Stage object that contains the Stage objects to be managed.\n\t * @private\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis._stages = new Array(StageManager.STAGE_MAX_QUANTITY);\n\n\t\tthis._onContextCreatedDelegate = (event:Event) => this.onContextCreated(event);\n\t}\n\n\t/**\n\t * Gets a StageManager instance for the given Stage object.\n\t * @param stage The Stage object that contains the Stage objects to be managed.\n\t * @return The StageManager instance for the given Stage object.\n\t */\n\tpublic static getInstance():StageManager\n\t{\n\t\tif (this._instance == null)\n\t\t\tthis._instance = new StageManager();\n\n\t\treturn this._instance;\n\t}\n\n\t/**\n\t * Requests the Stage for the given index.\n\t *\n\t * @param index The index of the requested Stage.\n\t * @param forceSoftware Whether to force software mode even if hardware acceleration is available.\n\t * @param profile The compatibility profile, an enumeration of ContextProfile\n\t * @return The Stage for the given index.\n\t */\n\tpublic getStageAt(index:number, forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\"):Stage\n\t{\n\t\tif (index < 0 || index >= StageManager.STAGE_MAX_QUANTITY)\n\t\t\tthrow new ArgumentError(\"Index is out of bounds [0..\" + StageManager.STAGE_MAX_QUANTITY + \"]\");\n\n\t\tif (!this._stages[index]) {\n\t\t\tStageManager._numStages++;\n\n\t\t\tvar canvas:HTMLCanvasElement = document.createElement(\"canvas\");\n\t\t\tcanvas.id = \"stage\" + index;\n\t\t\tdocument.body.appendChild(canvas);\n\t\t\tvar stage:Stage = this._stages[index] = new Stage(canvas, index, this, forceSoftware, profile);\n\t\t\tstage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate);\n\t\t\tstage.requestContext(forceSoftware, profile, mode);\n\t\t}\n\n\t\treturn stage;\n\t}\n\n\t/**\n\t * Removes a Stage from the manager.\n\t * @param stage\n\t * @private\n\t */\n\tpublic iRemoveStage(stage:Stage)\n\t{\n\t\tStageManager._numStages--;\n\n\t\tstage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextCreatedDelegate);\n\n\t\tthis._stages[stage.stageIndex] = null;\n\t}\n\n\t/**\n\t * Get the next available stage. An error is thrown if there are no StageProxies available\n\t * @param forceSoftware Whether to force software mode even if hardware acceleration is available.\n\t * @param profile The compatibility profile, an enumeration of ContextProfile\n\t * @return The allocated stage\n\t */\n\tpublic getFreeStage(forceSoftware:boolean = false, profile:string = \"baseline\", mode:string = \"auto\"):Stage\n\t{\n\t\tvar i:number = 0;\n\t\tvar len:number = this._stages.length;\n\n\t\twhile (i < len) {\n\t\t\tif (!this._stages[i])\n\t\t\t\treturn this.getStageAt(i, forceSoftware, profile, mode);\n\n\t\t\t++i;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Checks if a new stage can be created and managed by the class.\n\t * @return true if there is one slot free for a new stage\n\t */\n\tpublic get hasFreeStage():boolean\n\t{\n\t\treturn StageManager._numStages < StageManager.STAGE_MAX_QUANTITY? true : false;\n\t}\n\n\t/**\n\t * Returns the amount of stage objects that can be created and managed by the class\n\t * @return the amount of free slots\n\t */\n\tpublic get numSlotsFree():number\n\t{\n\t\treturn StageManager.STAGE_MAX_QUANTITY - StageManager._numStages;\n\t}\n\n\t/**\n\t * Returns the amount of Stage objects currently managed by the class.\n\t * @return the amount of slots used\n\t */\n\tpublic get numSlotsUsed():number\n\t{\n\t\treturn StageManager._numStages;\n\t}\n\n\t/**\n\t * The maximum amount of Stage objects that can be managed by the class\n\t */\n\tpublic get numSlotsTotal():number\n\t{\n\t\treturn this._stages.length;\n\t}\n\n\tprivate onContextCreated(event:Event):void\n\t{\n\t\t//var stage:Stage = e.target;\n\t\t//document.body.appendChild(stage.canvas)\n\t}\n}\n\nexport = StageManager;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\n\nimport LineSubGeometry\t\t\t\t= require(\"awayjs-display/lib/base/LineSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport LineBasicPass\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/LineBasicPass\");\n\n/**\n * LineMaterial is a material exclusively used to render wireframe objects\n *\n * @see away.entities.Lines\n */\nclass LineBasicMaterial extends StageGLMaterialBase\n{\n\tpublic static pONE_VECTOR:Array = Array(1, 1, 1, 1);\n\tpublic static pFRONT_VECTOR:Array = Array(0, 0, -1, 0);\n\n\tprivate _constants:Array = new Array(0, 0, 0, 0);\n\tprivate _calcMatrix:Matrix3D;\n\tprivate _thickness:number;\n\n\tprivate _screenPass:LineBasicPass;\n\n\t/**\n\t * Creates a new LineMaterial object.\n\t *\n\t * @param thickness The thickness of the wireframe lines.\n\t */\n\tconstructor(thickness:number = 1.25)\n\t{\n\t\tsuper();\n\n\t\tthis._thickness = thickness;\n\n\t\tthis.bothSides = true;\n\n\t\tthis._pAddScreenPass(this._screenPass = new LineBasicPass());\n\n\t\tthis._calcMatrix = new Matrix3D();\n\n\t\tthis._constants[1] = 1/255;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\treturn \"m44 vt0, va0, vc8\t\t\t\\n\" + // transform Q0 to eye space\n\t\t\t\"m44 vt1, va1, vc8\t\t\t\\n\" + // transform Q1 to eye space\n\t\t\t\"sub vt2, vt1, vt0 \t\t\t\\n\" + // L = Q1 - Q0\n\n\t\t\t// test if behind camera near plane\n\t\t\t// if 0 - Q0.z < Camera.near then the point needs to be clipped\n\t\t\t//\"neg vt5.x, vt0.z\t\t\t\t\\n\" + // 0 - Q0.z\n\t\t\t\"slt vt5.x, vt0.z, vc7.z\t\t\t\\n\" + // behind = ( 0 - Q0.z < -Camera.near ) ? 1 : 0\n\t\t\t\"sub vt5.y, vc5.x, vt5.x\t\t\t\\n\" + // !behind = 1 - behind\n\n\t\t\t// p = point on the plane (0,0,-near)\n\t\t\t// n = plane normal (0,0,-1)\n\t\t\t// D = Q1 - Q0\n\t\t\t// t = ( dot( n, ( p - Q0 ) ) / ( dot( n, d )\n\n\t\t\t// solve for t where line crosses Camera.near\n\t\t\t\"add vt4.x, vt0.z, vc7.z\t\t\t\\n\" + // Q0.z + ( -Camera.near )\n\t\t\t\"sub vt4.y, vt0.z, vt1.z\t\t\t\\n\" + // Q0.z - Q1.z\n\n\t\t\t// fix divide by zero for horizontal lines\n\t\t\t\"seq vt4.z, vt4.y vc6.x\t\t\t\\n\" + // offset = (Q0.z - Q1.z)==0 ? 1 : 0\n\t\t\t\"add vt4.y, vt4.y, vt4.z\t\t\t\\n\" + // ( Q0.z - Q1.z ) + offset\n\n\t\t\t\"div vt4.z, vt4.x, vt4.y\t\t\t\\n\" + // t = ( Q0.z - near ) / ( Q0.z - Q1.z )\n\n\t\t\t\"mul vt4.xyz, vt4.zzz, vt2.xyz\t\\n\" + // t(L)\n\t\t\t\"add vt3.xyz, vt0.xyz, vt4.xyz\t\\n\" + // Qclipped = Q0 + t(L)\n\t\t\t\"mov vt3.w, vc5.x\t\t\t\\n\" + // Qclipped.w = 1\n\n\t\t\t// If necessary, replace Q0 with new Qclipped\n\t\t\t\"mul vt0, vt0, vt5.yyyy\t\t\t\\n\" + // !behind * Q0\n\t\t\t\"mul vt3, vt3, vt5.xxxx\t\t\t\\n\" + // behind * Qclipped\n\t\t\t\"add vt0, vt0, vt3\t\t\t\t\\n\" + // newQ0 = Q0 + Qclipped\n\n\t\t\t// calculate side vector for line\n\t\t\t\"sub vt2, vt1, vt0 \t\t\t\\n\" + // L = Q1 - Q0\n\t\t\t\"nrm vt2.xyz, vt2.xyz\t\t\t\\n\" + // normalize( L )\n\t\t\t\"nrm vt5.xyz, vt0.xyz\t\t\t\\n\" + // D = normalize( Q1 )\n\t\t\t\"mov vt5.w, vc5.x\t\t\t\t\\n\" + // D.w = 1\n\t\t\t\"crs vt3.xyz, vt2, vt5\t\t\t\\n\" + // S = L x D\n\t\t\t\"nrm vt3.xyz, vt3.xyz\t\t\t\\n\" + // normalize( S )\n\n\t\t\t// face the side vector properly for the given point\n\t\t\t\"mul vt3.xyz, vt3.xyz, va2.xxx\t\\n\" + // S *= weight\n\t\t\t\"mov vt3.w, vc5.x\t\t\t\\n\" + // S.w = 1\n\n\t\t\t// calculate the amount required to move at the point's distance to correspond to the line's pixel width\n\t\t\t// scale the side vector by that amount\n\t\t\t\"dp3 vt4.x, vt0, vc6\t\t\t\\n\" + // distance = dot( view )\n\t\t\t\"mul vt4.x, vt4.x, vc7.x\t\t\t\\n\" + // distance *= vpsod\n\t\t\t\"mul vt3.xyz, vt3.xyz, vt4.xxx\t\\n\" + // S.xyz *= pixelScaleFactor\n\n\t\t\t// add scaled side vector to Q0 and transform to clip space\n\t\t\t\"add vt0.xyz, vt0.xyz, vt3.xyz\t\\n\" + // Q0 + S\n\n\t\t\t\"m44 op, vt0, vc0\t\t\t\\n\" + // transform Q0 to clip space\n\n\t\t\t// interpolate color\n\t\t\t\"mov v0, va3\t\t\t\t\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivatePass(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivatePass(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tthis._constants[0] = this._thickness/((stage.scissorRect)? Math.min(stage.scissorRect.width, stage.scissorRect.height) : Math.min(stage.width, stage.height));\n\n\t\t// value to convert distance from camera to model length per pixel width\n\t\tthis._constants[2] = camera.projection.near;\n\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 5, LineBasicMaterial.pONE_VECTOR, 1);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 6, LineBasicMaterial.pFRONT_VECTOR, 1);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 7, this._constants, 1);\n\n\t\t// projection matrix\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, camera.projection.matrix, true);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tthis._calcMatrix.copyFrom(renderable.sourceEntity.sceneTransform);\n\t\tthis._calcMatrix.append(camera.inverseSceneTransform);\n\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 8, this._calcMatrix, true);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(LineSubGeometry.START_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.START_POSITION_DATA), LineSubGeometry.POSITION_FORMAT);\n\t\tcontext.activateBuffer(1, renderable.getVertexData(LineSubGeometry.END_POSITION_DATA), renderable.getVertexOffset(LineSubGeometry.END_POSITION_DATA), LineSubGeometry.POSITION_FORMAT);\n\t\tcontext.activateBuffer(2, renderable.getVertexData(LineSubGeometry.THICKNESS_DATA), renderable.getVertexOffset(LineSubGeometry.THICKNESS_DATA), LineSubGeometry.THICKNESS_FORMAT);\n\t\tcontext.activateBuffer(3, renderable.getVertexData(LineSubGeometry.COLOR_DATA), renderable.getVertexOffset(LineSubGeometry.COLOR_DATA), LineSubGeometry.COLOR_FORMAT);\n\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = LineBasicMaterial;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport SkyboxPass\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/SkyboxPass\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * SkyboxMaterial is a material exclusively used to render skyboxes\n *\n * @see away3d.primitives.Skybox\n */\nclass SkyboxMaterial extends StageGLMaterialBase\n{\n\tprivate _vertexData:Array;\n\tprivate _cubeMap:CubeTextureBase;\n\tprivate _skyboxPass:SkyboxPass;\n\n\t/**\n\t * Creates a new SkyboxMaterial object.\n\t * @param cubeMap The CubeMap to use as the skybox.\n\t */\n\tconstructor(cubeMap:CubeTextureBase, smooth:boolean = true, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\n\t\tsuper();\n\n\t\tthis._cubeMap = cubeMap;\n\t\tthis._pAddScreenPass(this._skyboxPass = new SkyboxPass());\n\n\t\tthis._vertexData = new Array(0, 0, 0, 0, 1, 1, 1, 1);\n\t}\n\n\t/**\n\t * The cube texture to use as the skybox.\n\t */\n\tpublic get cubeMap():CubeTextureBase\n\t{\n\t\treturn this._cubeMap;\n\t}\n\n\tpublic set cubeMap(value:CubeTextureBase)\n\t{\n\t\tif (value && this._cubeMap && (value.hasMipmaps != this._cubeMap.hasMipmaps || value.format != this._cubeMap.format))\n\t\t\tthis._pInvalidatePasses();\n\n\t\tthis._cubeMap = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"mul vt0, va0, vc5\\n\" +\n\t\t\t\"add vt0, vt0, vc4\\n\" +\n\t\t\t\"m44 op, vt0, vc0\\n\" +\n\t\t\t\"mov v0, va0\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\t//var cubeMapReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\n\t\t//this._texturesIndex = cubeMapReg.index;\n\n\t\t//ShaderCompilerHelper.getTexCubeSampleCode(sharedRegisters.shadedTarget, cubeMapReg, this._cubeTexture, shaderObject.useSmoothTextures, shaderObject.useMipmapping);\n\n\t\tvar mip:string = \",mipnone\";\n\n\t\tif (this._cubeMap.hasMipmaps)\n\t\t\tmip = \",miplinear\";\n\n\t\treturn \"tex ft0, v0, fs0 \\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivatePass(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivatePass(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tcontext.setSamplerStateAt(0, ContextGLWrapMode.CLAMP, ContextGLTextureFilter.LINEAR, this._cubeMap.hasMipmaps? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\tcontext.setDepthTest(false, ContextGLCompareMode.LESS);\n\t\tcontext.activateCubeTexture(0, this._cubeMap);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar pos:Vector3D = camera.scenePosition;\n\t\tthis._vertexData[0] = pos.x;\n\t\tthis._vertexData[1] = pos.y;\n\t\tthis._vertexData[2] = pos.z;\n\t\tthis._vertexData[4] = this._vertexData[5] = this._vertexData[6] = camera.projection.far/Math.sqrt(3);\n\t\tcontext.setProgramConstantsFromMatrix(ContextGLProgramType.VERTEX, 0, viewProjection, true);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 4, this._vertexData, 2);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT);\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = SkyboxMaterial;", "import MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\n\nclass StageGLMaterialBase extends MaterialBase\n{\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n}\n\nexport = StageGLMaterialBase;", - "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\n\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport TriangleBasicPass\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/TriangleBasicPass\");\nimport TriangleMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialBase\");\n\n/**\n * TriangleMaterial forms an abstract base class for the default shaded materials provided by Stage,\n * using material methods to define their appearance.\n */\nclass TriangleBasicMaterial extends TriangleMaterialBase\n{\n\tprivate _screenPass:TriangleBasicPass;\n\n\tprivate _alphaBlending:boolean = false;\n\tprivate _alpha:number = 1;\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\t/**\n\t * Creates a new TriangleMaterial object.\n\t *\n\t * @param texture The texture used for the material's albedo color.\n\t * @param smooth Indicates whether the texture should be filtered when sampled. Defaults to true.\n\t * @param repeat Indicates whether the texture should be tiled when sampled. Defaults to false.\n\t * @param mipmap Indicates whether or not any used textures should use mipmapping. Defaults to false.\n\t */\n\tconstructor(texture?:Texture2DBase, smooth?:boolean, repeat?:boolean, mipmap?:boolean);\n\tconstructor(color?:number, alpha?:number);\n\tconstructor(textureColor:any = null, smoothAlpha:any = null, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._screenPass = new TriangleBasicPass();\n\n\t\tif (textureColor instanceof Texture2DBase) {\n\t\t\tthis.texture = textureColor;\n\n\t\t\tthis.smooth = (smoothAlpha == null)? true : false;\n\t\t\tthis.repeat = repeat;\n\t\t\tthis.mipmap = mipmap;\n\t\t} else {\n\t\t\tthis.color = textureColor? Number(textureColor) : 0xCCCCCC;\n\t\t\tthis.alpha = (smoothAlpha == null)? 1 : Number(smoothAlpha);\n\t\t}\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tif (this._depthCompareMode == value)\n\t\t\treturn;\n\n\t\tthis._depthCompareMode = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The alpha of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (value > 1)\n\t\t\tvalue = 1;\n\t\telse if (value < 0)\n\t\t\tvalue = 0;\n\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * Indicates whether or not the material has transparency. If binary transparency is sufficient, for\n\t * example when using textures of foliage, consider using alphaThreshold instead.\n\t */\n\tpublic get alphaBlending():boolean\n\t{\n\t\treturn this._alphaBlending;\n\t}\n\n\tpublic set alphaBlending(value:boolean)\n\t{\n\t\tif (this._alphaBlending == value)\n\t\t\treturn;\n\n\t\tthis._alphaBlending = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iUpdateMaterial()\n\t{\n\t\tvar passesInvalid:boolean;\n\n\t\tif (this._pScreenPassesInvalid) {\n\t\t\tthis.pUpdateScreenPasses();\n\t\t\tpassesInvalid = true;\n\t\t}\n\n\t\tif (passesInvalid) {\n\t\t\tthis._pClearScreenPasses();\n\n\t\t\tthis._pAddScreenPass(this._screenPass);\n\t\t}\n\t}\n\n\t/**\n\t * Updates screen passes when they were found to be invalid.\n\t */\n\tpublic pUpdateScreenPasses()\n\t{\n\t\tthis.initPasses();\n\n\t\tthis.setBlendAndCompareModes();\n\n\t\tthis._pScreenPassesInvalid = false;\n\t}\n\n\t/**\n\t * Initializes all the passes and their dependent passes.\n\t */\n\tprivate initPasses()\n\t{\n\t\t//\n\t}\n\n\t/**\n\t * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes.\n\t */\n\tprivate setBlendAndCompareModes()\n\t{\n\t\tthis._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || this._alpha < 1);\n\t\tthis._screenPass.depthCompareMode = this._depthCompareMode;\n\t\tthis._screenPass.preserveAlpha = this._pRequiresBlending;\n\t\tthis._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending)? BlendMode.LAYER : this._pBlendMode);\n\t\tthis._screenPass.forceSeparateMVP = false;\n\t}\n}\n\nexport = TriangleBasicMaterial;", - "import Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleMaterialBase extends StageGLMaterialBase\n{\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\t//get the projection coordinates\n\t\tvar position:ShaderRegisterElement = (shaderObject.globalPosDependencies > 0)? sharedRegisters.globalPositionVertex : sharedRegisters.localPosition;\n\n\t\t//reserving vertex constants for projection matrix\n\t\tvar viewMatrixReg:ShaderRegisterElement = registerCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tshaderObject.viewMatrixIndex = viewMatrixReg.index*4;\n\n\t\tif (shaderObject.projectionDependencies > 0) {\n\t\t\tsharedRegisters.projectionFragment = registerCache.getFreeVarying();\n\t\t\tvar temp:ShaderRegisterElement = registerCache.getFreeVertexVectorTemp();\n\t\t\tcode += \"m44 \" + temp + \", \" + position + \", \" + viewMatrixReg + \"\\n\" +\n\t\t\t\t\"mov \" + sharedRegisters.projectionFragment + \", \" + temp + \"\\n\" +\n\t\t\t\t\"mov op, \" + temp + \"\\n\";\n\t\t} else {\n\t\t\tcode += \"m44 op, \" + position + \", \" + viewMatrixReg + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.sceneMatrixIndex >= 0) {\n\t\t\trenderable.sourceEntity.getRenderSceneTransform(camera).copyRawDataTo(shaderObject.vertexConstantData, shaderObject.sceneMatrixIndex, true);\n\t\t\tviewProjection.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true);\n\t\t} else {\n\t\t\tvar matrix3D:Matrix3D = Matrix3DUtils.CALCULATION_MATRIX;\n\n\t\t\tmatrix3D.copyFrom(renderable.sourceEntity.getRenderSceneTransform(camera));\n\t\t\tmatrix3D.append(viewProjection);\n\n\t\t\tmatrix3D.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true);\n\t\t}\n\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 0, shaderObject.vertexConstantData, shaderObject.numUsedVertexConstants);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.FRAGMENT, 0, shaderObject.fragmentConstantData, shaderObject.numUsedFragmentConstants);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT);\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = TriangleMaterialBase;", + "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\n\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport TriangleBasicPass\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/TriangleBasicPass\");\nimport TriangleMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialBase\");\n\n/**\n * TriangleMaterial forms an abstract base class for the default shaded materials provided by Stage,\n * using material methods to define their appearance.\n */\nclass TriangleBasicMaterial extends TriangleMaterialBase\n{\n\tprivate _screenPass:TriangleBasicPass;\n\n\tprivate _alphaBlending:boolean = false;\n\tprivate _alpha:number = 1;\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\t/**\n\t * Creates a new TriangleMaterial object.\n\t *\n\t * @param texture The texture used for the material's albedo color.\n\t * @param smooth Indicates whether the texture should be filtered when sampled. Defaults to true.\n\t * @param repeat Indicates whether the texture should be tiled when sampled. Defaults to false.\n\t * @param mipmap Indicates whether or not any used textures should use mipmapping. Defaults to false.\n\t */\n\tconstructor(texture?:Texture2DBase, smooth?:boolean, repeat?:boolean, mipmap?:boolean);\n\tconstructor(color?:number, alpha?:number);\n\tconstructor(textureColor:any = null, smoothAlpha:any = null, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._screenPass = new TriangleBasicPass();\n\n\t\tif (textureColor instanceof Texture2DBase) {\n\t\t\tthis.texture = textureColor;\n\n\t\t\tthis.smooth = (smoothAlpha == null)? true : false;\n\t\t\tthis.repeat = repeat;\n\t\t\tthis.mipmap = mipmap;\n\t\t} else {\n\t\t\tthis.color = textureColor? Number(textureColor) : 0xCCCCCC;\n\t\t\tthis.alpha = (smoothAlpha == null)? 1 : Number(smoothAlpha);\n\t\t}\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tif (this._depthCompareMode == value)\n\t\t\treturn;\n\n\t\tthis._depthCompareMode = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The alpha of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (value > 1)\n\t\t\tvalue = 1;\n\t\telse if (value < 0)\n\t\t\tvalue = 0;\n\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * Indicates whether or not the material has transparency. If binary transparency is sufficient, for\n\t * example when using textures of foliage, consider using alphaThreshold instead.\n\t */\n\tpublic get alphaBlending():boolean\n\t{\n\t\treturn this._alphaBlending;\n\t}\n\n\tpublic set alphaBlending(value:boolean)\n\t{\n\t\tif (this._alphaBlending == value)\n\t\t\treturn;\n\n\t\tthis._alphaBlending = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iUpdateMaterial()\n\t{\n\t\tvar passesInvalid:boolean;\n\n\t\tif (this._pScreenPassesInvalid) {\n\t\t\tthis.pUpdateScreenPasses();\n\t\t\tpassesInvalid = true;\n\t\t}\n\n\t\tif (passesInvalid) {\n\t\t\tthis._pClearScreenPasses();\n\n\t\t\tthis._pAddScreenPass(this._screenPass);\n\t\t}\n\t}\n\n\t/**\n\t * Updates screen passes when they were found to be invalid.\n\t */\n\tpublic pUpdateScreenPasses()\n\t{\n\t\tthis.initPasses();\n\n\t\tthis.setBlendAndCompareModes();\n\n\t\tthis._pScreenPassesInvalid = false;\n\t}\n\n\t/**\n\t * Initializes all the passes and their dependent passes.\n\t */\n\tprivate initPasses()\n\t{\n\t\t//\n\t}\n\n\t/**\n\t * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes.\n\t */\n\tprivate setBlendAndCompareModes()\n\t{\n\t\tthis._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || this._alpha < 1);\n\t\tthis._screenPass.depthCompareMode = this._depthCompareMode;\n\t\tthis._screenPass.preserveAlpha = this._pRequiresBlending;\n\t\tthis._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending)? BlendMode.LAYER : this._pBlendMode);\n\t\tthis._screenPass.forceSeparateMVP = false;\n\t}\n}\n\nexport = TriangleBasicMaterial;", + "import Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleMaterialBase extends StageGLMaterialBase\n{\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\t//get the projection coordinates\n\t\tvar position:ShaderRegisterElement = (shaderObject.globalPosDependencies > 0)? sharedRegisters.globalPositionVertex : sharedRegisters.localPosition;\n\n\t\t//reserving vertex constants for projection matrix\n\t\tvar viewMatrixReg:ShaderRegisterElement = registerCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tregisterCache.getFreeVertexConstant();\n\t\tshaderObject.viewMatrixIndex = viewMatrixReg.index*4;\n\n\t\tif (shaderObject.projectionDependencies > 0) {\n\t\t\tsharedRegisters.projectionFragment = registerCache.getFreeVarying();\n\t\t\tvar temp:ShaderRegisterElement = registerCache.getFreeVertexVectorTemp();\n\t\t\tcode += \"m44 \" + temp + \", \" + position + \", \" + viewMatrixReg + \"\\n\" +\n\t\t\t\t\"mov \" + sharedRegisters.projectionFragment + \", \" + temp + \"\\n\" +\n\t\t\t\t\"mov op, \" + temp + \"\\n\";\n\t\t} else {\n\t\t\tcode += \"m44 op, \" + position + \", \" + viewMatrixReg + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iRenderPass(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper._iRenderPass(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.sceneMatrixIndex >= 0) {\n\t\t\trenderable.sourceEntity.getRenderSceneTransform(camera).copyRawDataTo(shaderObject.vertexConstantData, shaderObject.sceneMatrixIndex, true);\n\t\t\tviewProjection.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true);\n\t\t} else {\n\t\t\tvar matrix3D:Matrix3D = Matrix3DUtils.CALCULATION_MATRIX;\n\n\t\t\tmatrix3D.copyFrom(renderable.sourceEntity.getRenderSceneTransform(camera));\n\t\t\tmatrix3D.append(viewProjection);\n\n\t\t\tmatrix3D.copyRawDataTo(shaderObject.vertexConstantData, shaderObject.viewMatrixIndex, true);\n\t\t}\n\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.VERTEX, 0, shaderObject.vertexConstantData, shaderObject.numUsedVertexConstants);\n\t\tcontext.setProgramConstantsFromArray(ContextGLProgramType.FRAGMENT, 0, shaderObject.fragmentConstantData, shaderObject.numUsedFragmentConstants);\n\n\t\tcontext.activateBuffer(0, renderable.getVertexData(TriangleSubGeometry.POSITION_DATA), renderable.getVertexOffset(TriangleSubGeometry.POSITION_DATA), TriangleSubGeometry.POSITION_FORMAT);\n\t\tcontext.drawTriangles(context.getIndexBuffer(renderable.getIndexData()), 0, renderable.numTriangles);\n\t}\n}\n\nexport = TriangleMaterialBase;", "class TriangleMaterialMode\n{\n\t/**\n\t *\n\t */\n\tpublic static SINGLE_PASS:string = \"singlePass\";\n\n\t/**\n\t *\n\t */\n\tpublic static MULTI_PASS:string = \"multiPass\";\n}\n\nexport = TriangleMaterialMode;", - "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport StaticLightPicker\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/StaticLightPicker\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport AmbientBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod\");\nimport DiffuseBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\nimport NormalBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/NormalBasicMethod\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\nimport SpecularBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\nimport TriangleMethodPass\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/TriangleMethodPass\");\nimport TriangleMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialBase\");\nimport TriangleMaterialMode\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialMode\");\n\n/**\n * TriangleMethodMaterial forms an abstract base class for the default shaded materials provided by Stage,\n * using material methods to define their appearance.\n */\nclass TriangleMethodMaterial extends TriangleMaterialBase\n{\n\tprivate _alphaBlending:boolean = false;\n\tprivate _alpha:number = 1;\n\tprivate _colorTransform:ColorTransform;\n\tprivate _materialMode:string;\n\tprivate _casterLightPass:TriangleMethodPass;\n\tprivate _nonCasterLightPasses:Array;\n\tprivate _screenPass:TriangleMethodPass;\n\n\tprivate _ambientMethod:AmbientBasicMethod = new AmbientBasicMethod();\n\tprivate _shadowMethod:ShadowMapMethodBase;\n\tprivate _diffuseMethod:DiffuseBasicMethod = new DiffuseBasicMethod();\n\tprivate _normalMethod:NormalBasicMethod = new NormalBasicMethod();\n\tprivate _specularMethod:SpecularBasicMethod = new SpecularBasicMethod();\n\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\t/**\n\t * Creates a new TriangleMethodMaterial object.\n\t *\n\t * @param texture The texture used for the material's albedo color.\n\t * @param smooth Indicates whether the texture should be filtered when sampled. Defaults to true.\n\t * @param repeat Indicates whether the texture should be tiled when sampled. Defaults to false.\n\t * @param mipmap Indicates whether or not any used textures should use mipmapping. Defaults to false.\n\t */\n\tconstructor(texture?:Texture2DBase, smooth?:boolean, repeat?:boolean, mipmap?:boolean);\n\tconstructor(color?:number, alpha?:number);\n\tconstructor(textureColor:any = null, smoothAlpha:any = null, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._materialMode = TriangleMaterialMode.SINGLE_PASS;\n\n\t\tif (textureColor instanceof Texture2DBase) {\n\t\t\tthis.texture = textureColor;\n\n\t\t\tthis.smooth = (smoothAlpha == null)? true : false;\n\t\t\tthis.repeat = repeat;\n\t\t\tthis.mipmap = mipmap;\n\t\t} else {\n\t\t\tthis.color = (textureColor == null)? 0xFFFFFF : Number(textureColor);\n\t\t\tthis.alpha = (smoothAlpha == null)? 1 : Number(smoothAlpha);\n\t\t}\n\t}\n\n\n\tpublic get materialMode():string\n\t{\n\t\treturn this._materialMode;\n\t}\n\n\tpublic set materialMode(value:string)\n\t{\n\t\tif (this._materialMode == value)\n\t\t\treturn;\n\n\t\tthis._materialMode = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tif (this._depthCompareMode == value)\n\t\t\treturn;\n\n\t\tthis._depthCompareMode = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The alpha of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (value > 1)\n\t\t\tvalue = 1;\n\t\telse if (value < 0)\n\t\t\tvalue = 0;\n\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tif (this._colorTransform == null)\n\t\t\tthis._colorTransform = new ColorTransform();\n\n\t\tthis._colorTransform.alphaMultiplier = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this._screenPass.colorTransform;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tthis._screenPass.colorTransform = value;\n\t}\n\n\t/**\n\t * The texture object to use for the ambient colour.\n\t */\n\tpublic get diffuseTexture():Texture2DBase\n\t{\n\t\treturn this._diffuseMethod.texture;\n\t}\n\n\tpublic set diffuseTexture(value:Texture2DBase)\n\t{\n\t\tthis._diffuseMethod.texture = value;\n\t}\n\n\t/**\n\t * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod.\n\t */\n\tpublic get ambientMethod():AmbientBasicMethod\n\t{\n\t\treturn this._ambientMethod;\n\t}\n\n\tpublic set ambientMethod(value:AmbientBasicMethod)\n\t{\n\t\tif (this._ambientMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._ambientMethod)\n\t\t\tvalue.copyFrom(this._ambientMethod);\n\n\t\tthis._ambientMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null.\n\t */\n\tpublic get shadowMethod():ShadowMapMethodBase\n\t{\n\t\treturn this._shadowMethod;\n\t}\n\n\tpublic set shadowMethod(value:ShadowMapMethodBase)\n\t{\n\t\tif (this._shadowMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._shadowMethod)\n\t\t\tvalue.copyFrom(this._shadowMethod);\n\n\t\tthis._shadowMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod.\n\t */\n\tpublic get diffuseMethod():DiffuseBasicMethod\n\t{\n\t\treturn this._diffuseMethod;\n\t}\n\n\tpublic set diffuseMethod(value:DiffuseBasicMethod)\n\t{\n\t\tif (this._diffuseMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._diffuseMethod)\n\t\t\tvalue.copyFrom(this._diffuseMethod);\n\n\t\tthis._diffuseMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod.\n\t */\n\tpublic get specularMethod():SpecularBasicMethod\n\t{\n\t\treturn this._specularMethod;\n\t}\n\n\tpublic set specularMethod(value:SpecularBasicMethod)\n\t{\n\t\tif (this._specularMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._specularMethod)\n\t\t\tvalue.copyFrom(this._specularMethod);\n\n\t\tthis._specularMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod.\n\t */\n\tpublic get normalMethod():NormalBasicMethod\n\t{\n\t\treturn this._normalMethod;\n\t}\n\n\tpublic set normalMethod(value:NormalBasicMethod)\n\t{\n\t\tif (this._normalMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._normalMethod)\n\t\t\tvalue.copyFrom(this._normalMethod);\n\n\t\tthis._normalMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * Appends an \"effect\" shading method to the shader. Effect methods are those that do not influence the lighting\n\t * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the\n\t * methods added prior.\n\t */\n\tpublic addEffectMethod(method:EffectMethodBase)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tthis._screenPass.addEffectMethod(method);\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The number of \"effect\" methods added to the material.\n\t */\n\tpublic get numEffectMethods():number\n\t{\n\t\treturn this._screenPass? this._screenPass.numEffectMethods : 0;\n\t}\n\n\t/**\n\t * Queries whether a given effect method was added to the material.\n\t *\n\t * @param method The method to be queried.\n\t * @return true if the method was added to the material, false otherwise.\n\t */\n\tpublic hasEffectMethod(method:EffectMethodBase):boolean\n\t{\n\t\treturn this._screenPass? this._screenPass.hasEffectMethod(method) : false;\n\t}\n\n\t/**\n\t * Returns the method added at the given index.\n\t * @param index The index of the method to retrieve.\n\t * @return The method at the given index.\n\t */\n\tpublic getEffectMethodAt(index:number):EffectMethodBase\n\t{\n\t\tif (this._screenPass == null)\n\t\t\treturn null;\n\n\t\treturn this._screenPass.getEffectMethodAt(index);\n\t}\n\n\t/**\n\t * Adds an effect method at the specified index amongst the methods already added to the material. Effect\n\t * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines,\n\t * etc. The method will be applied to the result of the methods with a lower index.\n\t */\n\tpublic addEffectMethodAt(method:EffectMethodBase, index:number)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tthis._screenPass.addEffectMethodAt(method, index);\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * Removes an effect method from the material.\n\t * @param method The method to be removed.\n\t */\n\tpublic removeEffectMethod(method:EffectMethodBase)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\treturn;\n\n\t\tthis._screenPass.removeEffectMethod(method);\n\n\t\t// reconsider\n\t\tif (this._screenPass.numEffectMethods == 0)\n\t\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The normal map to modulate the direction of the surface for each texel. The default normal method expects\n\t * tangent-space normal maps, but others could expect object-space maps.\n\t */\n\tpublic get normalMap():Texture2DBase\n\t{\n\t\treturn this._normalMethod.normalMap;\n\t}\n\n\tpublic set normalMap(value:Texture2DBase)\n\t{\n\t\tthis._normalMethod.normalMap = value;\n\t}\n\n\t/**\n\t * A specular map that defines the strength of specular reflections for each texel in the red channel,\n\t * and the gloss factor in the green channel. You can use SpecularBitmapTexture if you want to easily set\n\t * specular and gloss maps from grayscale images, but correctly authored images are preferred.\n\t */\n\tpublic get specularMap():Texture2DBase\n\t{\n\t\treturn this._specularMethod.texture;\n\t}\n\n\tpublic set specularMap(value:Texture2DBase)\n\t{\n\t\tthis._specularMethod.texture = value;\n\t}\n\n\t/**\n\t * The glossiness of the material (sharpness of the specular highlight).\n\t */\n\tpublic get gloss():number\n\t{\n\t\treturn this._specularMethod.gloss;\n\t}\n\n\tpublic set gloss(value:number)\n\t{\n\t\tthis._specularMethod.gloss = value;\n\t}\n\n\t/**\n\t * The strength of the ambient reflection.\n\t */\n\tpublic get ambient():number\n\t{\n\t\treturn this._ambientMethod.ambient;\n\t}\n\n\tpublic set ambient(value:number)\n\t{\n\t\tthis._ambientMethod.ambient = value;\n\t}\n\n\t/**\n\t * The overall strength of the specular reflection.\n\t */\n\tpublic get specular():number\n\t{\n\t\treturn this._specularMethod.specular;\n\t}\n\n\tpublic set specular(value:number)\n\t{\n\t\tthis._specularMethod.specular = value;\n\t}\n\n\t/**\n\t * The colour of the ambient reflection.\n\t */\n\tpublic get ambientColor():number\n\t{\n\t\treturn this._diffuseMethod.ambientColor;\n\t}\n\n\tpublic set ambientColor(value:number)\n\t{\n\t\tthis._diffuseMethod.ambientColor = value;\n\t}\n\n\t/**\n\t * The colour of the diffuse reflection.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseMethod.diffuseColor;\n\t}\n\n\tpublic set diffuseColor(value:number)\n\t{\n\t\tthis._diffuseMethod.diffuseColor = value;\n\t}\n\n\t/**\n\t * The colour of the specular reflection.\n\t */\n\tpublic get specularColor():number\n\t{\n\t\treturn this._specularMethod.specularColor;\n\t}\n\n\tpublic set specularColor(value:number)\n\t{\n\t\tthis._specularMethod.specularColor = value;\n\t}\n\n\t/**\n\t * Indicates whether or not the material has transparency. If binary transparency is sufficient, for\n\t * example when using textures of foliage, consider using alphaThreshold instead.\n\t */\n\n\tpublic get alphaBlending():boolean\n\t{\n\t\treturn this._alphaBlending;\n\t}\n\n\tpublic set alphaBlending(value:boolean)\n\t{\n\t\tif (this._alphaBlending == value)\n\t\t\treturn;\n\n\t\tthis._alphaBlending = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iUpdateMaterial()\n\t{\n\t\tif (this._pScreenPassesInvalid) {\n\t\t\t//Updates screen passes when they were found to be invalid.\n\t\t\tthis._pScreenPassesInvalid = false;\n\n\t\t\tthis.initPasses();\n\n\t\t\tthis.setBlendAndCompareModes();\n\n\t\t\tthis._pClearScreenPasses();\n\n\t\t\tif (this._materialMode == TriangleMaterialMode.MULTI_PASS) {\n\t\t\t\tif (this._casterLightPass)\n\t\t\t\t\tthis._pAddScreenPass(this._casterLightPass);\n\n\t\t\t\tif (this._nonCasterLightPasses)\n\t\t\t\t\tfor (var i:number = 0; i < this._nonCasterLightPasses.length; ++i)\n\t\t\t\t\t\tthis._pAddScreenPass(this._nonCasterLightPasses[i]);\n\t\t\t}\n\n\t\t\tif (this._screenPass)\n\t\t\t\tthis._pAddScreenPass(this._screenPass);\n\t\t}\n\t}\n\n\t/**\n\t * Initializes all the passes and their dependent passes.\n\t */\n\tprivate initPasses()\n\t{\n\t\t// let the effects pass handle everything if there are no lights, when there are effect methods applied\n\t\t// after shading, or when the material mode is single pass.\n\t\tif (this.numLights == 0 || this.numEffectMethods > 0 || this._materialMode == TriangleMaterialMode.SINGLE_PASS)\n\t\t\tthis.initEffectPass();\n\t\telse if (this._screenPass)\n\t\t\tthis.removeEffectPass();\n\n\t\t// only use a caster light pass if shadows need to be rendered\n\t\tif (this._shadowMethod && this._materialMode == TriangleMaterialMode.MULTI_PASS)\n\t\t\tthis.initCasterLightPass();\n\t\telse if (this._casterLightPass)\n\t\t\tthis.removeCasterLightPass();\n\n\t\t// only use non caster light passes if there are lights that don't cast\n\t\tif (this.numNonCasters > 0 && this._materialMode == TriangleMaterialMode.MULTI_PASS)\n\t\t\tthis.initNonCasterLightPasses();\n\t\telse if (this._nonCasterLightPasses)\n\t\t\tthis.removeNonCasterLightPasses();\n\t}\n\n\t/**\n\t * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes.\n\t */\n\tprivate setBlendAndCompareModes()\n\t{\n\t\tvar forceSeparateMVP:boolean = Boolean(this._casterLightPass || this._screenPass);\n\n\t\t// caster light pass is always first if it exists, hence it uses normal blending\n\t\tif (this._casterLightPass) {\n\t\t\tthis._casterLightPass.forceSeparateMVP = forceSeparateMVP;\n\t\t\tthis._casterLightPass.setBlendMode(BlendMode.NORMAL);\n\t\t\tthis._casterLightPass.depthCompareMode = this._depthCompareMode;\n\t\t}\n\n\t\tif (this._nonCasterLightPasses) {\n\t\t\tvar firstAdditiveIndex:number = 0;\n\n\t\t\t// if there's no caster light pass, the first non caster light pass will be the first\n\t\t\t// and should use normal blending\n\t\t\tif (!this._casterLightPass) {\n\t\t\t\tthis._nonCasterLightPasses[0].forceSeparateMVP = forceSeparateMVP;\n\t\t\t\tthis._nonCasterLightPasses[0].setBlendMode(BlendMode.NORMAL);\n\t\t\t\tthis._nonCasterLightPasses[0].depthCompareMode = this._depthCompareMode;\n\t\t\t\tfirstAdditiveIndex = 1;\n\t\t\t}\n\n\t\t\t// all lighting passes following the first light pass should use additive blending\n\t\t\tfor (var i:number = firstAdditiveIndex; i < this._nonCasterLightPasses.length; ++i) {\n\t\t\t\tthis._nonCasterLightPasses[i].forceSeparateMVP = forceSeparateMVP;\n\t\t\t\tthis._nonCasterLightPasses[i].setBlendMode(BlendMode.ADD);\n\t\t\t\tthis._nonCasterLightPasses[i].depthCompareMode = ContextGLCompareMode.LESS_EQUAL;\n\t\t\t}\n\t\t}\n\n\t\tif (this._casterLightPass || this._nonCasterLightPasses) {\n\t\t\t//cannot be blended by blendmode property if multipass enabled\n\t\t\tthis._pRequiresBlending = false;\n\n\t\t\t// there are light passes, so this should be blended in\n\t\t\tif (this._screenPass) {\n\t\t\t\tthis._screenPass.passMode = MaterialPassMode.EFFECTS;\n\t\t\t\tthis._screenPass.depthCompareMode = ContextGLCompareMode.LESS_EQUAL;\n\t\t\t\tthis._screenPass.setBlendMode(BlendMode.LAYER);\n\t\t\t\tthis._screenPass.forceSeparateMVP = forceSeparateMVP;\n\t\t\t}\n\n\t\t} else if (this._screenPass) {\n\t\t\tthis._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || (this._colorTransform && this._colorTransform.alphaMultiplier < 1));\n\t\t\t// effects pass is the only pass, so it should just blend normally\n\t\t\tthis._screenPass.passMode = MaterialPassMode.SUPER_SHADER;\n\t\t\tthis._screenPass.depthCompareMode = this._depthCompareMode;\n\t\t\tthis._screenPass.preserveAlpha = this._pRequiresBlending;\n\t\t\tthis._screenPass.colorTransform = this._colorTransform;\n\t\t\tthis._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending)? BlendMode.LAYER : this._pBlendMode);\n\t\t\tthis._screenPass.forceSeparateMVP = false;\n\t\t}\n\t}\n\n\tprivate initCasterLightPass()\n\t{\n\n\t\tif (this._casterLightPass == null)\n\t\t\tthis._casterLightPass = new TriangleMethodPass(MaterialPassMode.LIGHTING);\n\n\t\tthis._casterLightPass.lightPicker = new StaticLightPicker([this._shadowMethod.castingLight]);\n\t\tthis._casterLightPass.shadowMethod = this._shadowMethod;\n\t\tthis._casterLightPass.diffuseMethod = this._diffuseMethod;\n\t\tthis._casterLightPass.ambientMethod = this._ambientMethod;\n\t\tthis._casterLightPass.normalMethod = this._normalMethod;\n\t\tthis._casterLightPass.specularMethod = this._specularMethod;\n\t}\n\n\tprivate removeCasterLightPass()\n\t{\n\t\tthis._casterLightPass.dispose();\n\t\tthis._pRemoveScreenPass(this._casterLightPass);\n\t\tthis._casterLightPass = null;\n\t}\n\n\tprivate initNonCasterLightPasses()\n\t{\n\t\tthis.removeNonCasterLightPasses();\n\t\tvar pass:TriangleMethodPass;\n\t\tvar numDirLights:number = this._pLightPicker.numDirectionalLights;\n\t\tvar numPointLights:number = this._pLightPicker.numPointLights;\n\t\tvar numLightProbes:number = this._pLightPicker.numLightProbes;\n\t\tvar dirLightOffset:number = 0;\n\t\tvar pointLightOffset:number = 0;\n\t\tvar probeOffset:number = 0;\n\n\t\tif (!this._casterLightPass) {\n\t\t\tnumDirLights += this._pLightPicker.numCastingDirectionalLights;\n\t\t\tnumPointLights += this._pLightPicker.numCastingPointLights;\n\t\t}\n\n\t\tthis._nonCasterLightPasses = new Array();\n\n\t\twhile (dirLightOffset < numDirLights || pointLightOffset < numPointLights || probeOffset < numLightProbes) {\n\t\t\tpass = new TriangleMethodPass(MaterialPassMode.LIGHTING);\n\t\t\tpass.includeCasters = this._shadowMethod == null;\n\t\t\tpass.directionalLightsOffset = dirLightOffset;\n\t\t\tpass.pointLightsOffset = pointLightOffset;\n\t\t\tpass.lightProbesOffset = probeOffset;\n\t\t\tpass.lightPicker = this._pLightPicker;\n\t\t\tpass.diffuseMethod = this._diffuseMethod;\n\t\t\tpass.ambientMethod = this._ambientMethod;\n\t\t\tpass.normalMethod = this._normalMethod;\n\t\t\tpass.specularMethod = this._specularMethod;\n\t\t\tthis._nonCasterLightPasses.push(pass);\n\n\t\t\tdirLightOffset += pass.iNumDirectionalLights;\n\t\t\tpointLightOffset += pass.iNumPointLights;\n\t\t\tprobeOffset += pass.iNumLightProbes;\n\t\t}\n\t}\n\n\tprivate removeNonCasterLightPasses()\n\t{\n\t\tif (!this._nonCasterLightPasses)\n\t\t\treturn;\n\n\t\tfor (var i:number = 0; i < this._nonCasterLightPasses.length; ++i)\n\t\t\tthis._pRemoveScreenPass(this._nonCasterLightPasses[i]);\n\n\t\tthis._nonCasterLightPasses = null;\n\t}\n\n\tprivate removeEffectPass()\n\t{\n\t\tif (this._screenPass.ambientMethod != this._ambientMethod)\n\t\t\tthis._screenPass.ambientMethod.dispose();\n\n\t\tif (this._screenPass.diffuseMethod != this._diffuseMethod)\n\t\t\tthis._screenPass.diffuseMethod.dispose();\n\n\t\tif (this._screenPass.specularMethod != this._specularMethod)\n\t\t\tthis._screenPass.specularMethod.dispose();\n\n\t\tif (this._screenPass.normalMethod != this._normalMethod)\n\t\t\tthis._screenPass.normalMethod.dispose();\n\n\t\tthis._pRemoveScreenPass(this._screenPass);\n\t\tthis._screenPass = null;\n\t}\n\n\tprivate initEffectPass()\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tif (this._materialMode == TriangleMaterialMode.SINGLE_PASS) {\n\t\t\tthis._screenPass.ambientMethod = this._ambientMethod;\n\t\t\tthis._screenPass.diffuseMethod = this._diffuseMethod;\n\t\t\tthis._screenPass.specularMethod = this._specularMethod;\n\t\t\tthis._screenPass.normalMethod = this._normalMethod;\n\t\t\tthis._screenPass.shadowMethod = this._shadowMethod;\n\t\t} else if (this._materialMode == TriangleMaterialMode.MULTI_PASS) {\n\t\t\tif (this.numLights == 0) {\n\t\t\t\tthis._screenPass.ambientMethod = this._ambientMethod;\n\t\t\t} else {\n\t\t\t\tthis._screenPass.ambientMethod = null;\n\t\t\t}\n\n\t\t\tthis._screenPass.preserveAlpha = false;\n\t\t\tthis._screenPass.normalMethod = this._normalMethod;\n\t\t}\n\t}\n\n\t/**\n\t * The maximum total number of lights provided by the light picker.\n\t */\n\tprivate get numLights():number\n\t{\n\t\treturn this._pLightPicker? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights + this._pLightPicker.numCastingDirectionalLights + this._pLightPicker.numCastingPointLights : 0;\n\t}\n\n\t/**\n\t * The amount of lights that don't cast shadows.\n\t */\n\tprivate get numNonCasters():number\n\t{\n\t\treturn this._pLightPicker? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights : 0;\n\t}\n}\n\nexport = TriangleMethodMaterial;", + "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport StaticLightPicker\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/StaticLightPicker\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport AmbientBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod\");\nimport DiffuseBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\nimport NormalBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/NormalBasicMethod\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\nimport SpecularBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\nimport TriangleMethodPass\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/TriangleMethodPass\");\nimport TriangleMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialBase\");\nimport TriangleMaterialMode\t\t\t= require(\"awayjs-stagegl/lib/materials/TriangleMaterialMode\");\n\n/**\n * TriangleMethodMaterial forms an abstract base class for the default shaded materials provided by Stage,\n * using material methods to define their appearance.\n */\nclass TriangleMethodMaterial extends TriangleMaterialBase\n{\n\tprivate _alphaBlending:boolean = false;\n\tprivate _alpha:number = 1;\n\tprivate _colorTransform:ColorTransform;\n\tprivate _materialMode:string;\n\tprivate _casterLightPass:TriangleMethodPass;\n\tprivate _nonCasterLightPasses:Array;\n\tprivate _screenPass:TriangleMethodPass;\n\n\tprivate _ambientMethod:AmbientBasicMethod = new AmbientBasicMethod();\n\tprivate _shadowMethod:ShadowMapMethodBase;\n\tprivate _diffuseMethod:DiffuseBasicMethod = new DiffuseBasicMethod();\n\tprivate _normalMethod:NormalBasicMethod = new NormalBasicMethod();\n\tprivate _specularMethod:SpecularBasicMethod = new SpecularBasicMethod();\n\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\t/**\n\t * Creates a new TriangleMethodMaterial object.\n\t *\n\t * @param texture The texture used for the material's albedo color.\n\t * @param smooth Indicates whether the texture should be filtered when sampled. Defaults to true.\n\t * @param repeat Indicates whether the texture should be tiled when sampled. Defaults to false.\n\t * @param mipmap Indicates whether or not any used textures should use mipmapping. Defaults to false.\n\t */\n\tconstructor(texture?:Texture2DBase, smooth?:boolean, repeat?:boolean, mipmap?:boolean);\n\tconstructor(color?:number, alpha?:number);\n\tconstructor(textureColor:any = null, smoothAlpha:any = null, repeat:boolean = false, mipmap:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._materialMode = TriangleMaterialMode.SINGLE_PASS;\n\n\t\tif (textureColor instanceof Texture2DBase) {\n\t\t\tthis.texture = textureColor;\n\n\t\t\tthis.smooth = (smoothAlpha == null)? true : false;\n\t\t\tthis.repeat = repeat;\n\t\t\tthis.mipmap = mipmap;\n\t\t} else {\n\t\t\tthis.color = (textureColor == null)? 0xFFFFFF : Number(textureColor);\n\t\t\tthis.alpha = (smoothAlpha == null)? 1 : Number(smoothAlpha);\n\t\t}\n\t}\n\n\n\tpublic get materialMode():string\n\t{\n\t\treturn this._materialMode;\n\t}\n\n\tpublic set materialMode(value:string)\n\t{\n\t\tif (this._materialMode == value)\n\t\t\treturn;\n\n\t\tthis._materialMode = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tif (this._depthCompareMode == value)\n\t\t\treturn;\n\n\t\tthis._depthCompareMode = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The alpha of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (value > 1)\n\t\t\tvalue = 1;\n\t\telse if (value < 0)\n\t\t\tvalue = 0;\n\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tif (this._colorTransform == null)\n\t\t\tthis._colorTransform = new ColorTransform();\n\n\t\tthis._colorTransform.alphaMultiplier = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this._screenPass.colorTransform;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tthis._screenPass.colorTransform = value;\n\t}\n\n\t/**\n\t * The texture object to use for the ambient colour.\n\t */\n\tpublic get diffuseTexture():Texture2DBase\n\t{\n\t\treturn this._diffuseMethod.texture;\n\t}\n\n\tpublic set diffuseTexture(value:Texture2DBase)\n\t{\n\t\tthis._diffuseMethod.texture = value;\n\t}\n\n\t/**\n\t * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod.\n\t */\n\tpublic get ambientMethod():AmbientBasicMethod\n\t{\n\t\treturn this._ambientMethod;\n\t}\n\n\tpublic set ambientMethod(value:AmbientBasicMethod)\n\t{\n\t\tif (this._ambientMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._ambientMethod)\n\t\t\tvalue.copyFrom(this._ambientMethod);\n\n\t\tthis._ambientMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null.\n\t */\n\tpublic get shadowMethod():ShadowMapMethodBase\n\t{\n\t\treturn this._shadowMethod;\n\t}\n\n\tpublic set shadowMethod(value:ShadowMapMethodBase)\n\t{\n\t\tif (this._shadowMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._shadowMethod)\n\t\t\tvalue.copyFrom(this._shadowMethod);\n\n\t\tthis._shadowMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod.\n\t */\n\tpublic get diffuseMethod():DiffuseBasicMethod\n\t{\n\t\treturn this._diffuseMethod;\n\t}\n\n\tpublic set diffuseMethod(value:DiffuseBasicMethod)\n\t{\n\t\tif (this._diffuseMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._diffuseMethod)\n\t\t\tvalue.copyFrom(this._diffuseMethod);\n\n\t\tthis._diffuseMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod.\n\t */\n\tpublic get specularMethod():SpecularBasicMethod\n\t{\n\t\treturn this._specularMethod;\n\t}\n\n\tpublic set specularMethod(value:SpecularBasicMethod)\n\t{\n\t\tif (this._specularMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._specularMethod)\n\t\t\tvalue.copyFrom(this._specularMethod);\n\n\t\tthis._specularMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod.\n\t */\n\tpublic get normalMethod():NormalBasicMethod\n\t{\n\t\treturn this._normalMethod;\n\t}\n\n\tpublic set normalMethod(value:NormalBasicMethod)\n\t{\n\t\tif (this._normalMethod == value)\n\t\t\treturn;\n\n\t\tif (value && this._normalMethod)\n\t\t\tvalue.copyFrom(this._normalMethod);\n\n\t\tthis._normalMethod = value;\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * Appends an \"effect\" shading method to the shader. Effect methods are those that do not influence the lighting\n\t * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the\n\t * methods added prior.\n\t */\n\tpublic addEffectMethod(method:EffectMethodBase)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tthis._screenPass.addEffectMethod(method);\n\n\t\tthis._pInvalidateScreenPasses();\n\t}\n\n\t/**\n\t * The number of \"effect\" methods added to the material.\n\t */\n\tpublic get numEffectMethods():number\n\t{\n\t\treturn this._screenPass? this._screenPass.numEffectMethods : 0;\n\t}\n\n\t/**\n\t * Queries whether a given effect method was added to the material.\n\t *\n\t * @param method The method to be queried.\n\t * @return true if the method was added to the material, false otherwise.\n\t */\n\tpublic hasEffectMethod(method:EffectMethodBase):boolean\n\t{\n\t\treturn this._screenPass? this._screenPass.hasEffectMethod(method) : false;\n\t}\n\n\t/**\n\t * Returns the method added at the given index.\n\t * @param index The index of the method to retrieve.\n\t * @return The method at the given index.\n\t */\n\tpublic getEffectMethodAt(index:number):EffectMethodBase\n\t{\n\t\tif (this._screenPass == null)\n\t\t\treturn null;\n\n\t\treturn this._screenPass.getEffectMethodAt(index);\n\t}\n\n\t/**\n\t * Adds an effect method at the specified index amongst the methods already added to the material. Effect\n\t * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines,\n\t * etc. The method will be applied to the result of the methods with a lower index.\n\t */\n\tpublic addEffectMethodAt(method:EffectMethodBase, index:number)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tthis._screenPass.addEffectMethodAt(method, index);\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * Removes an effect method from the material.\n\t * @param method The method to be removed.\n\t */\n\tpublic removeEffectMethod(method:EffectMethodBase)\n\t{\n\t\tif (this._screenPass == null)\n\t\t\treturn;\n\n\t\tthis._screenPass.removeEffectMethod(method);\n\n\t\t// reconsider\n\t\tif (this._screenPass.numEffectMethods == 0)\n\t\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * The normal map to modulate the direction of the surface for each texel. The default normal method expects\n\t * tangent-space normal maps, but others could expect object-space maps.\n\t */\n\tpublic get normalMap():Texture2DBase\n\t{\n\t\treturn this._normalMethod.normalMap;\n\t}\n\n\tpublic set normalMap(value:Texture2DBase)\n\t{\n\t\tthis._normalMethod.normalMap = value;\n\t}\n\n\t/**\n\t * A specular map that defines the strength of specular reflections for each texel in the red channel,\n\t * and the gloss factor in the green channel. You can use SpecularBitmapTexture if you want to easily set\n\t * specular and gloss maps from grayscale images, but correctly authored images are preferred.\n\t */\n\tpublic get specularMap():Texture2DBase\n\t{\n\t\treturn this._specularMethod.texture;\n\t}\n\n\tpublic set specularMap(value:Texture2DBase)\n\t{\n\t\tthis._specularMethod.texture = value;\n\t}\n\n\t/**\n\t * The glossiness of the material (sharpness of the specular highlight).\n\t */\n\tpublic get gloss():number\n\t{\n\t\treturn this._specularMethod.gloss;\n\t}\n\n\tpublic set gloss(value:number)\n\t{\n\t\tthis._specularMethod.gloss = value;\n\t}\n\n\t/**\n\t * The strength of the ambient reflection.\n\t */\n\tpublic get ambient():number\n\t{\n\t\treturn this._ambientMethod.ambient;\n\t}\n\n\tpublic set ambient(value:number)\n\t{\n\t\tthis._ambientMethod.ambient = value;\n\t}\n\n\t/**\n\t * The overall strength of the specular reflection.\n\t */\n\tpublic get specular():number\n\t{\n\t\treturn this._specularMethod.specular;\n\t}\n\n\tpublic set specular(value:number)\n\t{\n\t\tthis._specularMethod.specular = value;\n\t}\n\n\t/**\n\t * The colour of the ambient reflection.\n\t */\n\tpublic get ambientColor():number\n\t{\n\t\treturn this._diffuseMethod.ambientColor;\n\t}\n\n\tpublic set ambientColor(value:number)\n\t{\n\t\tthis._diffuseMethod.ambientColor = value;\n\t}\n\n\t/**\n\t * The colour of the diffuse reflection.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseMethod.diffuseColor;\n\t}\n\n\tpublic set diffuseColor(value:number)\n\t{\n\t\tthis._diffuseMethod.diffuseColor = value;\n\t}\n\n\t/**\n\t * The colour of the specular reflection.\n\t */\n\tpublic get specularColor():number\n\t{\n\t\treturn this._specularMethod.specularColor;\n\t}\n\n\tpublic set specularColor(value:number)\n\t{\n\t\tthis._specularMethod.specularColor = value;\n\t}\n\n\t/**\n\t * Indicates whether or not the material has transparency. If binary transparency is sufficient, for\n\t * example when using textures of foliage, consider using alphaThreshold instead.\n\t */\n\n\tpublic get alphaBlending():boolean\n\t{\n\t\treturn this._alphaBlending;\n\t}\n\n\tpublic set alphaBlending(value:boolean)\n\t{\n\t\tif (this._alphaBlending == value)\n\t\t\treturn;\n\n\t\tthis._alphaBlending = value;\n\n\t\tthis._pInvalidatePasses();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iUpdateMaterial()\n\t{\n\t\tif (this._pScreenPassesInvalid) {\n\t\t\t//Updates screen passes when they were found to be invalid.\n\t\t\tthis._pScreenPassesInvalid = false;\n\n\t\t\tthis.initPasses();\n\n\t\t\tthis.setBlendAndCompareModes();\n\n\t\t\tthis._pClearScreenPasses();\n\n\t\t\tif (this._materialMode == TriangleMaterialMode.MULTI_PASS) {\n\t\t\t\tif (this._casterLightPass)\n\t\t\t\t\tthis._pAddScreenPass(this._casterLightPass);\n\n\t\t\t\tif (this._nonCasterLightPasses)\n\t\t\t\t\tfor (var i:number = 0; i < this._nonCasterLightPasses.length; ++i)\n\t\t\t\t\t\tthis._pAddScreenPass(this._nonCasterLightPasses[i]);\n\t\t\t}\n\n\t\t\tif (this._screenPass)\n\t\t\t\tthis._pAddScreenPass(this._screenPass);\n\t\t}\n\t}\n\n\t/**\n\t * Initializes all the passes and their dependent passes.\n\t */\n\tprivate initPasses()\n\t{\n\t\t// let the effects pass handle everything if there are no lights, when there are effect methods applied\n\t\t// after shading, or when the material mode is single pass.\n\t\tif (this.numLights == 0 || this.numEffectMethods > 0 || this._materialMode == TriangleMaterialMode.SINGLE_PASS)\n\t\t\tthis.initEffectPass();\n\t\telse if (this._screenPass)\n\t\t\tthis.removeEffectPass();\n\n\t\t// only use a caster light pass if shadows need to be rendered\n\t\tif (this._shadowMethod && this._materialMode == TriangleMaterialMode.MULTI_PASS)\n\t\t\tthis.initCasterLightPass();\n\t\telse if (this._casterLightPass)\n\t\t\tthis.removeCasterLightPass();\n\n\t\t// only use non caster light passes if there are lights that don't cast\n\t\tif (this.numNonCasters > 0 && this._materialMode == TriangleMaterialMode.MULTI_PASS)\n\t\t\tthis.initNonCasterLightPasses();\n\t\telse if (this._nonCasterLightPasses)\n\t\t\tthis.removeNonCasterLightPasses();\n\t}\n\n\t/**\n\t * Sets up the various blending modes for all screen passes, based on whether or not there are previous passes.\n\t */\n\tprivate setBlendAndCompareModes()\n\t{\n\t\tvar forceSeparateMVP:boolean = Boolean(this._casterLightPass || this._screenPass);\n\n\t\t// caster light pass is always first if it exists, hence it uses normal blending\n\t\tif (this._casterLightPass) {\n\t\t\tthis._casterLightPass.forceSeparateMVP = forceSeparateMVP;\n\t\t\tthis._casterLightPass.setBlendMode(BlendMode.NORMAL);\n\t\t\tthis._casterLightPass.depthCompareMode = this._depthCompareMode;\n\t\t}\n\n\t\tif (this._nonCasterLightPasses) {\n\t\t\tvar firstAdditiveIndex:number = 0;\n\n\t\t\t// if there's no caster light pass, the first non caster light pass will be the first\n\t\t\t// and should use normal blending\n\t\t\tif (!this._casterLightPass) {\n\t\t\t\tthis._nonCasterLightPasses[0].forceSeparateMVP = forceSeparateMVP;\n\t\t\t\tthis._nonCasterLightPasses[0].setBlendMode(BlendMode.NORMAL);\n\t\t\t\tthis._nonCasterLightPasses[0].depthCompareMode = this._depthCompareMode;\n\t\t\t\tfirstAdditiveIndex = 1;\n\t\t\t}\n\n\t\t\t// all lighting passes following the first light pass should use additive blending\n\t\t\tfor (var i:number = firstAdditiveIndex; i < this._nonCasterLightPasses.length; ++i) {\n\t\t\t\tthis._nonCasterLightPasses[i].forceSeparateMVP = forceSeparateMVP;\n\t\t\t\tthis._nonCasterLightPasses[i].setBlendMode(BlendMode.ADD);\n\t\t\t\tthis._nonCasterLightPasses[i].depthCompareMode = ContextGLCompareMode.LESS_EQUAL;\n\t\t\t}\n\t\t}\n\n\t\tif (this._casterLightPass || this._nonCasterLightPasses) {\n\t\t\t//cannot be blended by blendmode property if multipass enabled\n\t\t\tthis._pRequiresBlending = false;\n\n\t\t\t// there are light passes, so this should be blended in\n\t\t\tif (this._screenPass) {\n\t\t\t\tthis._screenPass.passMode = MaterialPassMode.EFFECTS;\n\t\t\t\tthis._screenPass.depthCompareMode = ContextGLCompareMode.LESS_EQUAL;\n\t\t\t\tthis._screenPass.setBlendMode(BlendMode.LAYER);\n\t\t\t\tthis._screenPass.forceSeparateMVP = forceSeparateMVP;\n\t\t\t}\n\n\t\t} else if (this._screenPass) {\n\t\t\tthis._pRequiresBlending = (this._pBlendMode != BlendMode.NORMAL || this._alphaBlending || (this._colorTransform && this._colorTransform.alphaMultiplier < 1));\n\t\t\t// effects pass is the only pass, so it should just blend normally\n\t\t\tthis._screenPass.passMode = MaterialPassMode.SUPER_SHADER;\n\t\t\tthis._screenPass.depthCompareMode = this._depthCompareMode;\n\t\t\tthis._screenPass.preserveAlpha = this._pRequiresBlending;\n\t\t\tthis._screenPass.colorTransform = this._colorTransform;\n\t\t\tthis._screenPass.setBlendMode((this._pBlendMode == BlendMode.NORMAL && this._pRequiresBlending)? BlendMode.LAYER : this._pBlendMode);\n\t\t\tthis._screenPass.forceSeparateMVP = false;\n\t\t}\n\t}\n\n\tprivate initCasterLightPass()\n\t{\n\n\t\tif (this._casterLightPass == null)\n\t\t\tthis._casterLightPass = new TriangleMethodPass(MaterialPassMode.LIGHTING);\n\n\t\tthis._casterLightPass.lightPicker = new StaticLightPicker([this._shadowMethod.castingLight]);\n\t\tthis._casterLightPass.shadowMethod = this._shadowMethod;\n\t\tthis._casterLightPass.diffuseMethod = this._diffuseMethod;\n\t\tthis._casterLightPass.ambientMethod = this._ambientMethod;\n\t\tthis._casterLightPass.normalMethod = this._normalMethod;\n\t\tthis._casterLightPass.specularMethod = this._specularMethod;\n\t}\n\n\tprivate removeCasterLightPass()\n\t{\n\t\tthis._casterLightPass.dispose();\n\t\tthis._pRemoveScreenPass(this._casterLightPass);\n\t\tthis._casterLightPass = null;\n\t}\n\n\tprivate initNonCasterLightPasses()\n\t{\n\t\tthis.removeNonCasterLightPasses();\n\t\tvar pass:TriangleMethodPass;\n\t\tvar numDirLights:number = this._pLightPicker.numDirectionalLights;\n\t\tvar numPointLights:number = this._pLightPicker.numPointLights;\n\t\tvar numLightProbes:number = this._pLightPicker.numLightProbes;\n\t\tvar dirLightOffset:number = 0;\n\t\tvar pointLightOffset:number = 0;\n\t\tvar probeOffset:number = 0;\n\n\t\tif (!this._casterLightPass) {\n\t\t\tnumDirLights += this._pLightPicker.numCastingDirectionalLights;\n\t\t\tnumPointLights += this._pLightPicker.numCastingPointLights;\n\t\t}\n\n\t\tthis._nonCasterLightPasses = new Array();\n\n\t\twhile (dirLightOffset < numDirLights || pointLightOffset < numPointLights || probeOffset < numLightProbes) {\n\t\t\tpass = new TriangleMethodPass(MaterialPassMode.LIGHTING);\n\t\t\tpass.includeCasters = this._shadowMethod == null;\n\t\t\tpass.directionalLightsOffset = dirLightOffset;\n\t\t\tpass.pointLightsOffset = pointLightOffset;\n\t\t\tpass.lightProbesOffset = probeOffset;\n\t\t\tpass.lightPicker = this._pLightPicker;\n\t\t\tpass.diffuseMethod = this._diffuseMethod;\n\t\t\tpass.ambientMethod = this._ambientMethod;\n\t\t\tpass.normalMethod = this._normalMethod;\n\t\t\tpass.specularMethod = this._specularMethod;\n\t\t\tthis._nonCasterLightPasses.push(pass);\n\n\t\t\tdirLightOffset += pass.iNumDirectionalLights;\n\t\t\tpointLightOffset += pass.iNumPointLights;\n\t\t\tprobeOffset += pass.iNumLightProbes;\n\t\t}\n\t}\n\n\tprivate removeNonCasterLightPasses()\n\t{\n\t\tif (!this._nonCasterLightPasses)\n\t\t\treturn;\n\n\t\tfor (var i:number = 0; i < this._nonCasterLightPasses.length; ++i)\n\t\t\tthis._pRemoveScreenPass(this._nonCasterLightPasses[i]);\n\n\t\tthis._nonCasterLightPasses = null;\n\t}\n\n\tprivate removeEffectPass()\n\t{\n\t\tif (this._screenPass.ambientMethod != this._ambientMethod)\n\t\t\tthis._screenPass.ambientMethod.dispose();\n\n\t\tif (this._screenPass.diffuseMethod != this._diffuseMethod)\n\t\t\tthis._screenPass.diffuseMethod.dispose();\n\n\t\tif (this._screenPass.specularMethod != this._specularMethod)\n\t\t\tthis._screenPass.specularMethod.dispose();\n\n\t\tif (this._screenPass.normalMethod != this._normalMethod)\n\t\t\tthis._screenPass.normalMethod.dispose();\n\n\t\tthis._pRemoveScreenPass(this._screenPass);\n\t\tthis._screenPass = null;\n\t}\n\n\tprivate initEffectPass()\n\t{\n\t\tif (this._screenPass == null)\n\t\t\tthis._screenPass = new TriangleMethodPass();\n\n\t\tif (this._materialMode == TriangleMaterialMode.SINGLE_PASS) {\n\t\t\tthis._screenPass.ambientMethod = this._ambientMethod;\n\t\t\tthis._screenPass.diffuseMethod = this._diffuseMethod;\n\t\t\tthis._screenPass.specularMethod = this._specularMethod;\n\t\t\tthis._screenPass.normalMethod = this._normalMethod;\n\t\t\tthis._screenPass.shadowMethod = this._shadowMethod;\n\t\t} else if (this._materialMode == TriangleMaterialMode.MULTI_PASS) {\n\t\t\tif (this.numLights == 0) {\n\t\t\t\tthis._screenPass.ambientMethod = this._ambientMethod;\n\t\t\t} else {\n\t\t\t\tthis._screenPass.ambientMethod = null;\n\t\t\t}\n\n\t\t\tthis._screenPass.preserveAlpha = false;\n\t\t\tthis._screenPass.normalMethod = this._normalMethod;\n\t\t}\n\t}\n\n\t/**\n\t * The maximum total number of lights provided by the light picker.\n\t */\n\tprivate get numLights():number\n\t{\n\t\treturn this._pLightPicker? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights + this._pLightPicker.numCastingDirectionalLights + this._pLightPicker.numCastingPointLights : 0;\n\t}\n\n\t/**\n\t * The amount of lights that don't cast shadows.\n\t */\n\tprivate get numNonCasters():number\n\t{\n\t\treturn this._pLightPicker? this._pLightPicker.numLightProbes + this._pLightPicker.numDirectionalLights + this._pLightPicker.numPointLights : 0;\n\t}\n}\n\nexport = TriangleMethodMaterial;", "import ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\n\n/**\n * MethodVO contains data for a given shader object for the use within a single material.\n * This allows shader methods to be shared across materials while their non-public state differs.\n */\nclass MethodVO\n{\n\tpublic useMethod:boolean = true;\n\n\tpublic method:ShadingMethodBase;\n\n\t// public register indices\n\tpublic texturesIndex:number;\n\tpublic secondaryTexturesIndex:number; // sometimes needed for composites\n\tpublic vertexConstantsIndex:number;\n\tpublic secondaryVertexConstantsIndex:number; // sometimes needed for composites\n\tpublic fragmentConstantsIndex:number;\n\tpublic secondaryFragmentConstantsIndex:number; // sometimes needed for composites\n\n\t// internal stuff for the material to know before assembling code\n\tpublic needsProjection:boolean;\n\tpublic needsView:boolean;\n\tpublic needsNormals:boolean;\n\tpublic needsTangents:boolean;\n\tpublic needsUV:boolean;\n\tpublic needsSecondaryUV:boolean;\n\tpublic needsGlobalVertexPos:boolean;\n\tpublic needsGlobalFragmentPos:boolean;\n\n\tpublic usesTexture:boolean;\n\n\t/**\n\t * Creates a new MethodVO object.\n\t */\n\tconstructor(method:ShadingMethodBase)\n\t{\n\t\tthis.method = method;\n\t}\n\n\t/**\n\t * Resets the values of the value object to their \"unused\" state.\n\t */\n\tpublic reset()\n\t{\n\t\tthis.method.iReset();\n\n\t\tthis.texturesIndex = -1;\n\t\tthis.vertexConstantsIndex = -1;\n\t\tthis.fragmentConstantsIndex = -1;\n\n\t\tthis.needsProjection = false;\n\t\tthis.needsView = false;\n\t\tthis.needsNormals = false;\n\t\tthis.needsTangents = false;\n\t\tthis.needsUV = false;\n\t\tthis.needsSecondaryUV = false;\n\t\tthis.needsGlobalVertexPos = false;\n\t\tthis.needsGlobalFragmentPos = false;\n\t}\n}\n\nexport = MethodVO;\n", "import ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\n/**\n * RegisterPool is used by the shader compilation process to keep track of which registers of a certain type are\n * currently used and should not be allowed to be written to. Either entire registers can be requested and locked,\n * or single components (x, y, z, w) of a single register.\n * It is used by ShaderRegisterCache to track usages of individual register types.\n *\n * @see away.materials.ShaderRegisterCache\n */\nclass RegisterPool\n{\n\tprivate static _regPool:Object = new Object();\n\tprivate static _regCompsPool:Object = new Object();\n\n\tprivate _vectorRegisters:Array;\n\tprivate _registerComponents;\n\n\tprivate _regName:string;\n\tprivate _usedSingleCount:Array>;\n\tprivate _usedVectorCount:Array /*uint*/;\n\tprivate _regCount:number;\n\n\tprivate _persistent:boolean;\n\n\t/**\n\t * Creates a new RegisterPool object.\n\t * @param regName The base name of the register type (\"ft\" for fragment temporaries, \"vc\" for vertex constants, etc)\n\t * @param regCount The amount of available registers of this type.\n\t * @param persistent Whether or not registers, once reserved, can be freed again. For example, temporaries are not persistent, but constants are.\n\t */\n\tconstructor(regName:string, regCount:number, persistent:boolean = true)\n\t{\n\t\tthis._regName = regName;\n\t\tthis._regCount = regCount;\n\t\tthis._persistent = persistent;\n\t\tthis.initRegisters(regName, regCount);\n\t}\n\n\t/**\n\t * Retrieve an entire vector register that's still available.\n\t */\n\tpublic requestFreeVectorReg():ShaderRegisterElement\n\t{\n\t\tfor (var i:number = 0; i < this._regCount; ++i) {\n\t\t\tif (!this.isRegisterUsed(i)) {\n\t\t\t\tif (this._persistent)\n\t\t\t\t\tthis._usedVectorCount[i]++;\n\n\t\t\t\treturn this._vectorRegisters[i];\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Register overflow!\");\n\t}\n\n\t/**\n\t * Retrieve a single vector component that's still available.\n\t */\n\tpublic requestFreeRegComponent():ShaderRegisterElement\n\t{\n\t\tfor (var i:number = 0; i < this._regCount; ++i) {\n\t\t\tif (this._usedVectorCount[i] > 0)\n\t\t\t\tcontinue;\n\n\t\t\tfor (var j:number = 0; j < 4; ++j) {\n\t\t\t\tif (this._usedSingleCount[j][i] == 0) {\n\t\t\t\t\tif (this._persistent)\n\t\t\t\t\t\tthis._usedSingleCount[j][i]++;\n\n\t\t\t\t\treturn this._registerComponents[j][i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Register overflow!\");\n\t}\n\n\t/**\n\t * Marks a register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage\n\t * has been called usageCount times again.\n\t * @param register The register to mark as used.\n\t * @param usageCount The amount of usages to add.\n\t */\n\tpublic addUsage(register:ShaderRegisterElement, usageCount:number)\n\t{\n\t\tif (register._component > -1)\n\t\t\tthis._usedSingleCount[register._component][register.index] += usageCount;\n\t\telse\n\t\t\tthis._usedVectorCount[register.index] += usageCount;\n\t}\n\n\t/**\n\t * Removes a usage from a register. When usages reach 0, the register is freed again.\n\t * @param register The register for which to remove a usage.\n\t */\n\tpublic removeUsage(register:ShaderRegisterElement)\n\t{\n\t\tif (register._component > -1) {\n\t\t\tif (--this._usedSingleCount[register._component][register.index] < 0)\n\t\t\t\tthrow new Error(\"More usages removed than exist!\");\n\t\t} else {\n\t\t\tif (--this._usedVectorCount[register.index] < 0)\n\t\t\t\tthrow new Error(\"More usages removed than exist!\");\n\t\t}\n\t}\n\n\t/**\n\t * Disposes any resources used by the current RegisterPool object.\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._vectorRegisters = null;\n\t\tthis._registerComponents = null;\n\t\tthis._usedSingleCount = null;\n\t\tthis._usedVectorCount = null;\n\t}\n\n\t/**\n\t * Indicates whether or not any registers are in use.\n\t */\n\tpublic hasRegisteredRegs():boolean\n\t{\n\t\tfor (var i:number = 0; i < this._regCount; ++i)\n\t\t\tif (this.isRegisterUsed(i))\n\t\t\t\treturn true;\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Initializes all registers.\n\t */\n\tprivate initRegisters(regName:string, regCount:number)\n\t{\n\t\tvar hash:string = RegisterPool._initPool(regName, regCount);\n\n\t\tthis._vectorRegisters = RegisterPool._regPool[hash];\n\t\tthis._registerComponents = RegisterPool._regCompsPool[hash];\n\n\t\tthis._usedVectorCount = this._initArray(Array(regCount), 0);\n\n\t\tthis._usedSingleCount = new Array>(4);\n\t\tthis._usedSingleCount[0] = this._initArray(new Array(regCount), 0);\n\t\tthis._usedSingleCount[1] = this._initArray(new Array(regCount), 0);\n\t\tthis._usedSingleCount[2] = this._initArray(new Array(regCount), 0);\n\t\tthis._usedSingleCount[3] = this._initArray(new Array(regCount), 0);\n\t}\n\n\tprivate static _initPool(regName:string, regCount:number):string\n\t{\n\t\tvar hash:string = regName + regCount;\n\n\t\tif (RegisterPool._regPool[hash] != undefined)\n\t\t\treturn hash;\n\n\t\tvar vectorRegisters:Array = new Array(regCount);\n\t\tRegisterPool._regPool[hash] = vectorRegisters;\n\n\t\tvar registerComponents = [\n\t\t\t[],\n\t\t\t[],\n\t\t\t[],\n\t\t\t[]\n\t\t];\n\t\tRegisterPool._regCompsPool[hash] = registerComponents;\n\n\t\tfor (var i:number = 0; i < regCount; ++i) {\n\n\t\t\tvectorRegisters[i] = new ShaderRegisterElement(regName, i);\n\n\t\t\tfor (var j:number = 0; j < 4; ++j)\n\t\t\t\tregisterComponents[j][i] = new ShaderRegisterElement(regName, i, j);\n\t\t}\n\n\t\treturn hash;\n\t}\n\n\n\t/**\n\t * Check if the temp register is either used for single or vector use\n\t */\n\tprivate isRegisterUsed(index:number):boolean\n\t{\n\t\tif (this._usedVectorCount[index] > 0)\n\t\t\treturn true;\n\n\t\tfor (var i:number = 0; i < 4; ++i)\n\t\t\tif (this._usedSingleCount[i][index] > 0)\n\t\t\t\treturn true;\n\n\t\treturn false;\n\t}\n\n\n\tprivate _initArray(a:Array, val:any):Array\n\t{\n\t\tvar l:number = a.length;\n\n\t\tfor (var c:number = 0; c < l; c++)\n\t\t\ta[c] = val;\n\n\t\treturn a;\n\t}\n}\n\nexport = RegisterPool;\n", "import AnimationSetBase\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimationSetBase\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\n\n/**\n * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a\n * material. Concrete subclasses are used by the default materials.\n *\n * @see away.materials.ShadingMethodBase\n */\nclass ShaderCompilerBase\n{\n\tpublic _pShaderObject:ShaderObjectBase;\n\tpublic _pSharedRegisters:ShaderRegisterData;\n\tpublic _pRegisterCache:ShaderRegisterCache;\n\tpublic _pMaterialPass:IMaterialPassStageGL;\n\tpublic _pMaterial:StageGLMaterialBase;\n\n\tpublic _pVertexCode:string = ''; // Changed to emtpy string- AwayTS\n\tpublic _pFragmentCode:string = '';// Changed to emtpy string - AwayTS\n\tpublic _pPostAnimationFragmentCode:string = '';// Changed to emtpy string - AwayTS\n\n\t//The attributes that need to be animated by animators.\n\tpublic _pAnimatableAttributes:Array;\n\n\t//The target registers for animated properties, written to by the animators.\n\tpublic _pAnimationTargetRegisters:Array;\n\n\t//The target register to place the animated UV coordinate.\n\tprivate _uvTarget:string;\n\n\t//The souce register providing the UV coordinate to animate.\n\tprivate _uvSource:string;\n\n\tpublic _pProfile:string;\n\n\t/**\n\t * Creates a new ShaderCompilerBase object.\n\t * @param profile The compatibility profile of the renderer.\n\t */\n\tconstructor(material:StageGLMaterialBase, materialPass:IMaterialPassStageGL, shaderObject:ShaderObjectBase)\n\t{\n\t\tthis._pMaterial = material;\n\t\tthis._pMaterialPass = materialPass;\n\n\t\tthis._pShaderObject = shaderObject;\n\t\tthis._pProfile = shaderObject.profile;\n\n\t\tthis._pSharedRegisters = new ShaderRegisterData();\n\n\t\tthis._pRegisterCache = new ShaderRegisterCache(this._pProfile);\n\t\tthis._pRegisterCache.vertexAttributesOffset = 1;\n\t\tthis._pRegisterCache.reset();\n\t}\n\n\t/**\n\t * Compiles the code after all setup on the compiler has finished.\n\t */\n\tpublic compile()\n\t{\n\t\tthis._pShaderObject.reset();\n\n\t\tthis.pCalculateDependencies();\n\n\t\tthis.pInitRegisterIndices();\n\n\t\tthis.pCompileDependencies();\n\n\t\t//compile custom vertex & fragment codes\n\t\tthis._pVertexCode += this._pMaterialPass._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\t\tthis._pPostAnimationFragmentCode += this._pMaterialPass._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t//assign the final output color to the output register\n\t\tthis._pPostAnimationFragmentCode += \"mov \" + this._pRegisterCache.fragmentOutputRegister + \", \" + this._pSharedRegisters.shadedTarget + \"\\n\";\n\t\tthis._pRegisterCache.removeFragmentTempUsage(this._pSharedRegisters.shadedTarget);\n\n\t\t//initialise the required shader constants\n\t\tthis._pShaderObject.initConstantData(this._pRegisterCache, this._pAnimatableAttributes, this._pAnimationTargetRegisters, this._uvSource, this._uvTarget);\n\t\tthis._pMaterialPass._iInitConstantData(this._pShaderObject);\n\t}\n\n\t/**\n\t * Compile the code for the methods.\n\t */\n\tpublic pCompileDependencies()\n\t{\n\t\tthis._pSharedRegisters.shadedTarget = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\tthis._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadedTarget, 1);\n\n\t\t//compile the world-space position if required\n\t\tif (this._pShaderObject.globalPosDependencies > 0)\n\t\t\tthis.compileGlobalPositionCode();\n\n\t\t//Calculate the (possibly animated) UV coordinates.\n\t\tif (this._pShaderObject.uvDependencies > 0)\n\t\t\tthis.compileUVCode();\n\n\t\tif (this._pShaderObject.secondaryUVDependencies > 0)\n\t\t\tthis.compileSecondaryUVCode();\n\n\t\tif (this._pShaderObject.normalDependencies > 0)\n\t\t\tthis.compileNormalCode();\n\n\t\tif (this._pShaderObject.viewDirDependencies > 0)\n\t\t\tthis.compileViewDirCode();\n\n\t\t//collect code from material\n\t\tthis._pVertexCode += this._pMaterial._iGetVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\t\tthis._pFragmentCode += this._pMaterial._iGetFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t//collect code from pass\n\t\tthis._pVertexCode += this._pMaterialPass._iGetPreLightingVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\t\tthis._pFragmentCode += this._pMaterialPass._iGetPreLightingFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\n\n\n\t}\n\n\tprivate compileGlobalPositionCode()\n\t{\n\t\tthis._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.globalPositionVertex = this._pRegisterCache.getFreeVertexVectorTemp(), this._pShaderObject.globalPosDependencies);\n\n\t\tvar sceneMatrixReg:ShaderRegisterElement = this._pRegisterCache.getFreeVertexConstant();\n\t\tthis._pRegisterCache.getFreeVertexConstant();\n\t\tthis._pRegisterCache.getFreeVertexConstant();\n\t\tthis._pRegisterCache.getFreeVertexConstant();\n\n\t\tthis._pShaderObject.sceneMatrixIndex = sceneMatrixReg.index*4;\n\n\t\tthis._pVertexCode += \"m44 \" + this._pSharedRegisters.globalPositionVertex + \", \" + this._pSharedRegisters.localPosition + \", \" + sceneMatrixReg + \"\\n\";\n\n\t\tif (this._pShaderObject.usesGlobalPosFragment) {\n\t\t\tthis._pSharedRegisters.globalPositionVarying = this._pRegisterCache.getFreeVarying();\n\t\t\tthis._pVertexCode += \"mov \" + this._pSharedRegisters.globalPositionVarying + \", \" + this._pSharedRegisters.globalPositionVertex + \"\\n\";\n\t\t}\n\t}\n\n\t/**\n\t * Calculate the (possibly animated) UV coordinates.\n\t */\n\tprivate compileUVCode()\n\t{\n\t\tvar uvAttributeReg:ShaderRegisterElement = this._pRegisterCache.getFreeVertexAttribute();\n\t\tthis._pShaderObject.uvBufferIndex = uvAttributeReg.index;\n\n\t\tvar varying:ShaderRegisterElement = this._pRegisterCache.getFreeVarying();\n\n\t\tthis._pSharedRegisters.uvVarying = varying;\n\n\t\tif (this._pShaderObject.usesUVTransform) {\n\t\t\t// a, b, 0, tx\n\t\t\t// c, d, 0, ty\n\t\t\tvar uvTransform1:ShaderRegisterElement = this._pRegisterCache.getFreeVertexConstant();\n\t\t\tvar uvTransform2:ShaderRegisterElement = this._pRegisterCache.getFreeVertexConstant();\n\t\t\tthis._pShaderObject.uvTransformIndex = uvTransform1.index*4;\n\n\t\t\tthis._pVertexCode += \"dp4 \" + varying + \".x, \" + uvAttributeReg + \", \" + uvTransform1 + \"\\n\" +\n\t\t\t\t\t\t\t\t \"dp4 \" + varying + \".y, \" + uvAttributeReg + \", \" + uvTransform2 + \"\\n\" +\n\t\t\t\t\t\t\t\t \"mov \" + varying + \".zw, \" + uvAttributeReg + \".zw \\n\";\n\t\t} else {\n\t\t\tthis._pShaderObject.uvTransformIndex = -1;\n\t\t\tthis._uvTarget = varying.toString();\n\t\t\tthis._uvSource = uvAttributeReg.toString();\n\t\t}\n\t}\n\n\t/**\n\t * Provide the secondary UV coordinates.\n\t */\n\tprivate compileSecondaryUVCode()\n\t{\n\t\tvar uvAttributeReg:ShaderRegisterElement = this._pRegisterCache.getFreeVertexAttribute();\n\t\tthis._pShaderObject.secondaryUVBufferIndex = uvAttributeReg.index;\n\t\tthis._pSharedRegisters.secondaryUVVarying = this._pRegisterCache.getFreeVarying();\n\t\tthis._pVertexCode += \"mov \" + this._pSharedRegisters.secondaryUVVarying + \", \" + uvAttributeReg + \"\\n\";\n\t}\n\n\t/**\n\t * Calculate the view direction.\n\t */\n\tpublic compileViewDirCode()\n\t{\n\t\tvar cameraPositionReg:ShaderRegisterElement = this._pRegisterCache.getFreeVertexConstant();\n\t\tthis._pSharedRegisters.viewDirVarying = this._pRegisterCache.getFreeVarying();\n\t\tthis._pSharedRegisters.viewDirFragment = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\tthis._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.viewDirFragment, this._pShaderObject.viewDirDependencies);\n\n\t\tthis._pShaderObject.cameraPositionIndex = cameraPositionReg.index*4;\n\n\t\tif (this._pShaderObject.usesTangentSpace) {\n\t\t\tvar temp:ShaderRegisterElement = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\tthis._pVertexCode += \"sub \" + temp + \", \" + cameraPositionReg + \", \" + this._pSharedRegisters.localPosition + \"\\n\" +\n\t\t\t\t\"m33 \" + this._pSharedRegisters.viewDirVarying + \".xyz, \" + temp + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\"mov \" + this._pSharedRegisters.viewDirVarying + \".w, \" + this._pSharedRegisters.localPosition + \".w\\n\";\n\t\t} else {\n\t\t\tthis._pVertexCode += \"sub \" + this._pSharedRegisters.viewDirVarying + \", \" + cameraPositionReg + \", \" + this._pSharedRegisters.globalPositionVertex + \"\\n\";\n\t\t\tthis._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.globalPositionVertex);\n\t\t}\n\n\t\t//TODO is this required in all cases? (re: distancemappass)\n\t\tthis._pFragmentCode += \"nrm \" + this._pSharedRegisters.viewDirFragment + \".xyz, \" + this._pSharedRegisters.viewDirVarying + \"\\n\" +\n\t\t\t\"mov \" + this._pSharedRegisters.viewDirFragment + \".w, \" + this._pSharedRegisters.viewDirVarying + \".w\\n\";\n\t}\n\n\t/**\n\t * Calculate the normal.\n\t */\n\tpublic compileNormalCode()\n\t{\n\t\tthis._pSharedRegisters.normalFragment = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\tthis._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.normalFragment, this._pShaderObject.normalDependencies);\n\n\t\t//simple normal aquisition if no tangent space is being used\n\t\tif (this._pShaderObject.outputsNormals && !this._pShaderObject.outputsTangentNormals) {\n\t\t\tthis._pVertexCode += this._pMaterialPass._iGetNormalVertexCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\t\t\tthis._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar normalMatrix:Array;\n\n\t\tif (!this._pShaderObject.outputsNormals || !this._pShaderObject.usesTangentSpace) {\n\t\t\tnormalMatrix = new Array(3);\n\t\t\tnormalMatrix[0] = this._pRegisterCache.getFreeVertexConstant();\n\t\t\tnormalMatrix[1] = this._pRegisterCache.getFreeVertexConstant();\n\t\t\tnormalMatrix[2] = this._pRegisterCache.getFreeVertexConstant();\n\n\t\t\tthis._pRegisterCache.getFreeVertexConstant();\n\n\t\t\tthis._pShaderObject.sceneNormalMatrixIndex = normalMatrix[0].index*4;\n\n\t\t\tthis._pSharedRegisters.normalVarying = this._pRegisterCache.getFreeVarying();\n\t\t}\n\n\t\tif (this._pShaderObject.outputsNormals) {\n\t\t\tif (this._pShaderObject.usesTangentSpace) {\n\t\t\t\t// normalize normal + tangent vector and generate (approximated) bitangent used in m33 operation for view\n\t\t\t\tthis._pVertexCode += \"nrm \" + this._pSharedRegisters.animatedNormal + \".xyz, \" + this._pSharedRegisters.animatedNormal + \"\\n\" +\n\t\t\t\t\t\"nrm \" + this._pSharedRegisters.animatedTangent + \".xyz, \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"crs \" + this._pSharedRegisters.bitangent + \".xyz, \" + this._pSharedRegisters.animatedNormal + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\";\n\n\t\t\t\tthis._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters);\n\t\t\t} else {\n\t\t\t\t//Compiles the vertex shader code for tangent-space normal maps.\n\t\t\t\tthis._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tthis._pSharedRegisters.bitangentVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tvar temp:ShaderRegisterElement = this._pRegisterCache.getFreeVertexVectorTemp();\n\n\t\t\t\tthis._pVertexCode += \"m33 \" + temp + \".xyz, \" + this._pSharedRegisters.animatedNormal + \", \" + normalMatrix[0] + \"\\n\" +\n\t\t\t\t\t\"nrm \" + this._pSharedRegisters.animatedNormal + \".xyz, \" + temp + \"\\n\" +\n\t\t\t\t\t\"m33 \" + temp + \".xyz, \" + this._pSharedRegisters.animatedTangent + \", \" + normalMatrix[0] + \"\\n\" +\n\t\t\t\t\t\"nrm \" + this._pSharedRegisters.animatedTangent + \".xyz, \" + temp + \"\\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.tangentVarying + \".x, \" + this._pSharedRegisters.animatedTangent + \".x \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.tangentVarying + \".z, \" + this._pSharedRegisters.animatedNormal + \".x \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.tangentVarying + \".w, \" + this._pSharedRegisters.normalInput + \".w \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.bitangentVarying + \".x, \" + this._pSharedRegisters.animatedTangent + \".y \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.bitangentVarying + \".z, \" + this._pSharedRegisters.animatedNormal + \".y \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.bitangentVarying + \".w, \" + this._pSharedRegisters.normalInput + \".w \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.normalVarying + \".x, \" + this._pSharedRegisters.animatedTangent + \".z \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.normalVarying + \".z, \" + this._pSharedRegisters.animatedNormal + \".z \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.normalVarying + \".w, \" + this._pSharedRegisters.normalInput + \".w \\n\" +\n\t\t\t\t\t\"crs \" + temp + \".xyz, \" + this._pSharedRegisters.animatedNormal + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.tangentVarying + \".y, \" + temp + \".x \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.bitangentVarying + \".y, \" + temp + \".y \\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.normalVarying + \".y, \" + temp + \".z \\n\";\n\n\t\t\t\tthis._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedTangent);\n\n\t\t\t\t//Compiles the fragment shader code for tangent-space normal maps.\n\t\t\t\tvar t:ShaderRegisterElement;\n\t\t\t\tvar b:ShaderRegisterElement;\n\t\t\t\tvar n:ShaderRegisterElement;\n\n\t\t\t\tt = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\t\tthis._pRegisterCache.addFragmentTempUsages(t, 1);\n\t\t\t\tb = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\t\tthis._pRegisterCache.addFragmentTempUsages(b, 1);\n\t\t\t\tn = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\t\tthis._pRegisterCache.addFragmentTempUsages(n, 1);\n\n\t\t\t\tthis._pFragmentCode += \"nrm \" + t + \".xyz, \" + this._pSharedRegisters.tangentVarying + \"\\n\" +\n\t\t\t\t\t\"mov \" + t + \".w, \" + this._pSharedRegisters.tangentVarying + \".w\t\\n\" +\n\t\t\t\t\t\"nrm \" + b + \".xyz, \" + this._pSharedRegisters.bitangentVarying + \"\\n\" +\n\t\t\t\t\t\"nrm \" + n + \".xyz, \" + this._pSharedRegisters.normalVarying + \"\\n\";\n\n\t\t\t\t//compile custom fragment code for normal calcs\n\t\t\t\tthis._pFragmentCode += this._pMaterialPass._iGetNormalFragmentCode(this._pShaderObject, this._pRegisterCache, this._pSharedRegisters) +\n\t\t\t\t\t\"m33 \" + this._pSharedRegisters.normalFragment + \".xyz, \" + this._pSharedRegisters.normalFragment + \", \" + t + \"\\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.normalFragment + \".w, \" + this._pSharedRegisters.normalVarying + \".w\\n\";\n\n\t\t\t\tthis._pRegisterCache.removeFragmentTempUsage(b);\n\t\t\t\tthis._pRegisterCache.removeFragmentTempUsage(t);\n\t\t\t\tthis._pRegisterCache.removeFragmentTempUsage(n);\n\t\t\t}\n\t\t} else {\n\t\t\t// no output, world space is enough\n\t\t\tthis._pVertexCode += \"m33 \" + this._pSharedRegisters.normalVarying + \".xyz, \" + this._pSharedRegisters.animatedNormal + \", \" + normalMatrix[0] + \"\\n\" +\n\t\t\t\t\"mov \" + this._pSharedRegisters.normalVarying + \".w, \" + this._pSharedRegisters.animatedNormal + \".w\\n\";\n\n\t\t\tthis._pFragmentCode += \"nrm \" + this._pSharedRegisters.normalFragment + \".xyz, \" + this._pSharedRegisters.normalVarying + \"\\n\" +\n\t\t\t\t\"mov \" + this._pSharedRegisters.normalFragment + \".w, \" + this._pSharedRegisters.normalVarying + \".w\\n\";\n\n\t\t\tif (this._pShaderObject.tangentDependencies > 0) {\n\t\t\t\tthis._pSharedRegisters.tangentVarying = this._pRegisterCache.getFreeVarying();\n\n\t\t\t\tthis._pVertexCode += \"m33 \" + this._pSharedRegisters.tangentVarying + \".xyz, \" + this._pSharedRegisters.animatedTangent + \", \" + normalMatrix[0] + \"\\n\" +\n\t\t\t\t\t\"mov \" + this._pSharedRegisters.tangentVarying + \".w, \" + this._pSharedRegisters.animatedTangent + \".w\\n\";\n\t\t\t}\n\t\t}\n\n\t\tif (!this._pShaderObject.usesTangentSpace)\n\t\t\tthis._pRegisterCache.removeVertexTempUsage(this._pSharedRegisters.animatedNormal);\n\t}\n\n\t/**\n\t * Reset all the indices to \"unused\".\n\t */\n\tpublic pInitRegisterIndices()\n\t{\n\t\tthis._pShaderObject.pInitRegisterIndices();\n\n\t\tthis._pAnimatableAttributes = new Array(\"va0\");\n\t\tthis._pAnimationTargetRegisters = new Array(\"vt0\");\n\t\tthis._pVertexCode = \"\";\n\t\tthis._pFragmentCode = \"\";\n\t\tthis._pPostAnimationFragmentCode = \"\";\n\n\t\tthis._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.localPosition = this._pRegisterCache.getFreeVertexVectorTemp(), 1);\n\n\t\t//create commonly shared constant registers\n\t\tthis._pSharedRegisters.commons = this._pRegisterCache.getFreeFragmentConstant();\n\t\tthis._pShaderObject.commonsDataIndex = this._pSharedRegisters.commons.index*4;\n\n\t\t//Creates the registers to contain the tangent data.\n\t\t// need to be created FIRST and in this order (for when using tangent space)\n\t\tif (this._pShaderObject.tangentDependencies > 0 || this._pShaderObject.outputsNormals) {\n\t\t\tthis._pSharedRegisters.tangentInput = this._pRegisterCache.getFreeVertexAttribute();\n\t\t\tthis._pShaderObject.tangentBufferIndex = this._pSharedRegisters.tangentInput.index;\n\n\t\t\tthis._pSharedRegisters.animatedTangent = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\tthis._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedTangent, 1);\n\n\t\t\tif (this._pShaderObject.usesTangentSpace) {\n\t\t\t\tthis._pSharedRegisters.bitangent = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\t\tthis._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.bitangent, 1);\n\t\t\t}\n\n\t\t\tthis._pAnimatableAttributes.push(this._pSharedRegisters.tangentInput.toString());\n\t\t\tthis._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedTangent.toString());\n\t\t}\n\n\t\tif (this._pShaderObject.normalDependencies > 0) {\n\t\t\tthis._pSharedRegisters.normalInput = this._pRegisterCache.getFreeVertexAttribute();\n\t\t\tthis._pShaderObject.normalBufferIndex = this._pSharedRegisters.normalInput.index;\n\n\t\t\tthis._pSharedRegisters.animatedNormal = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\tthis._pRegisterCache.addVertexTempUsages(this._pSharedRegisters.animatedNormal, 1);\n\n\t\t\tthis._pAnimatableAttributes.push(this._pSharedRegisters.normalInput.toString());\n\t\t\tthis._pAnimationTargetRegisters.push(this._pSharedRegisters.animatedNormal.toString());\n\t\t}\n\t}\n\n\t/**\n\t * Figure out which named registers are required, and how often.\n\t */\n\tpublic pCalculateDependencies()\n\t{\n\t\tthis._pShaderObject.useAlphaPremultiplied = this._pMaterial.alphaPremultiplied;\n\t\tthis._pShaderObject.useBothSides = this._pMaterial.bothSides;\n\t\tthis._pShaderObject.useMipmapping = this._pMaterial.mipmap;\n\t\tthis._pShaderObject.useSmoothTextures = this._pMaterial.smooth;\n\t\tthis._pShaderObject.repeatTextures = this._pMaterial.repeat;\n\t\tthis._pShaderObject.usesUVTransform = this._pMaterial.animateUVs;\n\t\tthis._pShaderObject.alphaThreshold = this._pMaterial.alphaThreshold;\n\t\tthis._pShaderObject.texture = this._pMaterial.texture;\n\t\tthis._pShaderObject.color = this._pMaterial.color;\n\t\t//TODO: fragment animtion should be compatible with lighting pass\n\t\tthis._pShaderObject.usesFragmentAnimation = Boolean(this._pMaterialPass.passMode == MaterialPassMode.SUPER_SHADER);\n\n\t\tthis._pMaterialPass._iIncludeDependencies(this._pShaderObject);\n\t}\n\n\t/**\n\t * Disposes all resources used by the compiler.\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._pRegisterCache.dispose();\n\t\tthis._pRegisterCache = null;\n\t\tthis._pSharedRegisters = null;\n\t}\n\n\t/**\n\t * The generated vertex code.\n\t */\n\tpublic get vertexCode():string\n\t{\n\t\treturn this._pVertexCode;\n\t}\n\n\t/**\n\t * The generated fragment code.\n\t */\n\tpublic get fragmentCode():string\n\t{\n\t\treturn this._pFragmentCode;\n\t}\n\n\t/**\n\t * The generated fragment code.\n\t */\n\tpublic get postAnimationFragmentCode():string\n\t{\n\t\treturn this._pPostAnimationFragmentCode;\n\t}\n\n\t/**\n\t * The register name containing the final shaded colour.\n\t */\n\tpublic get shadedTarget():string\n\t{\n\t\treturn this._pSharedRegisters.shadedTarget.toString();\n\t}\n}\n\nexport = ShaderCompilerBase;", - "import LightSources\t\t\t\t\t= require(\"awayjs-display/lib/materials/LightSources\");\n\nimport ContextGLProfile\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProfile\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\n\n/**\n * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a\n * material. Concrete subclasses are used by the default materials.\n *\n * @see away.materials.ShadingMethodBase\n */\nclass ShaderLightingCompiler extends ShaderCompilerBase\n{\n\tprivate _materialLightingPass:ILightingPassStageGL;\n\tprivate _shaderLightingObject:ShaderLightingObject;\n\tpublic _pointLightFragmentConstants:Array;\n\tpublic _pointLightVertexConstants:Array;\n\tpublic _dirLightFragmentConstants:Array;\n\tpublic _dirLightVertexConstants:Array;\n\n\tpublic _pNumProbeRegisters:number;\n\n\t/**\n\t * Creates a new ShaderCompilerBase object.\n\t * @param profile The compatibility profile of the renderer.\n\t */\n\tconstructor(material:StageGLMaterialBase, materialPass:ILightingPassStageGL, shaderObject:ShaderLightingObject)\n\t{\n\t\tsuper(material, materialPass, shaderObject);\n\n\t\tthis._materialLightingPass = materialPass;\n\t\tthis._shaderLightingObject = shaderObject;\n\t}\n\n\t/**\n\t * Compile the code for the methods.\n\t */\n\tpublic pCompileDependencies()\n\t{\n\t\tsuper.pCompileDependencies();\n\n\t\t//compile the lighting code\n\t\tif (this._shaderLightingObject.usesShadows)\n\t\t\tthis.pCompileShadowCode();\n\n\t\tif (this._shaderLightingObject.usesLights) {\n\t\t\tthis.initLightRegisters();\n\t\t\tthis.compileLightCode();\n\t\t}\n\n\t\tif (this._shaderLightingObject.usesProbes)\n\t\t\tthis.compileLightProbeCode();\n\n\t\tthis._pVertexCode += this._materialLightingPass._iGetPostLightingVertexCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters);\n\t\tthis._pFragmentCode += this._materialLightingPass._iGetPostLightingFragmentCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters);\n\t}\n\n\t/**\n\t * Provides the code to provide shadow mapping.\n\t */\n\tpublic pCompileShadowCode()\n\t{\n\t\tif (this._shaderLightingObject.normalDependencies > 0) {\n\t\t\tthis._pSharedRegisters.shadowTarget = this._pSharedRegisters.normalFragment;\n\t\t} else {\n\t\t\tthis._pSharedRegisters.shadowTarget = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\tthis._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadowTarget, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Initializes constant registers to contain light data.\n\t */\n\tprivate initLightRegisters()\n\t{\n\t\t// init these first so we're sure they're in sequence\n\t\tvar i:number, len:number;\n\n\t\tif (this._dirLightVertexConstants) {\n\t\t\tlen = this._dirLightVertexConstants.length;\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tthis._dirLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant();\n\n\t\t\t\tif (this._shaderLightingObject.lightVertexConstantIndex == -1)\n\t\t\t\t\tthis._shaderLightingObject.lightVertexConstantIndex = this._dirLightVertexConstants[i].index*4;\n\t\t\t}\n\t\t}\n\n\t\tif (this._pointLightVertexConstants) {\n\t\t\tlen = this._pointLightVertexConstants.length;\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tthis._pointLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant();\n\n\t\t\t\tif (this._shaderLightingObject.lightVertexConstantIndex == -1)\n\t\t\t\t\tthis._shaderLightingObject.lightVertexConstantIndex = this._pointLightVertexConstants[i].index*4;\n\t\t\t}\n\t\t}\n\n\t\tlen = this._dirLightFragmentConstants.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._dirLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = this._dirLightFragmentConstants[i].index*4;\n\t\t}\n\n\t\tlen = this._pointLightFragmentConstants.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._pointLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = this._pointLightFragmentConstants[i].index*4;\n\t\t}\n\t}\n\n\t/**\n\t * Compiles the shading code for directional and point lights.\n\t */\n\tprivate compileLightCode()\n\t{\n\t\tvar diffuseColorReg:ShaderRegisterElement;\n\t\tvar specularColorReg:ShaderRegisterElement;\n\t\tvar lightPosReg:ShaderRegisterElement;\n\t\tvar lightDirReg:ShaderRegisterElement;\n\t\tvar vertexRegIndex:number = 0;\n\t\tvar fragmentRegIndex:number = 0;\n\t\tvar addSpec:boolean = this._shaderLightingObject.usesLightsForSpecular;\n\t\tvar addDiff:boolean = this._shaderLightingObject.usesLightsForDiffuse;\n\n\t\t//compile the shading code for directional lights.\n\t\tfor (var i:number = 0; i < this._materialLightingPass.iNumDirectionalLights; ++i) {\n\t\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\t\tlightDirReg = this._dirLightVertexConstants[vertexRegIndex++];\n\n\t\t\t\tvar lightVarying:ShaderRegisterElement = this._pRegisterCache.getFreeVarying();\n\n\t\t\t\tthis._pVertexCode += \"m33 \" + lightVarying + \".xyz, \" + lightDirReg + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightVarying + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\t\t\tlightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\t\tthis._pRegisterCache.addVertexTempUsages(lightDirReg, 1);\n\n\t\t\t\tthis._pFragmentCode += \"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightDirReg + \".w, \" + lightVarying + \".w\\n\";\n\n\t\t\t} else {\n\t\t\t\tlightDirReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\t\t\t}\n\n\t\t\tdiffuseColorReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\t\t\tspecularColorReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tif (addDiff)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (addSpec)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace)\n\t\t\t\tthis._pRegisterCache.removeVertexTempUsage(lightDirReg);\n\t\t}\n\n\t\tvertexRegIndex = 0;\n\t\tfragmentRegIndex = 0;\n\n\t\t//compile the shading code for point lights\n\t\tfor (var i:number = 0; i < this._materialLightingPass.iNumPointLights; ++i) {\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment)\n\t\t\t\tlightPosReg = this._pointLightVertexConstants[vertexRegIndex++];\n\t\t\telse\n\t\t\t\tlightPosReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tdiffuseColorReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\t\t\tspecularColorReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tlightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\tthis._pRegisterCache.addFragmentTempUsages(lightDirReg, 1);\n\n\t\t\tvar lightVarying:ShaderRegisterElement;\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\t\tlightVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tvar temp:ShaderRegisterElement = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\t\tthis._pVertexCode += \"sub \" + temp + \", \" + lightPosReg + \", \" + this._pSharedRegisters.localPosition + \"\\n\" +\n\t\t\t\t\t\"m33 \" + lightVarying + \".xyz, \" + temp + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightVarying + \".w, \" + this._pSharedRegisters.localPosition + \".w\\n\";\n\t\t\t} else if (!this._shaderLightingObject.usesGlobalPosFragment) {\n\t\t\t\tlightVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tthis._pVertexCode += \"sub \" + lightVarying + \", \" + lightPosReg + \", \" + this._pSharedRegisters.globalPositionVertex + \"\\n\";\n\t\t\t} else {\n\t\t\t\tlightVarying = lightDirReg;\n\t\t\t\tthis._pFragmentCode += \"sub \" + lightDirReg + \", \" + lightPosReg + \", \" + this._pSharedRegisters.globalPositionVarying + \"\\n\";\n\t\t\t}\n\n\t\t\tif (this._shaderLightingObject.usesLightFallOff) {\n\t\t\t\t// calculate attenuation\n\t\t\t\tthis._pFragmentCode += // attenuate\n\t\t\t\t\t\"dp3 \" + lightDirReg + \".w, \" + lightVarying + \", \" + lightVarying + \"\\n\" + // w = d - radius\n\t\t\t\t\t\"sub \" + lightDirReg + \".w, \" + lightDirReg + \".w, \" + diffuseColorReg + \".w\\n\" + // w = (d - radius)/(max-min)\n\t\t\t\t\t\"mul \" + lightDirReg + \".w, \" + lightDirReg + \".w, \" + specularColorReg + \".w\\n\" + // w = clamp(w, 0, 1)\n\t\t\t\t\t\"sat \" + lightDirReg + \".w, \" + lightDirReg + \".w\\n\" + // w = 1-w\n\t\t\t\t\t\"sub \" + lightDirReg + \".w, \" + this._pSharedRegisters.commons + \".w, \" + lightDirReg + \".w\\n\" + // normalize\n\t\t\t\t\t\"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\";\n\t\t\t} else {\n\t\t\t\tthis._pFragmentCode += \"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightDirReg + \".w, \" + lightVarying + \".w\\n\";\n\t\t\t}\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = lightPosReg.index*4;\n\n\t\t\tif (addDiff)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (addSpec)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tthis._pRegisterCache.removeFragmentTempUsage(lightDirReg);\n\t\t}\n\t}\n\n\t/**\n\t * Compiles shading code for light probes.\n\t */\n\tprivate compileLightProbeCode()\n\t{\n\t\tvar weightReg:string;\n\t\tvar weightComponents = [ \".x\", \".y\", \".z\", \".w\" ];\n\t\tvar weightRegisters:Array = new Array();\n\t\tvar i:number;\n\t\tvar texReg:ShaderRegisterElement;\n\t\tvar addSpec:boolean = this._shaderLightingObject.usesProbesForSpecular;\n\t\tvar addDiff:boolean = this._shaderLightingObject.usesProbesForDiffuse;\n\n\t\tif (addDiff)\n\t\t\tthis._shaderLightingObject.lightProbeDiffuseIndices = new Array();\n\n\t\tif (addSpec)\n\t\t\tthis._shaderLightingObject.lightProbeSpecularIndices = new Array();\n\n\t\tfor (i = 0; i < this._pNumProbeRegisters; ++i) {\n\t\t\tweightRegisters[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (i == 0)\n\t\t\t\tthis._shaderLightingObject.probeWeightsIndex = weightRegisters[i].index*4;\n\t\t}\n\n\t\tfor (i = 0; i < this._materialLightingPass.iNumLightProbes; ++i) {\n\t\t\tweightReg = weightRegisters[Math.floor(i/4)].toString() + weightComponents[i%4];\n\n\t\t\tif (addDiff) {\n\t\t\t\ttexReg = this._pRegisterCache.getFreeTextureReg();\n\t\t\t\tthis._shaderLightingObject.lightProbeDiffuseIndices[i] = texReg.index;\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerProbeDiffuseFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters);\n\t\t\t}\n\n\t\t\tif (addSpec) {\n\t\t\t\ttexReg = this._pRegisterCache.getFreeTextureReg();\n\t\t\t\tthis._shaderLightingObject.lightProbeSpecularIndices[i] = texReg.index;\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerProbeSpecularFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Reset all the indices to \"unused\".\n\t */\n\tpublic pInitRegisterIndices()\n\t{\n\t\tsuper.pInitRegisterIndices();\n\n\t\tthis._shaderLightingObject.lightVertexConstantIndex = -1;\n\t\tthis._shaderLightingObject.lightFragmentConstantIndex = -1;\n\t\tthis._shaderLightingObject.probeWeightsIndex = -1;\n\n\t\tthis._pNumProbeRegisters = Math.ceil(this._materialLightingPass.iNumLightProbes/4);\n\n\t\t//init light data\n\t\tif (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) {\n\t\t\tthis._pointLightVertexConstants = new Array(this._materialLightingPass.iNumPointLights);\n\t\t\tthis._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights*2);\n\t\t} else {\n\t\t\tthis._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights*3);\n\t\t}\n\n\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\tthis._dirLightVertexConstants = new Array(this._materialLightingPass.iNumDirectionalLights);\n\t\t\tthis._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights*2);\n\t\t} else {\n\t\t\tthis._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights*3);\n\t\t}\n\t}\n\n\n\t/**\n\t * Figure out which named registers are required, and how often.\n\t */\n\tpublic pCalculateDependencies()\n\t{\n\t\tvar numAllLights:number = this._materialLightingPass.iNumPointLights + this._materialLightingPass.iNumDirectionalLights;\n\t\tvar numLightProbes:number = this._materialLightingPass.iNumLightProbes;\n\t\tvar diffuseLightSources:number = this._pMaterial.diffuseLightSources;\n\t\tvar specularLightSources:number = this._materialLightingPass._iUsesSpecular()? this._pMaterial.specularLightSources : 0x00;\n\t\tvar combinedLightSources:number = diffuseLightSources | specularLightSources;\n\n\t\tthis._shaderLightingObject.usesLightFallOff = this._pMaterial.enableLightFallOff && this._shaderLightingObject.profile != ContextGLProfile.BASELINE_CONSTRAINED;\n\t\tthis._shaderLightingObject.numLights = numAllLights + numLightProbes;\n\t\tthis._shaderLightingObject.numPointLights = this._materialLightingPass.iNumPointLights;\n\t\tthis._shaderLightingObject.numDirectionalLights = this._materialLightingPass.iNumDirectionalLights;\n\t\tthis._shaderLightingObject.numLightProbes = numLightProbes;\n\t\tthis._shaderLightingObject.pointLightsOffset = this._materialLightingPass.pointLightsOffset;\n\t\tthis._shaderLightingObject.directionalLightsOffset = this._materialLightingPass.directionalLightsOffset;\n\t\tthis._shaderLightingObject.lightProbesOffset = this._materialLightingPass.lightProbesOffset;\n\t\tthis._shaderLightingObject.lightPicker = this._materialLightingPass.lightPicker;\n\t\tthis._shaderLightingObject.usesLights = numAllLights > 0 && (combinedLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbes = numLightProbes > 0 && (combinedLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesLightsForSpecular = numAllLights > 0 && (specularLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbesForSpecular = numLightProbes > 0 && (specularLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesLightsForDiffuse = numAllLights > 0 && (diffuseLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbesForDiffuse = numLightProbes > 0 && (diffuseLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesShadows = this._materialLightingPass._iUsesShadows();\n\n\t\tsuper.pCalculateDependencies();\n\t}\n}\n\nexport = ShaderLightingCompiler;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport LightProbe\t\t\t\t\t= require(\"awayjs-display/lib/entities/LightProbe\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport LightPickerBase\t\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/LightPickerBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderLightingCompiler\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\n\n/**\n * ShaderObjectBase keeps track of the number of dependencies for \"named registers\" used across a pass.\n * Named registers are that are not necessarily limited to a single method. They are created by the compiler and\n * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed\n * each time a method has been compiled into the shader.\n *\n * @see RegisterPool.addUsage\n */\nclass ShaderLightingObject extends ShaderObjectBase\n{\n\t/**\n\t * The first index for the fragment constants containing the light data.\n\t */\n\tpublic lightFragmentConstantIndex:number;\n\n\t/**\n\t * The starting index if the vertex constant to which light data needs to be uploaded.\n\t */\n\tpublic lightVertexConstantIndex:number;\n\n\t/**\n\t * Indices for the light probe diffuse textures.\n\t */\n\tpublic lightProbeDiffuseIndices:Array /*uint*/;\n\n\t/**\n\t * Indices for the light probe specular textures.\n\t */\n\tpublic lightProbeSpecularIndices:Array /*uint*/;\n\n\t/**\n\t * The index of the fragment constant containing the weights for the light probes.\n\t */\n\tpublic probeWeightsIndex:number;\n\n\tpublic numLights:number;\n\tpublic usesLightFallOff:boolean;\n\n\tpublic usesShadows:boolean;\n\n\tpublic numPointLights:number;\n\tpublic numDirectionalLights:number;\n\tpublic numLightProbes:number;\n\tpublic pointLightsOffset:number;\n\tpublic directionalLightsOffset:number;\n\tpublic lightProbesOffset:number;\n\tpublic lightPicker:LightPickerBase;\n\n\t/**\n\t * Indicates whether the shader uses any lights.\n\t */\n\tpublic usesLights:boolean;\n\n\t/**\n\t * Indicates whether the shader uses any light probes.\n\t */\n\tpublic usesProbes:boolean;\n\n\t/**\n\t * Indicates whether the lights uses any specular components.\n\t */\n\tpublic usesLightsForSpecular:boolean;\n\n\t/**\n\t * Indicates whether the probes uses any specular components.\n\t */\n\tpublic usesProbesForSpecular:boolean;\n\n\t/**\n\t * Indicates whether the lights uses any diffuse components.\n\t */\n\tpublic usesLightsForDiffuse:boolean;\n\n\t/**\n\t * Indicates whether the probes uses any diffuse components.\n\t */\n\tpublic usesProbesForDiffuse:boolean;\n\n\t/**\n\t * Creates a new MethodCompilerVO object.\n\t */\n\tconstructor(profile)\n\t{\n\t\tsuper(profile);\n\t}\n\n\t/**\n\t * Factory method to create a concrete compiler object for this object\n\t *\n\t * @param materialPassVO\n\t * @returns {away.materials.ShaderLightingCompiler}\n\t */\n\tpublic createCompiler(material:StageGLMaterialBase, materialPass:ILightingPassStageGL):ShaderCompilerBase\n\t{\n\t\treturn new ShaderLightingCompiler(material, materialPass, this);\n\t}\n\n\t/**\n\t * Clears dependency counts for all registers. Called when recompiling a pass.\n\t */\n\tpublic reset()\n\t{\n\t\tsuper.reset();\n\n\t\tthis.numLights = 0;\n\t\tthis.usesLightFallOff = true;\n\t}\n\n\t/**\n\t * Adds any external world space dependencies, used to force world space calculations.\n\t */\n\tpublic addWorldSpaceDependencies(fragmentLights:boolean)\n\t{\n\t\tsuper.addWorldSpaceDependencies(fragmentLights);\n\n\t\tif (this.numPointLights > 0 && this.usesLights) {\n\t\t\t++this.globalPosDependencies;\n\n\t\t\tif (fragmentLights)\n\t\t\t\tthis.usesGlobalPosFragment = true;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper.setRenderState(renderable, stage, camera, viewProjection);\n\n\t\tif (this.usesLights)\n\t\t\tthis.updateLights();\n\n\t\tif (this.usesProbes)\n\t\t\tthis.updateProbes(stage);\n\t}\n\n\t/**\n\t * Updates constant data render state used by the lights. This method is optional for subclasses to implement.\n\t */\n\tprivate updateLights()\n\t{\n\t\tvar dirLight:DirectionalLight;\n\t\tvar pointLight:PointLight;\n\t\tvar i:number = 0;\n\t\tvar k:number = 0;\n\t\tvar len:number;\n\t\tvar dirPos:Vector3D;\n\t\tvar total:number = 0;\n\t\tvar numLightTypes:number = this.usesShadows? 2 : 1;\n\t\tvar l:number;\n\t\tvar offset:number;\n\n\t\tthis.ambientR = this.ambientG = this.ambientB = 0;\n\n\t\tl = this.lightVertexConstantIndex;\n\t\tk = this.lightFragmentConstantIndex;\n\n\t\tvar cast:number = 0;\n\t\tvar dirLights:Array = this.lightPicker.directionalLights;\n\t\toffset = this.directionalLightsOffset;\n\t\tlen = this.lightPicker.directionalLights.length;\n\n\t\tif (offset > len) {\n\t\t\tcast = 1;\n\t\t\toffset -= len;\n\t\t}\n\n\t\tfor (; cast < numLightTypes; ++cast) {\n\t\t\tif (cast)\n\t\t\t\tdirLights = this.lightPicker.castingDirectionalLights;\n\n\t\t\tlen = dirLights.length;\n\n\t\t\tif (len > this.numDirectionalLights)\n\t\t\t\tlen = this.numDirectionalLights;\n\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tdirLight = dirLights[offset + i];\n\t\t\t\tdirPos = dirLight.sceneDirection;\n\n\t\t\t\tthis.ambientR += dirLight._iAmbientR;\n\t\t\t\tthis.ambientG += dirLight._iAmbientG;\n\t\t\t\tthis.ambientB += dirLight._iAmbientB;\n\n\t\t\t\tif (this.usesTangentSpace) {\n\t\t\t\t\tvar x:number = -dirPos.x;\n\t\t\t\t\tvar y:number = -dirPos.y;\n\t\t\t\t\tvar z:number = -dirPos.z;\n\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.x;\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.y;\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.z;\n\t\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\t\t\t\t}\n\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseR;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseG;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseB;\n\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularR;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularG;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularB;\n\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\n\t\t\t\tif (++total == this.numDirectionalLights) {\n\t\t\t\t\t// break loop\n\t\t\t\t\ti = len;\n\t\t\t\t\tcast = numLightTypes;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// more directional supported than currently picked, need to clamp all to 0\n\t\tif (this.numDirectionalLights > total) {\n\t\t\ti = k + (this.numDirectionalLights - total)*12;\n\n\t\t\twhile (k < i)\n\t\t\t\tthis.fragmentConstantData[k++] = 0;\n\t\t}\n\n\t\ttotal = 0;\n\n\t\tvar pointLights:Array = this.lightPicker.pointLights;\n\t\toffset = this.pointLightsOffset;\n\t\tlen = this.lightPicker.pointLights.length;\n\n\t\tif (offset > len) {\n\t\t\tcast = 1;\n\t\t\toffset -= len;\n\t\t} else {\n\t\t\tcast = 0;\n\t\t}\n\n\t\tfor (; cast < numLightTypes; ++cast) {\n\t\t\tif (cast)\n\t\t\t\tpointLights = this.lightPicker.castingPointLights;\n\n\t\t\tlen = pointLights.length;\n\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tpointLight = pointLights[offset + i];\n\t\t\t\tdirPos = pointLight.scenePosition;\n\n\t\t\t\tthis.ambientR += pointLight._iAmbientR;\n\t\t\t\tthis.ambientG += pointLight._iAmbientG;\n\t\t\t\tthis.ambientB += pointLight._iAmbientB;\n\n\t\t\t\tif (this.usesTangentSpace) {\n\t\t\t\t\tx = dirPos.x;\n\t\t\t\t\ty = dirPos.y;\n\t\t\t\t\tz = dirPos.z;\n\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z + this._pInverseSceneMatrix[12];\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z + this._pInverseSceneMatrix[13];\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z + this._pInverseSceneMatrix[14];\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else if (!this.usesGlobalPosFragment) {\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.x;\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.y;\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.z;\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.x;\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.y;\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.z;\n\t\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\t\t\t\t}\n\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseR;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseG;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseB;\n\n\t\t\t\tvar radius:number = pointLight._pRadius;\n\t\t\t\tthis.fragmentConstantData[k++] = radius*radius;\n\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularR;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularG;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularB;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._pFallOffFactor;\n\n\t\t\t\tif (++total == this.numPointLights) {\n\t\t\t\t\t// break loop\n\t\t\t\t\ti = len;\n\t\t\t\t\tcast = numLightTypes;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// more directional supported than currently picked, need to clamp all to 0\n\t\tif (this.numPointLights > total) {\n\t\t\ti = k + (total - this.numPointLights)*12;\n\n\t\t\tfor (; k < i; ++k)\n\t\t\t\tthis.fragmentConstantData[k] = 0;\n\t\t}\n\t}\n\n\t/**\n\t * Updates constant data render state used by the light probes. This method is optional for subclasses to implement.\n\t */\n\tprivate updateProbes(stage:Stage)\n\t{\n\t\tvar probe:LightProbe;\n\t\tvar lightProbes:Array = this.lightPicker.lightProbes;\n\t\tvar weights:Array = this.lightPicker.lightProbeWeights;\n\t\tvar len:number = lightProbes.length - this.lightProbesOffset;\n\t\tvar addDiff:boolean = this.usesProbesForDiffuse;\n\t\tvar addSpec:boolean = this.usesProbesForSpecular;\n\n\t\tif (!(addDiff || addSpec))\n\t\t\treturn;\n\n\t\tif (len > this.numLightProbes)\n\t\t\tlen = this.numLightProbes;\n\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tprobe = lightProbes[ this.lightProbesOffset + i];\n\n\t\t\tif (addDiff)\n\t\t\t\t( stage.context).activateCubeTexture(this.lightProbeDiffuseIndices[i], probe.diffuseMap);\n\n\t\t\tif (addSpec)\n\t\t\t\t( stage.context).activateCubeTexture(this.lightProbeSpecularIndices[i], probe.specularMap);\n\t\t}\n\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis.fragmentConstantData[this.probeWeightsIndex + i] = weights[this.lightProbesOffset + i];\n\t}\n}\n\nexport = ShaderLightingObject;", - "import Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport AnimationSetBase\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimationSetBase\");\nimport AnimatorBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimatorBase\");\nimport AnimationRegisterCache\t\t= require(\"awayjs-stagegl/lib/animators/data/AnimationRegisterCache\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ContextGLTriangleFace\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\n\n/**\n * ShaderObjectBase keeps track of the number of dependencies for \"named registers\" used across a pass.\n * Named registers are that are not necessarily limited to a single method. They are created by the compiler and\n * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed\n * each time a method has been compiled into the shader.\n *\n * @see RegisterPool.addUsage\n */\nclass ShaderObjectBase\n{\n\n\tprivate _defaultCulling:string = ContextGLTriangleFace.BACK;\n\n\tpublic _pInverseSceneMatrix:Array = new Array();\n\n\tpublic animationRegisterCache:AnimationRegisterCache;\n\n\tpublic profile:string;\n\n\t/**\n\t * The amount of used vertex constants in the vertex code. Used by the animation code generation to know from which index on registers are available.\n\t */\n\tpublic numUsedVertexConstants:number;\n\n\t/**\n\t * The amount of used fragment constants in the fragment code. Used by the animation code generation to know from which index on registers are available.\n\t */\n\tpublic numUsedFragmentConstants:number;\n\n\t/**\n\t * The amount of used vertex streams in the vertex code. Used by the animation code generation to know from which index on streams are available.\n\t */\n\tpublic numUsedStreams:number;\n\n\t/**\n\t *\n\t */\n\tpublic numUsedTextures:number;\n\n\t/**\n\t *\n\t */\n\tpublic numUsedVaryings:number;\n\n\tpublic animatableAttributes:Array;\n\tpublic animationTargetRegisters:Array;\n\tpublic uvSource:string;\n\tpublic uvTarget:string;\n\n\tpublic useAlphaPremultiplied:boolean;\n\tpublic useBothSides:boolean;\n\tpublic useMipmapping:boolean;\n\tpublic useSmoothTextures:boolean;\n\tpublic repeatTextures:boolean;\n\tpublic usesUVTransform:boolean;\n\tpublic alphaThreshold:number;\n\tpublic texture:Texture2DBase;\n\tpublic color:number;\n\n\n\t//set ambient values to default\n\tpublic ambientR:number = 0xFF;\n\tpublic ambientG:number = 0xFF;\n\tpublic ambientB:number = 0xFF;\n\n\t/**\n\t * Indicates whether the pass requires any fragment animation code.\n\t */\n\tpublic usesFragmentAnimation:boolean;\n\n\t/**\n\t * The amount of dependencies on the projected position.\n\t */\n\tpublic projectionDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the normal vector.\n\t */\n\tpublic normalDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the view direction.\n\t */\n\tpublic viewDirDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the primary UV coordinates.\n\t */\n\tpublic uvDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the secondary UV coordinates.\n\t */\n\tpublic secondaryUVDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the local position. This can be 0 while hasGlobalPosDependencies is true when\n\t * the global position is used as a temporary value (fe to calculate the view direction)\n\t */\n\tpublic localPosDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the global position. This can be 0 while hasGlobalPosDependencies is true when\n\t * the global position is used as a temporary value (fe to calculate the view direction)\n\t */\n\tpublic globalPosDependencies:number;\n\n\t/**\n\t * The amount of tangent vector dependencies (fragment shader).\n\t */\n\tpublic tangentDependencies:number;\n\n\t/**\n\t *\n\t */\n\tpublic outputsNormals:boolean;\n\n\t/**\n\t * Indicates whether or not normal calculations are expected in tangent space. This is only the case if no world-space\n\t * dependencies exist.\n\t */\n\tpublic usesTangentSpace:boolean;\n\n\t/**\n\t * Indicates whether or not normal calculations are output in tangent space.\n\t */\n\tpublic outputsTangentNormals:boolean;\n\n\t/**\n\t * Indicates whether there are any dependencies on the world-space position vector.\n\t */\n\tpublic usesGlobalPosFragment:boolean = false;\n\n\tpublic vertexConstantData:Array = new Array();\n\tpublic fragmentConstantData:Array = new Array();\n\n\t/**\n\t * The index for the common data register.\n\t */\n\tpublic commonsDataIndex:number;\n\n\t/**\n\t * The index for the UV vertex attribute stream.\n\t */\n\tpublic uvBufferIndex:number;\n\n\t/**\n\t * The index for the secondary UV vertex attribute stream.\n\t */\n\tpublic secondaryUVBufferIndex:number;\n\n\t/**\n\t * The index for the vertex normal attribute stream.\n\t */\n\tpublic normalBufferIndex:number;\n\n\t/**\n\t * The index for the vertex tangent attribute stream.\n\t */\n\tpublic tangentBufferIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the view matrix.\n\t */\n\tpublic viewMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the scene matrix.\n\t */\n\tpublic sceneMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the uniform scene matrix (the inverse transpose).\n\t */\n\tpublic sceneNormalMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the camera position.\n\t */\n\tpublic cameraPositionIndex:number;\n\n\t/**\n\t * The index for the UV transformation matrix vertex constant.\n\t */\n\tpublic uvTransformIndex:number;\n\n\t/**\n\t * Creates a new MethodCompilerVO object.\n\t */\n\tconstructor(profile)\n\t{\n\t\tthis.profile = profile;\n\t}\n\n\t/**\n\t * Factory method to create a concrete compiler object for this object\n\t *\n\t * @param materialPassVO\n\t * @returns {away.materials.ShaderCompilerBase}\n\t */\n\tpublic createCompiler(material:StageGLMaterialBase, materialPass:IMaterialPassStageGL):ShaderCompilerBase\n\t{\n\t\treturn new ShaderCompilerBase(material, materialPass, this);\n\t}\n\n\t/**\n\t * Clears dependency counts for all registers. Called when recompiling a pass.\n\t */\n\tpublic reset()\n\t{\n\t\tthis.projectionDependencies = 0;\n\t\tthis.normalDependencies = 0;\n\t\tthis.viewDirDependencies = 0;\n\t\tthis.uvDependencies = 0;\n\t\tthis.secondaryUVDependencies = 0;\n\t\tthis.globalPosDependencies = 0;\n\t\tthis.tangentDependencies = 0;\n\t\tthis.usesGlobalPosFragment = false;\n\t\tthis.usesFragmentAnimation = false;\n\t\tthis.usesTangentSpace = false;\n\t\tthis.outputsNormals = false;\n\t\tthis.outputsTangentNormals = false;\n\t}\n\n\t/**\n\t * Adds any external world space dependencies, used to force world space calculations.\n\t */\n\tpublic addWorldSpaceDependencies(fragmentLights:boolean)\n\t{\n\t\tif (this.viewDirDependencies > 0)\n\t\t\t++this.globalPosDependencies;\n\t}\n\n\tpublic pInitRegisterIndices()\n\t{\n\t\tthis.commonsDataIndex = -1;\n\t\tthis.cameraPositionIndex = -1;\n\t\tthis.uvBufferIndex = -1;\n\t\tthis.uvTransformIndex = -1;\n\t\tthis.secondaryUVBufferIndex = -1;\n\t\tthis.normalBufferIndex = -1;\n\t\tthis.tangentBufferIndex = -1;\n\t\tthis.sceneMatrixIndex = -1;\n\t\tthis.sceneNormalMatrixIndex = -1;\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this shader object.\n\t */\n\tpublic initConstantData(registerCache:ShaderRegisterCache, animatableAttributes:Array, animationTargetRegisters:Array, uvSource:string, uvTarget:string)\n\t{\n\t\t//Updates the amount of used register indices.\n\t\tthis.numUsedVertexConstants = registerCache.numUsedVertexConstants;\n\t\tthis.numUsedFragmentConstants = registerCache.numUsedFragmentConstants;\n\t\tthis.numUsedStreams = registerCache.numUsedStreams;\n\t\tthis.numUsedTextures = registerCache.numUsedTextures;\n\t\tthis.numUsedVaryings = registerCache.numUsedVaryings;\n\t\tthis.numUsedFragmentConstants = registerCache.numUsedFragmentConstants;\n\n\t\tthis.animatableAttributes = animatableAttributes;\n\t\tthis.animationTargetRegisters = animationTargetRegisters;\n\t\tthis.uvSource = uvSource;\n\t\tthis.uvTarget = uvTarget;\n\n\t\tthis.vertexConstantData.length = this.numUsedVertexConstants*4;\n\t\tthis.fragmentConstantData.length = this.numUsedFragmentConstants*4;\n\n\t\t//Initializes commonly required constant values.\n\t\tthis.fragmentConstantData[this.commonsDataIndex] = .5;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 1] = 0;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 2] = 1/255;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 3] = 1;\n\n\t\t//Initializes the default UV transformation matrix.\n\t\tif (this.uvTransformIndex >= 0) {\n\t\t\tthis.vertexConstantData[this.uvTransformIndex] = 1;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 2] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = 1;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 6] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = 0;\n\t\t}\n\n\t\tif (this.cameraPositionIndex >= 0)\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 3] = 1;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(stage:Stage, camera:Camera)\n\t{\n\t\t( stage.context).setCulling(this.useBothSides? ContextGLTriangleFace.NONE : this._defaultCulling, camera.projection.coordinateSystem);\n\n\t\tif (!this.usesTangentSpace && this.cameraPositionIndex >= 0) {\n\t\t\tvar pos:Vector3D = camera.scenePosition;\n\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex] = pos.x;\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 1] = pos.y;\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 2] = pos.z;\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iDeactivate(stage:Stage)\n\t{\n\n\t}\n\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tif (renderable.materialOwner.animator)\n\t\t\t( renderable.materialOwner.animator).setRenderState(this, renderable, stage, camera, this.numUsedVertexConstants, this.numUsedStreams);\n\n\t\tif (this.uvBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.uvBufferIndex, renderable.getVertexData(TriangleSubGeometry.UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.UV_DATA), TriangleSubGeometry.UV_FORMAT);\n\n\t\tif (this.secondaryUVBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.secondaryUVBufferIndex, renderable.getVertexData(TriangleSubGeometry.SECONDARY_UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.SECONDARY_UV_DATA), TriangleSubGeometry.SECONDARY_UV_FORMAT);\n\n\t\tif (this.normalBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.normalBufferIndex, renderable.getVertexData(TriangleSubGeometry.NORMAL_DATA), renderable.getVertexOffset(TriangleSubGeometry.NORMAL_DATA), TriangleSubGeometry.NORMAL_FORMAT);\n\n\t\tif (this.tangentBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.tangentBufferIndex, renderable.getVertexData(TriangleSubGeometry.TANGENT_DATA), renderable.getVertexOffset(TriangleSubGeometry.TANGENT_DATA), TriangleSubGeometry.TANGENT_FORMAT);\n\n\n\t\tif (this.usesUVTransform) {\n\t\t\tvar uvTransform:Matrix = renderable.materialOwner.uvTransform.matrix;\n\n\t\t\tif (uvTransform) {\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex] = uvTransform.a;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = uvTransform.b;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = uvTransform.tx;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = uvTransform.c;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = uvTransform.d;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = uvTransform.ty;\n\t\t\t} else {\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex] = 1;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = 1;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.sceneNormalMatrixIndex >= 0)\n\t\t\trenderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this.vertexConstantData, this.sceneNormalMatrixIndex, false);\n\n\t\tif (this.usesTangentSpace && this.cameraPositionIndex >= 0) {\n\n\t\t\trenderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this._pInverseSceneMatrix);\n\t\t\tvar pos:Vector3D = camera.scenePosition;\n\t\t\tvar x:number = pos.x;\n\t\t\tvar y:number = pos.y;\n\t\t\tvar z:number = pos.z;\n\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z + this._pInverseSceneMatrix[12];\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 1] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z + this._pInverseSceneMatrix[13];\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 2] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z + this._pInverseSceneMatrix[14];\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\t//TODO uncount associated program data\n\t}\n}\n\nexport = ShaderObjectBase;", + "import LightSources\t\t\t\t\t= require(\"awayjs-display/lib/materials/LightSources\");\n\nimport ContextGLProfile\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProfile\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\n\n/**\n * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a\n * material. Concrete subclasses are used by the default materials.\n *\n * @see away.materials.ShadingMethodBase\n */\nclass ShaderLightingCompiler extends ShaderCompilerBase\n{\n\tprivate _materialLightingPass:ILightingPassStageGL;\n\tprivate _shaderLightingObject:ShaderLightingObject;\n\tpublic _pointLightFragmentConstants:Array;\n\tpublic _pointLightVertexConstants:Array;\n\tpublic _dirLightFragmentConstants:Array;\n\tpublic _dirLightVertexConstants:Array;\n\n\tpublic _pNumProbeRegisters:number;\n\n\t/**\n\t * Creates a new ShaderCompilerBase object.\n\t * @param profile The compatibility profile of the renderer.\n\t */\n\tconstructor(material:StageGLMaterialBase, materialPass:ILightingPassStageGL, shaderObject:ShaderLightingObject)\n\t{\n\t\tsuper(material, materialPass, shaderObject);\n\n\t\tthis._materialLightingPass = materialPass;\n\t\tthis._shaderLightingObject = shaderObject;\n\t}\n\n\t/**\n\t * Compile the code for the methods.\n\t */\n\tpublic pCompileDependencies()\n\t{\n\t\tsuper.pCompileDependencies();\n\n\t\t//compile the lighting code\n\t\tif (this._shaderLightingObject.usesShadows)\n\t\t\tthis.pCompileShadowCode();\n\n\t\tif (this._shaderLightingObject.usesLights) {\n\t\t\tthis.initLightRegisters();\n\t\t\tthis.compileLightCode();\n\t\t}\n\n\t\tif (this._shaderLightingObject.usesProbes)\n\t\t\tthis.compileLightProbeCode();\n\n\t\tthis._pVertexCode += this._materialLightingPass._iGetPostLightingVertexCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters);\n\t\tthis._pFragmentCode += this._materialLightingPass._iGetPostLightingFragmentCode(this._shaderLightingObject, this._pRegisterCache, this._pSharedRegisters);\n\t}\n\n\t/**\n\t * Provides the code to provide shadow mapping.\n\t */\n\tpublic pCompileShadowCode()\n\t{\n\t\tif (this._shaderLightingObject.normalDependencies > 0) {\n\t\t\tthis._pSharedRegisters.shadowTarget = this._pSharedRegisters.normalFragment;\n\t\t} else {\n\t\t\tthis._pSharedRegisters.shadowTarget = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\tthis._pRegisterCache.addFragmentTempUsages(this._pSharedRegisters.shadowTarget, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Initializes constant registers to contain light data.\n\t */\n\tprivate initLightRegisters()\n\t{\n\t\t// init these first so we're sure they're in sequence\n\t\tvar i:number, len:number;\n\n\t\tif (this._dirLightVertexConstants) {\n\t\t\tlen = this._dirLightVertexConstants.length;\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tthis._dirLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant();\n\n\t\t\t\tif (this._shaderLightingObject.lightVertexConstantIndex == -1)\n\t\t\t\t\tthis._shaderLightingObject.lightVertexConstantIndex = this._dirLightVertexConstants[i].index*4;\n\t\t\t}\n\t\t}\n\n\t\tif (this._pointLightVertexConstants) {\n\t\t\tlen = this._pointLightVertexConstants.length;\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tthis._pointLightVertexConstants[i] = this._pRegisterCache.getFreeVertexConstant();\n\n\t\t\t\tif (this._shaderLightingObject.lightVertexConstantIndex == -1)\n\t\t\t\t\tthis._shaderLightingObject.lightVertexConstantIndex = this._pointLightVertexConstants[i].index*4;\n\t\t\t}\n\t\t}\n\n\t\tlen = this._dirLightFragmentConstants.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._dirLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = this._dirLightFragmentConstants[i].index*4;\n\t\t}\n\n\t\tlen = this._pointLightFragmentConstants.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._pointLightFragmentConstants[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = this._pointLightFragmentConstants[i].index*4;\n\t\t}\n\t}\n\n\t/**\n\t * Compiles the shading code for directional and point lights.\n\t */\n\tprivate compileLightCode()\n\t{\n\t\tvar diffuseColorReg:ShaderRegisterElement;\n\t\tvar specularColorReg:ShaderRegisterElement;\n\t\tvar lightPosReg:ShaderRegisterElement;\n\t\tvar lightDirReg:ShaderRegisterElement;\n\t\tvar vertexRegIndex:number = 0;\n\t\tvar fragmentRegIndex:number = 0;\n\t\tvar addSpec:boolean = this._shaderLightingObject.usesLightsForSpecular;\n\t\tvar addDiff:boolean = this._shaderLightingObject.usesLightsForDiffuse;\n\n\t\t//compile the shading code for directional lights.\n\t\tfor (var i:number = 0; i < this._materialLightingPass.iNumDirectionalLights; ++i) {\n\t\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\t\tlightDirReg = this._dirLightVertexConstants[vertexRegIndex++];\n\n\t\t\t\tvar lightVarying:ShaderRegisterElement = this._pRegisterCache.getFreeVarying();\n\n\t\t\t\tthis._pVertexCode += \"m33 \" + lightVarying + \".xyz, \" + lightDirReg + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightVarying + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\t\t\tlightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\t\tthis._pRegisterCache.addVertexTempUsages(lightDirReg, 1);\n\n\t\t\t\tthis._pFragmentCode += \"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightDirReg + \".w, \" + lightVarying + \".w\\n\";\n\n\t\t\t} else {\n\t\t\t\tlightDirReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\t\t\t}\n\n\t\t\tdiffuseColorReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\t\t\tspecularColorReg = this._dirLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tif (addDiff)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (addSpec)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace)\n\t\t\t\tthis._pRegisterCache.removeVertexTempUsage(lightDirReg);\n\t\t}\n\n\t\tvertexRegIndex = 0;\n\t\tfragmentRegIndex = 0;\n\n\t\t//compile the shading code for point lights\n\t\tfor (var i:number = 0; i < this._materialLightingPass.iNumPointLights; ++i) {\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment)\n\t\t\t\tlightPosReg = this._pointLightVertexConstants[vertexRegIndex++];\n\t\t\telse\n\t\t\t\tlightPosReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tdiffuseColorReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\t\t\tspecularColorReg = this._pointLightFragmentConstants[fragmentRegIndex++];\n\n\t\t\tlightDirReg = this._pRegisterCache.getFreeFragmentVectorTemp();\n\t\t\tthis._pRegisterCache.addFragmentTempUsages(lightDirReg, 1);\n\n\t\t\tvar lightVarying:ShaderRegisterElement;\n\n\t\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\t\tlightVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tvar temp:ShaderRegisterElement = this._pRegisterCache.getFreeVertexVectorTemp();\n\t\t\t\tthis._pVertexCode += \"sub \" + temp + \", \" + lightPosReg + \", \" + this._pSharedRegisters.localPosition + \"\\n\" +\n\t\t\t\t\t\"m33 \" + lightVarying + \".xyz, \" + temp + \", \" + this._pSharedRegisters.animatedTangent + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightVarying + \".w, \" + this._pSharedRegisters.localPosition + \".w\\n\";\n\t\t\t} else if (!this._shaderLightingObject.usesGlobalPosFragment) {\n\t\t\t\tlightVarying = this._pRegisterCache.getFreeVarying();\n\t\t\t\tthis._pVertexCode += \"sub \" + lightVarying + \", \" + lightPosReg + \", \" + this._pSharedRegisters.globalPositionVertex + \"\\n\";\n\t\t\t} else {\n\t\t\t\tlightVarying = lightDirReg;\n\t\t\t\tthis._pFragmentCode += \"sub \" + lightDirReg + \", \" + lightPosReg + \", \" + this._pSharedRegisters.globalPositionVarying + \"\\n\";\n\t\t\t}\n\n\t\t\tif (this._shaderLightingObject.usesLightFallOff) {\n\t\t\t\t// calculate attenuation\n\t\t\t\tthis._pFragmentCode += // attenuate\n\t\t\t\t\t\"dp3 \" + lightDirReg + \".w, \" + lightVarying + \", \" + lightVarying + \"\\n\" + // w = d - radius\n\t\t\t\t\t\"sub \" + lightDirReg + \".w, \" + lightDirReg + \".w, \" + diffuseColorReg + \".w\\n\" + // w = (d - radius)/(max-min)\n\t\t\t\t\t\"mul \" + lightDirReg + \".w, \" + lightDirReg + \".w, \" + specularColorReg + \".w\\n\" + // w = clamp(w, 0, 1)\n\t\t\t\t\t\"sat \" + lightDirReg + \".w, \" + lightDirReg + \".w\\n\" + // w = 1-w\n\t\t\t\t\t\"sub \" + lightDirReg + \".w, \" + this._pSharedRegisters.commons + \".w, \" + lightDirReg + \".w\\n\" + // normalize\n\t\t\t\t\t\"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\";\n\t\t\t} else {\n\t\t\t\tthis._pFragmentCode += \"nrm \" + lightDirReg + \".xyz, \" + lightVarying + \"\\n\" +\n\t\t\t\t\t\"mov \" + lightDirReg + \".w, \" + lightVarying + \".w\\n\";\n\t\t\t}\n\n\t\t\tif (this._shaderLightingObject.lightFragmentConstantIndex == -1)\n\t\t\t\tthis._shaderLightingObject.lightFragmentConstantIndex = lightPosReg.index*4;\n\n\t\t\tif (addDiff)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightDiffuseFragmentCode(this._shaderLightingObject, lightDirReg, diffuseColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tif (addSpec)\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerLightSpecularFragmentCode(this._shaderLightingObject, lightDirReg, specularColorReg, this._pRegisterCache, this._pSharedRegisters);\n\n\t\t\tthis._pRegisterCache.removeFragmentTempUsage(lightDirReg);\n\t\t}\n\t}\n\n\t/**\n\t * Compiles shading code for light probes.\n\t */\n\tprivate compileLightProbeCode()\n\t{\n\t\tvar weightReg:string;\n\t\tvar weightComponents = [ \".x\", \".y\", \".z\", \".w\" ];\n\t\tvar weightRegisters:Array = new Array();\n\t\tvar i:number;\n\t\tvar texReg:ShaderRegisterElement;\n\t\tvar addSpec:boolean = this._shaderLightingObject.usesProbesForSpecular;\n\t\tvar addDiff:boolean = this._shaderLightingObject.usesProbesForDiffuse;\n\n\t\tif (addDiff)\n\t\t\tthis._shaderLightingObject.lightProbeDiffuseIndices = new Array();\n\n\t\tif (addSpec)\n\t\t\tthis._shaderLightingObject.lightProbeSpecularIndices = new Array();\n\n\t\tfor (i = 0; i < this._pNumProbeRegisters; ++i) {\n\t\t\tweightRegisters[i] = this._pRegisterCache.getFreeFragmentConstant();\n\n\t\t\tif (i == 0)\n\t\t\t\tthis._shaderLightingObject.probeWeightsIndex = weightRegisters[i].index*4;\n\t\t}\n\n\t\tfor (i = 0; i < this._materialLightingPass.iNumLightProbes; ++i) {\n\t\t\tweightReg = weightRegisters[Math.floor(i/4)].toString() + weightComponents[i%4];\n\n\t\t\tif (addDiff) {\n\t\t\t\ttexReg = this._pRegisterCache.getFreeTextureReg();\n\t\t\t\tthis._shaderLightingObject.lightProbeDiffuseIndices[i] = texReg.index;\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerProbeDiffuseFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters);\n\t\t\t}\n\n\t\t\tif (addSpec) {\n\t\t\t\ttexReg = this._pRegisterCache.getFreeTextureReg();\n\t\t\t\tthis._shaderLightingObject.lightProbeSpecularIndices[i] = texReg.index;\n\t\t\t\tthis._pFragmentCode += this._materialLightingPass._iGetPerProbeSpecularFragmentCode(this._shaderLightingObject, texReg, weightReg, this._pRegisterCache, this._pSharedRegisters);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Reset all the indices to \"unused\".\n\t */\n\tpublic pInitRegisterIndices()\n\t{\n\t\tsuper.pInitRegisterIndices();\n\n\t\tthis._shaderLightingObject.lightVertexConstantIndex = -1;\n\t\tthis._shaderLightingObject.lightFragmentConstantIndex = -1;\n\t\tthis._shaderLightingObject.probeWeightsIndex = -1;\n\n\t\tthis._pNumProbeRegisters = Math.ceil(this._materialLightingPass.iNumLightProbes/4);\n\n\t\t//init light data\n\t\tif (this._shaderLightingObject.usesTangentSpace || !this._shaderLightingObject.usesGlobalPosFragment) {\n\t\t\tthis._pointLightVertexConstants = new Array(this._materialLightingPass.iNumPointLights);\n\t\t\tthis._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights*2);\n\t\t} else {\n\t\t\tthis._pointLightFragmentConstants = new Array(this._materialLightingPass.iNumPointLights*3);\n\t\t}\n\n\t\tif (this._shaderLightingObject.usesTangentSpace) {\n\t\t\tthis._dirLightVertexConstants = new Array(this._materialLightingPass.iNumDirectionalLights);\n\t\t\tthis._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights*2);\n\t\t} else {\n\t\t\tthis._dirLightFragmentConstants = new Array(this._materialLightingPass.iNumDirectionalLights*3);\n\t\t}\n\t}\n\n\n\t/**\n\t * Figure out which named registers are required, and how often.\n\t */\n\tpublic pCalculateDependencies()\n\t{\n\t\tvar numAllLights:number = this._materialLightingPass.iNumPointLights + this._materialLightingPass.iNumDirectionalLights;\n\t\tvar numLightProbes:number = this._materialLightingPass.iNumLightProbes;\n\t\tvar diffuseLightSources:number = this._pMaterial.diffuseLightSources;\n\t\tvar specularLightSources:number = this._materialLightingPass._iUsesSpecular()? this._pMaterial.specularLightSources : 0x00;\n\t\tvar combinedLightSources:number = diffuseLightSources | specularLightSources;\n\n\t\tthis._shaderLightingObject.usesLightFallOff = this._pMaterial.enableLightFallOff && this._shaderLightingObject.profile != ContextGLProfile.BASELINE_CONSTRAINED;\n\t\tthis._shaderLightingObject.numLights = numAllLights + numLightProbes;\n\t\tthis._shaderLightingObject.numPointLights = this._materialLightingPass.iNumPointLights;\n\t\tthis._shaderLightingObject.numDirectionalLights = this._materialLightingPass.iNumDirectionalLights;\n\t\tthis._shaderLightingObject.numLightProbes = numLightProbes;\n\t\tthis._shaderLightingObject.pointLightsOffset = this._materialLightingPass.pointLightsOffset;\n\t\tthis._shaderLightingObject.directionalLightsOffset = this._materialLightingPass.directionalLightsOffset;\n\t\tthis._shaderLightingObject.lightProbesOffset = this._materialLightingPass.lightProbesOffset;\n\t\tthis._shaderLightingObject.lightPicker = this._materialLightingPass.lightPicker;\n\t\tthis._shaderLightingObject.usesLights = numAllLights > 0 && (combinedLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbes = numLightProbes > 0 && (combinedLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesLightsForSpecular = numAllLights > 0 && (specularLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbesForSpecular = numLightProbes > 0 && (specularLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesLightsForDiffuse = numAllLights > 0 && (diffuseLightSources & LightSources.LIGHTS) != 0;\n\t\tthis._shaderLightingObject.usesProbesForDiffuse = numLightProbes > 0 && (diffuseLightSources & LightSources.PROBES) != 0;\n\t\tthis._shaderLightingObject.usesShadows = this._materialLightingPass._iUsesShadows();\n\n\t\tsuper.pCalculateDependencies();\n\t}\n}\n\nexport = ShaderLightingCompiler;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport LightProbe\t\t\t\t\t= require(\"awayjs-display/lib/entities/LightProbe\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport LightPickerBase\t\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/LightPickerBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderLightingCompiler\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\n\n/**\n * ShaderObjectBase keeps track of the number of dependencies for \"named registers\" used across a pass.\n * Named registers are that are not necessarily limited to a single method. They are created by the compiler and\n * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed\n * each time a method has been compiled into the shader.\n *\n * @see RegisterPool.addUsage\n */\nclass ShaderLightingObject extends ShaderObjectBase\n{\n\t/**\n\t * The first index for the fragment constants containing the light data.\n\t */\n\tpublic lightFragmentConstantIndex:number;\n\n\t/**\n\t * The starting index if the vertex constant to which light data needs to be uploaded.\n\t */\n\tpublic lightVertexConstantIndex:number;\n\n\t/**\n\t * Indices for the light probe diffuse textures.\n\t */\n\tpublic lightProbeDiffuseIndices:Array /*uint*/;\n\n\t/**\n\t * Indices for the light probe specular textures.\n\t */\n\tpublic lightProbeSpecularIndices:Array /*uint*/;\n\n\t/**\n\t * The index of the fragment constant containing the weights for the light probes.\n\t */\n\tpublic probeWeightsIndex:number;\n\n\tpublic numLights:number;\n\tpublic usesLightFallOff:boolean;\n\n\tpublic usesShadows:boolean;\n\n\tpublic numPointLights:number;\n\tpublic numDirectionalLights:number;\n\tpublic numLightProbes:number;\n\tpublic pointLightsOffset:number;\n\tpublic directionalLightsOffset:number;\n\tpublic lightProbesOffset:number;\n\tpublic lightPicker:LightPickerBase;\n\n\t/**\n\t * Indicates whether the shader uses any lights.\n\t */\n\tpublic usesLights:boolean;\n\n\t/**\n\t * Indicates whether the shader uses any light probes.\n\t */\n\tpublic usesProbes:boolean;\n\n\t/**\n\t * Indicates whether the lights uses any specular components.\n\t */\n\tpublic usesLightsForSpecular:boolean;\n\n\t/**\n\t * Indicates whether the probes uses any specular components.\n\t */\n\tpublic usesProbesForSpecular:boolean;\n\n\t/**\n\t * Indicates whether the lights uses any diffuse components.\n\t */\n\tpublic usesLightsForDiffuse:boolean;\n\n\t/**\n\t * Indicates whether the probes uses any diffuse components.\n\t */\n\tpublic usesProbesForDiffuse:boolean;\n\n\t/**\n\t * Creates a new MethodCompilerVO object.\n\t */\n\tconstructor(profile)\n\t{\n\t\tsuper(profile);\n\t}\n\n\t/**\n\t * Factory method to create a concrete compiler object for this object\n\t *\n\t * @param materialPassVO\n\t * @returns {away.materials.ShaderLightingCompiler}\n\t */\n\tpublic createCompiler(material:StageGLMaterialBase, materialPass:ILightingPassStageGL):ShaderCompilerBase\n\t{\n\t\treturn new ShaderLightingCompiler(material, materialPass, this);\n\t}\n\n\t/**\n\t * Clears dependency counts for all registers. Called when recompiling a pass.\n\t */\n\tpublic reset()\n\t{\n\t\tsuper.reset();\n\n\t\tthis.numLights = 0;\n\t\tthis.usesLightFallOff = true;\n\t}\n\n\t/**\n\t * Adds any external world space dependencies, used to force world space calculations.\n\t */\n\tpublic addWorldSpaceDependencies(fragmentLights:boolean)\n\t{\n\t\tsuper.addWorldSpaceDependencies(fragmentLights);\n\n\t\tif (this.numPointLights > 0 && this.usesLights) {\n\t\t\t++this.globalPosDependencies;\n\n\t\t\tif (fragmentLights)\n\t\t\t\tthis.usesGlobalPosFragment = true;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper.setRenderState(renderable, stage, camera, viewProjection);\n\n\t\tif (this.usesLights)\n\t\t\tthis.updateLights();\n\n\t\tif (this.usesProbes)\n\t\t\tthis.updateProbes(stage);\n\t}\n\n\t/**\n\t * Updates constant data render state used by the lights. This method is optional for subclasses to implement.\n\t */\n\tprivate updateLights()\n\t{\n\t\tvar dirLight:DirectionalLight;\n\t\tvar pointLight:PointLight;\n\t\tvar i:number = 0;\n\t\tvar k:number = 0;\n\t\tvar len:number;\n\t\tvar dirPos:Vector3D;\n\t\tvar total:number = 0;\n\t\tvar numLightTypes:number = this.usesShadows? 2 : 1;\n\t\tvar l:number;\n\t\tvar offset:number;\n\n\t\tthis.ambientR = this.ambientG = this.ambientB = 0;\n\n\t\tl = this.lightVertexConstantIndex;\n\t\tk = this.lightFragmentConstantIndex;\n\n\t\tvar cast:number = 0;\n\t\tvar dirLights:Array = this.lightPicker.directionalLights;\n\t\toffset = this.directionalLightsOffset;\n\t\tlen = this.lightPicker.directionalLights.length;\n\n\t\tif (offset > len) {\n\t\t\tcast = 1;\n\t\t\toffset -= len;\n\t\t}\n\n\t\tfor (; cast < numLightTypes; ++cast) {\n\t\t\tif (cast)\n\t\t\t\tdirLights = this.lightPicker.castingDirectionalLights;\n\n\t\t\tlen = dirLights.length;\n\n\t\t\tif (len > this.numDirectionalLights)\n\t\t\t\tlen = this.numDirectionalLights;\n\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tdirLight = dirLights[offset + i];\n\t\t\t\tdirPos = dirLight.sceneDirection;\n\n\t\t\t\tthis.ambientR += dirLight._iAmbientR;\n\t\t\t\tthis.ambientG += dirLight._iAmbientG;\n\t\t\t\tthis.ambientB += dirLight._iAmbientB;\n\n\t\t\t\tif (this.usesTangentSpace) {\n\t\t\t\t\tvar x:number = -dirPos.x;\n\t\t\t\t\tvar y:number = -dirPos.y;\n\t\t\t\t\tvar z:number = -dirPos.z;\n\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z;\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.x;\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.y;\n\t\t\t\t\tthis.fragmentConstantData[k++] = -dirPos.z;\n\t\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\t\t\t\t}\n\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseR;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseG;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iDiffuseB;\n\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularR;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularG;\n\t\t\t\tthis.fragmentConstantData[k++] = dirLight._iSpecularB;\n\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\n\t\t\t\tif (++total == this.numDirectionalLights) {\n\t\t\t\t\t// break loop\n\t\t\t\t\ti = len;\n\t\t\t\t\tcast = numLightTypes;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// more directional supported than currently picked, need to clamp all to 0\n\t\tif (this.numDirectionalLights > total) {\n\t\t\ti = k + (this.numDirectionalLights - total)*12;\n\n\t\t\twhile (k < i)\n\t\t\t\tthis.fragmentConstantData[k++] = 0;\n\t\t}\n\n\t\ttotal = 0;\n\n\t\tvar pointLights:Array = this.lightPicker.pointLights;\n\t\toffset = this.pointLightsOffset;\n\t\tlen = this.lightPicker.pointLights.length;\n\n\t\tif (offset > len) {\n\t\t\tcast = 1;\n\t\t\toffset -= len;\n\t\t} else {\n\t\t\tcast = 0;\n\t\t}\n\n\t\tfor (; cast < numLightTypes; ++cast) {\n\t\t\tif (cast)\n\t\t\t\tpointLights = this.lightPicker.castingPointLights;\n\n\t\t\tlen = pointLights.length;\n\n\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\tpointLight = pointLights[offset + i];\n\t\t\t\tdirPos = pointLight.scenePosition;\n\n\t\t\t\tthis.ambientR += pointLight._iAmbientR;\n\t\t\t\tthis.ambientG += pointLight._iAmbientG;\n\t\t\t\tthis.ambientB += pointLight._iAmbientB;\n\n\t\t\t\tif (this.usesTangentSpace) {\n\t\t\t\t\tx = dirPos.x;\n\t\t\t\t\ty = dirPos.y;\n\t\t\t\t\tz = dirPos.z;\n\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z + this._pInverseSceneMatrix[12];\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z + this._pInverseSceneMatrix[13];\n\t\t\t\t\tthis.vertexConstantData[l++] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z + this._pInverseSceneMatrix[14];\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else if (!this.usesGlobalPosFragment) {\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.x;\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.y;\n\t\t\t\t\tthis.vertexConstantData[l++] = dirPos.z;\n\t\t\t\t\tthis.vertexConstantData[l++] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.x;\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.y;\n\t\t\t\t\tthis.fragmentConstantData[k++] = dirPos.z;\n\t\t\t\t\tthis.fragmentConstantData[k++] = 1;\n\t\t\t\t}\n\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseR;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseG;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iDiffuseB;\n\n\t\t\t\tvar radius:number = pointLight._pRadius;\n\t\t\t\tthis.fragmentConstantData[k++] = radius*radius;\n\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularR;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularG;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._iSpecularB;\n\t\t\t\tthis.fragmentConstantData[k++] = pointLight._pFallOffFactor;\n\n\t\t\t\tif (++total == this.numPointLights) {\n\t\t\t\t\t// break loop\n\t\t\t\t\ti = len;\n\t\t\t\t\tcast = numLightTypes;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// more directional supported than currently picked, need to clamp all to 0\n\t\tif (this.numPointLights > total) {\n\t\t\ti = k + (total - this.numPointLights)*12;\n\n\t\t\tfor (; k < i; ++k)\n\t\t\t\tthis.fragmentConstantData[k] = 0;\n\t\t}\n\t}\n\n\t/**\n\t * Updates constant data render state used by the light probes. This method is optional for subclasses to implement.\n\t */\n\tprivate updateProbes(stage:Stage)\n\t{\n\t\tvar probe:LightProbe;\n\t\tvar lightProbes:Array = this.lightPicker.lightProbes;\n\t\tvar weights:Array = this.lightPicker.lightProbeWeights;\n\t\tvar len:number = lightProbes.length - this.lightProbesOffset;\n\t\tvar addDiff:boolean = this.usesProbesForDiffuse;\n\t\tvar addSpec:boolean = this.usesProbesForSpecular;\n\n\t\tif (!(addDiff || addSpec))\n\t\t\treturn;\n\n\t\tif (len > this.numLightProbes)\n\t\t\tlen = this.numLightProbes;\n\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tprobe = lightProbes[ this.lightProbesOffset + i];\n\n\t\t\tif (addDiff)\n\t\t\t\t( stage.context).activateCubeTexture(this.lightProbeDiffuseIndices[i], probe.diffuseMap);\n\n\t\t\tif (addSpec)\n\t\t\t\t( stage.context).activateCubeTexture(this.lightProbeSpecularIndices[i], probe.specularMap);\n\t\t}\n\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis.fragmentConstantData[this.probeWeightsIndex + i] = weights[this.lightProbesOffset + i];\n\t}\n}\n\nexport = ShaderLightingObject;", + "import Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport AnimationSetBase\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimationSetBase\");\nimport AnimatorBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/animators/AnimatorBase\");\nimport AnimationRegisterCache\t\t= require(\"awayjs-stagegl/lib/animators/data/AnimationRegisterCache\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ContextGLTriangleFace\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTriangleFace\");\nimport StageGLMaterialBase\t\t\t= require(\"awayjs-stagegl/lib/materials/StageGLMaterialBase\");\nimport ShaderCompilerBase\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\n\n/**\n * ShaderObjectBase keeps track of the number of dependencies for \"named registers\" used across a pass.\n * Named registers are that are not necessarily limited to a single method. They are created by the compiler and\n * passed on to methods. The compiler uses the results to reserve usages through RegisterPool, which can be removed\n * each time a method has been compiled into the shader.\n *\n * @see RegisterPool.addUsage\n */\nclass ShaderObjectBase\n{\n\n\tprivate _defaultCulling:string = ContextGLTriangleFace.BACK;\n\n\tpublic _pInverseSceneMatrix:Array = new Array();\n\n\tpublic animationRegisterCache:AnimationRegisterCache;\n\n\tpublic profile:string;\n\n\t/**\n\t * The amount of used vertex constants in the vertex code. Used by the animation code generation to know from which index on registers are available.\n\t */\n\tpublic numUsedVertexConstants:number;\n\n\t/**\n\t * The amount of used fragment constants in the fragment code. Used by the animation code generation to know from which index on registers are available.\n\t */\n\tpublic numUsedFragmentConstants:number;\n\n\t/**\n\t * The amount of used vertex streams in the vertex code. Used by the animation code generation to know from which index on streams are available.\n\t */\n\tpublic numUsedStreams:number;\n\n\t/**\n\t *\n\t */\n\tpublic numUsedTextures:number;\n\n\t/**\n\t *\n\t */\n\tpublic numUsedVaryings:number;\n\n\tpublic animatableAttributes:Array;\n\tpublic animationTargetRegisters:Array;\n\tpublic uvSource:string;\n\tpublic uvTarget:string;\n\n\tpublic useAlphaPremultiplied:boolean;\n\tpublic useBothSides:boolean;\n\tpublic useMipmapping:boolean;\n\tpublic useSmoothTextures:boolean;\n\tpublic repeatTextures:boolean;\n\tpublic usesUVTransform:boolean;\n\tpublic alphaThreshold:number;\n\tpublic texture:Texture2DBase;\n\tpublic color:number;\n\n\n\t//set ambient values to default\n\tpublic ambientR:number = 0xFF;\n\tpublic ambientG:number = 0xFF;\n\tpublic ambientB:number = 0xFF;\n\n\t/**\n\t * Indicates whether the pass requires any fragment animation code.\n\t */\n\tpublic usesFragmentAnimation:boolean;\n\n\t/**\n\t * The amount of dependencies on the projected position.\n\t */\n\tpublic projectionDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the normal vector.\n\t */\n\tpublic normalDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the view direction.\n\t */\n\tpublic viewDirDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the primary UV coordinates.\n\t */\n\tpublic uvDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the secondary UV coordinates.\n\t */\n\tpublic secondaryUVDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the local position. This can be 0 while hasGlobalPosDependencies is true when\n\t * the global position is used as a temporary value (fe to calculate the view direction)\n\t */\n\tpublic localPosDependencies:number;\n\n\t/**\n\t * The amount of dependencies on the global position. This can be 0 while hasGlobalPosDependencies is true when\n\t * the global position is used as a temporary value (fe to calculate the view direction)\n\t */\n\tpublic globalPosDependencies:number;\n\n\t/**\n\t * The amount of tangent vector dependencies (fragment shader).\n\t */\n\tpublic tangentDependencies:number;\n\n\t/**\n\t *\n\t */\n\tpublic outputsNormals:boolean;\n\n\t/**\n\t * Indicates whether or not normal calculations are expected in tangent space. This is only the case if no world-space\n\t * dependencies exist.\n\t */\n\tpublic usesTangentSpace:boolean;\n\n\t/**\n\t * Indicates whether or not normal calculations are output in tangent space.\n\t */\n\tpublic outputsTangentNormals:boolean;\n\n\t/**\n\t * Indicates whether there are any dependencies on the world-space position vector.\n\t */\n\tpublic usesGlobalPosFragment:boolean = false;\n\n\tpublic vertexConstantData:Array = new Array();\n\tpublic fragmentConstantData:Array = new Array();\n\n\t/**\n\t * The index for the common data register.\n\t */\n\tpublic commonsDataIndex:number;\n\n\t/**\n\t * The index for the UV vertex attribute stream.\n\t */\n\tpublic uvBufferIndex:number;\n\n\t/**\n\t * The index for the secondary UV vertex attribute stream.\n\t */\n\tpublic secondaryUVBufferIndex:number;\n\n\t/**\n\t * The index for the vertex normal attribute stream.\n\t */\n\tpublic normalBufferIndex:number;\n\n\t/**\n\t * The index for the vertex tangent attribute stream.\n\t */\n\tpublic tangentBufferIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the view matrix.\n\t */\n\tpublic viewMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the scene matrix.\n\t */\n\tpublic sceneMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the uniform scene matrix (the inverse transpose).\n\t */\n\tpublic sceneNormalMatrixIndex:number;\n\n\t/**\n\t * The index of the vertex constant containing the camera position.\n\t */\n\tpublic cameraPositionIndex:number;\n\n\t/**\n\t * The index for the UV transformation matrix vertex constant.\n\t */\n\tpublic uvTransformIndex:number;\n\n\t/**\n\t * Creates a new MethodCompilerVO object.\n\t */\n\tconstructor(profile)\n\t{\n\t\tthis.profile = profile;\n\t}\n\n\t/**\n\t * Factory method to create a concrete compiler object for this object\n\t *\n\t * @param materialPassVO\n\t * @returns {away.materials.ShaderCompilerBase}\n\t */\n\tpublic createCompiler(material:StageGLMaterialBase, materialPass:IMaterialPassStageGL):ShaderCompilerBase\n\t{\n\t\treturn new ShaderCompilerBase(material, materialPass, this);\n\t}\n\n\t/**\n\t * Clears dependency counts for all registers. Called when recompiling a pass.\n\t */\n\tpublic reset()\n\t{\n\t\tthis.projectionDependencies = 0;\n\t\tthis.normalDependencies = 0;\n\t\tthis.viewDirDependencies = 0;\n\t\tthis.uvDependencies = 0;\n\t\tthis.secondaryUVDependencies = 0;\n\t\tthis.globalPosDependencies = 0;\n\t\tthis.tangentDependencies = 0;\n\t\tthis.usesGlobalPosFragment = false;\n\t\tthis.usesFragmentAnimation = false;\n\t\tthis.usesTangentSpace = false;\n\t\tthis.outputsNormals = false;\n\t\tthis.outputsTangentNormals = false;\n\t}\n\n\t/**\n\t * Adds any external world space dependencies, used to force world space calculations.\n\t */\n\tpublic addWorldSpaceDependencies(fragmentLights:boolean)\n\t{\n\t\tif (this.viewDirDependencies > 0)\n\t\t\t++this.globalPosDependencies;\n\t}\n\n\tpublic pInitRegisterIndices()\n\t{\n\t\tthis.commonsDataIndex = -1;\n\t\tthis.cameraPositionIndex = -1;\n\t\tthis.uvBufferIndex = -1;\n\t\tthis.uvTransformIndex = -1;\n\t\tthis.secondaryUVBufferIndex = -1;\n\t\tthis.normalBufferIndex = -1;\n\t\tthis.tangentBufferIndex = -1;\n\t\tthis.sceneMatrixIndex = -1;\n\t\tthis.sceneNormalMatrixIndex = -1;\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this shader object.\n\t */\n\tpublic initConstantData(registerCache:ShaderRegisterCache, animatableAttributes:Array, animationTargetRegisters:Array, uvSource:string, uvTarget:string)\n\t{\n\t\t//Updates the amount of used register indices.\n\t\tthis.numUsedVertexConstants = registerCache.numUsedVertexConstants;\n\t\tthis.numUsedFragmentConstants = registerCache.numUsedFragmentConstants;\n\t\tthis.numUsedStreams = registerCache.numUsedStreams;\n\t\tthis.numUsedTextures = registerCache.numUsedTextures;\n\t\tthis.numUsedVaryings = registerCache.numUsedVaryings;\n\t\tthis.numUsedFragmentConstants = registerCache.numUsedFragmentConstants;\n\n\t\tthis.animatableAttributes = animatableAttributes;\n\t\tthis.animationTargetRegisters = animationTargetRegisters;\n\t\tthis.uvSource = uvSource;\n\t\tthis.uvTarget = uvTarget;\n\n\t\tthis.vertexConstantData.length = this.numUsedVertexConstants*4;\n\t\tthis.fragmentConstantData.length = this.numUsedFragmentConstants*4;\n\n\t\t//Initializes commonly required constant values.\n\t\tthis.fragmentConstantData[this.commonsDataIndex] = .5;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 1] = 0;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 2] = 1/255;\n\t\tthis.fragmentConstantData[this.commonsDataIndex + 3] = 1;\n\n\t\t//Initializes the default UV transformation matrix.\n\t\tif (this.uvTransformIndex >= 0) {\n\t\t\tthis.vertexConstantData[this.uvTransformIndex] = 1;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 2] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = 1;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 6] = 0;\n\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = 0;\n\t\t}\n\n\t\tif (this.cameraPositionIndex >= 0)\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 3] = 1;\n\t}\n\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(stage:Stage, camera:Camera)\n\t{\n\t\t( stage.context).setCulling(this.useBothSides? ContextGLTriangleFace.NONE : this._defaultCulling, camera.projection.coordinateSystem);\n\n\t\tif (!this.usesTangentSpace && this.cameraPositionIndex >= 0) {\n\t\t\tvar pos:Vector3D = camera.scenePosition;\n\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex] = pos.x;\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 1] = pos.y;\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 2] = pos.z;\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iDeactivate(stage:Stage)\n\t{\n\n\t}\n\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tif (renderable.materialOwner.animator)\n\t\t\t( renderable.materialOwner.animator).setRenderState(this, renderable, stage, camera, this.numUsedVertexConstants, this.numUsedStreams);\n\n\t\tif (this.uvBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.uvBufferIndex, renderable.getVertexData(TriangleSubGeometry.UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.UV_DATA), TriangleSubGeometry.UV_FORMAT);\n\n\t\tif (this.secondaryUVBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.secondaryUVBufferIndex, renderable.getVertexData(TriangleSubGeometry.SECONDARY_UV_DATA), renderable.getVertexOffset(TriangleSubGeometry.SECONDARY_UV_DATA), TriangleSubGeometry.SECONDARY_UV_FORMAT);\n\n\t\tif (this.normalBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.normalBufferIndex, renderable.getVertexData(TriangleSubGeometry.NORMAL_DATA), renderable.getVertexOffset(TriangleSubGeometry.NORMAL_DATA), TriangleSubGeometry.NORMAL_FORMAT);\n\n\t\tif (this.tangentBufferIndex >= 0)\n\t\t\tcontext.activateBuffer(this.tangentBufferIndex, renderable.getVertexData(TriangleSubGeometry.TANGENT_DATA), renderable.getVertexOffset(TriangleSubGeometry.TANGENT_DATA), TriangleSubGeometry.TANGENT_FORMAT);\n\n\n\t\tif (this.usesUVTransform) {\n\t\t\tvar uvTransform:Matrix = renderable.materialOwner.uvTransform.matrix;\n\n\t\t\tif (uvTransform) {\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex] = uvTransform.a;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = uvTransform.b;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = uvTransform.tx;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = uvTransform.c;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = uvTransform.d;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = uvTransform.ty;\n\t\t\t} else {\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex] = 1;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 1] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 3] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 4] = 0;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 5] = 1;\n\t\t\t\tthis.vertexConstantData[this.uvTransformIndex + 7] = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.sceneNormalMatrixIndex >= 0)\n\t\t\trenderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this.vertexConstantData, this.sceneNormalMatrixIndex, false);\n\n\t\tif (this.usesTangentSpace && this.cameraPositionIndex >= 0) {\n\n\t\t\trenderable.sourceEntity.inverseSceneTransform.copyRawDataTo(this._pInverseSceneMatrix);\n\t\t\tvar pos:Vector3D = camera.scenePosition;\n\t\t\tvar x:number = pos.x;\n\t\t\tvar y:number = pos.y;\n\t\t\tvar z:number = pos.z;\n\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex] = this._pInverseSceneMatrix[0]*x + this._pInverseSceneMatrix[4]*y + this._pInverseSceneMatrix[8]*z + this._pInverseSceneMatrix[12];\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 1] = this._pInverseSceneMatrix[1]*x + this._pInverseSceneMatrix[5]*y + this._pInverseSceneMatrix[9]*z + this._pInverseSceneMatrix[13];\n\t\t\tthis.vertexConstantData[this.cameraPositionIndex + 2] = this._pInverseSceneMatrix[2]*x + this._pInverseSceneMatrix[6]*y + this._pInverseSceneMatrix[10]*z + this._pInverseSceneMatrix[14];\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\t//TODO uncount associated program data\n\t}\n}\n\nexport = ShaderObjectBase;", "import RegisterPool\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/RegisterPool\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\n/**\n * ShaderRegister Cache provides the usage management system for all registers during shading compilation.\n */\nclass ShaderRegisterCache\n{\n\tprivate _fragmentTempCache:RegisterPool;\n\tprivate _vertexTempCache:RegisterPool;\n\tprivate _varyingCache:RegisterPool;\n\tprivate _fragmentConstantsCache:RegisterPool;\n\tprivate _vertexConstantsCache:RegisterPool;\n\tprivate _textureCache:RegisterPool;\n\tprivate _vertexAttributesCache:RegisterPool;\n\tprivate _vertexConstantOffset:number; //TODO: check if this should be initialised to 0\n\tprivate _vertexAttributesOffset:number;//TODO: check if this should be initialised to 0\n\tprivate _varyingsOffset:number;//TODO: check if this should be initialised to 0\n\tprivate _fragmentConstantOffset:number;//TODO: check if this should be initialised to 0\n\n\tprivate _fragmentOutputRegister:ShaderRegisterElement;\n\tprivate _vertexOutputRegister:ShaderRegisterElement;\n\tprivate _numUsedVertexConstants:number = 0;\n\tprivate _numUsedFragmentConstants:number = 0;\n\tprivate _numUsedStreams:number = 0;\n\tprivate _numUsedTextures:number = 0;\n\tprivate _numUsedVaryings:number = 0;\n\tprivate _profile:string;\n\n\t/**\n\t * Create a new ShaderRegisterCache object.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tconstructor(profile:string)\n\t{\n\t\tthis._profile = profile;\n\t}\n\n\t/**\n\t * Resets all registers.\n\t */\n\tpublic reset()\n\t{\n\t\tthis._fragmentTempCache = new RegisterPool(\"ft\", 8, false);\n\t\tthis._vertexTempCache = new RegisterPool(\"vt\", 8, false);\n\t\tthis._varyingCache = new RegisterPool(\"v\", 8);\n\t\tthis._textureCache = new RegisterPool(\"fs\", 8);\n\t\tthis._vertexAttributesCache = new RegisterPool(\"va\", 8);\n\t\tthis._fragmentConstantsCache = new RegisterPool(\"fc\", 28);\n\t\tthis._vertexConstantsCache = new RegisterPool(\"vc\", 128);\n\t\tthis._fragmentOutputRegister = new ShaderRegisterElement(\"oc\", -1);\n\t\tthis._vertexOutputRegister = new ShaderRegisterElement(\"op\", -1);\n\t\tthis._numUsedVertexConstants = 0;\n\t\tthis._numUsedStreams = 0;\n\t\tthis._numUsedTextures = 0;\n\t\tthis._numUsedVaryings = 0;\n\t\tthis._numUsedFragmentConstants = 0;\n\n\t\tvar i:number;\n\n\t\tfor (i = 0; i < this._vertexAttributesOffset; ++i)\n\t\t\tthis.getFreeVertexAttribute();\n\n\t\tfor (i = 0; i < this._vertexConstantOffset; ++i)\n\t\t\tthis.getFreeVertexConstant();\n\n\t\tfor (i = 0; i < this._varyingsOffset; ++i)\n\t\t\tthis.getFreeVarying();\n\n\t\tfor (i = 0; i < this._fragmentConstantOffset; ++i)\n\t\t\tthis.getFreeFragmentConstant();\n\t}\n\n\t/**\n\t * Disposes all resources used.\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._fragmentTempCache.dispose();\n\t\tthis._vertexTempCache.dispose();\n\t\tthis._varyingCache.dispose();\n\t\tthis._fragmentConstantsCache.dispose();\n\t\tthis._vertexAttributesCache.dispose();\n\n\t\tthis._fragmentTempCache = null;\n\t\tthis._vertexTempCache = null;\n\t\tthis._varyingCache = null;\n\t\tthis._fragmentConstantsCache = null;\n\t\tthis._vertexAttributesCache = null;\n\t\tthis._fragmentOutputRegister = null;\n\t\tthis._vertexOutputRegister = null;\n\t}\n\n\t/**\n\t * Marks a fragment temporary register as used, so it cannot be retrieved. The register won't be able to be used until removeUsage\n\t * has been called usageCount times again.\n\t * @param register The register to mark as used.\n\t * @param usageCount The amount of usages to add.\n\t */\n\tpublic addFragmentTempUsages(register:ShaderRegisterElement, usageCount:number)\n\t{\n\t\tthis._fragmentTempCache.addUsage(register, usageCount);\n\t}\n\n\t/**\n\t * Removes a usage from a fragment temporary register. When usages reach 0, the register is freed again.\n\t * @param register The register for which to remove a usage.\n\t */\n\tpublic removeFragmentTempUsage(register:ShaderRegisterElement)\n\t{\n\t\tthis._fragmentTempCache.removeUsage(register);\n\t}\n\n\t/**\n\t * Marks a vertex temporary register as used, so it cannot be retrieved. The register won't be able to be used\n\t * until removeUsage has been called usageCount times again.\n\t * @param register The register to mark as used.\n\t * @param usageCount The amount of usages to add.\n\t */\n\tpublic addVertexTempUsages(register:ShaderRegisterElement, usageCount:number)\n\t{\n\t\tthis._vertexTempCache.addUsage(register, usageCount);\n\t}\n\n\t/**\n\t * Removes a usage from a vertex temporary register. When usages reach 0, the register is freed again.\n\t * @param register The register for which to remove a usage.\n\t */\n\tpublic removeVertexTempUsage(register:ShaderRegisterElement)\n\t{\n\t\tthis._vertexTempCache.removeUsage(register);\n\t}\n\n\t/**\n\t * Retrieve an entire fragment temporary register that's still available. The register won't be able to be used until removeUsage\n\t * has been called usageCount times again.\n\t */\n\tpublic getFreeFragmentVectorTemp():ShaderRegisterElement\n\t{\n\t\treturn this._fragmentTempCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve a single component from a fragment temporary register that's still available.\n\t */\n\tpublic getFreeFragmentSingleTemp():ShaderRegisterElement\n\t{\n\t\treturn this._fragmentTempCache.requestFreeRegComponent();\n\t}\n\n\t/**\n\t * Retrieve an available varying register\n\t */\n\tpublic getFreeVarying():ShaderRegisterElement\n\t{\n\t\t++this._numUsedVaryings;\n\t\treturn this._varyingCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve an available fragment constant register\n\t */\n\tpublic getFreeFragmentConstant():ShaderRegisterElement\n\t{\n\t\t++this._numUsedFragmentConstants;\n\t\treturn this._fragmentConstantsCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve an available vertex constant register\n\t */\n\tpublic getFreeVertexConstant():ShaderRegisterElement\n\t{\n\t\t++this._numUsedVertexConstants;\n\t\treturn this._vertexConstantsCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve an entire vertex temporary register that's still available.\n\t */\n\tpublic getFreeVertexVectorTemp():ShaderRegisterElement\n\t{\n\t\treturn this._vertexTempCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve a single component from a vertex temporary register that's still available.\n\t */\n\tpublic getFreeVertexSingleTemp():ShaderRegisterElement\n\t{\n\t\treturn this._vertexTempCache.requestFreeRegComponent();\n\t}\n\n\t/**\n\t * Retrieve an available vertex attribute register\n\t */\n\tpublic getFreeVertexAttribute():ShaderRegisterElement\n\t{\n\t\t++this._numUsedStreams;\n\t\treturn this._vertexAttributesCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Retrieve an available texture register\n\t */\n\tpublic getFreeTextureReg():ShaderRegisterElement\n\t{\n\t\t++this._numUsedTextures;\n\t\treturn this._textureCache.requestFreeVectorReg();\n\t}\n\n\t/**\n\t * Indicates the start index from which to retrieve vertex constants.\n\t */\n\tpublic get vertexConstantOffset():number\n\t{\n\t\treturn this._vertexConstantOffset;\n\t}\n\n\tpublic set vertexConstantOffset(vertexConstantOffset:number)\n\t{\n\t\tthis._vertexConstantOffset = vertexConstantOffset;\n\t}\n\n\t/**\n\t * Indicates the start index from which to retrieve vertex attributes.\n\t */\n\tpublic get vertexAttributesOffset():number\n\t{\n\t\treturn this._vertexAttributesOffset;\n\t}\n\n\tpublic set vertexAttributesOffset(value:number)\n\t{\n\t\tthis._vertexAttributesOffset = value;\n\t}\n\n\t/**\n\t * Indicates the start index from which to retrieve varying registers.\n\t */\n\tpublic get varyingsOffset():number\n\t{\n\t\treturn this._varyingsOffset;\n\t}\n\n\tpublic set varyingsOffset(value:number)\n\t{\n\t\tthis._varyingsOffset = value;\n\t}\n\n\t/**\n\t * Indicates the start index from which to retrieve fragment constants.\n\t */\n\tpublic get fragmentConstantOffset():number\n\t{\n\t\treturn this._fragmentConstantOffset;\n\t}\n\n\tpublic set fragmentConstantOffset(value:number)\n\t{\n\t\tthis._fragmentConstantOffset = value;\n\t}\n\n\t/**\n\t * The fragment output register.\n\t */\n\tpublic get fragmentOutputRegister():ShaderRegisterElement\n\t{\n\t\treturn this._fragmentOutputRegister;\n\t}\n\n\t/**\n\t * The amount of used vertex constant registers.\n\t */\n\tpublic get numUsedVertexConstants():number\n\t{\n\t\treturn this._numUsedVertexConstants;\n\t}\n\n\t/**\n\t * The amount of used fragment constant registers.\n\t */\n\tpublic get numUsedFragmentConstants():number\n\t{\n\t\treturn this._numUsedFragmentConstants;\n\t}\n\n\t/**\n\t * The amount of used vertex streams.\n\t */\n\tpublic get numUsedStreams():number\n\t{\n\t\treturn this._numUsedStreams;\n\t}\n\n\t/**\n\t * The amount of used texture slots.\n\t */\n\tpublic get numUsedTextures():number\n\t{\n\t\treturn this._numUsedTextures;\n\t}\n\n\t/**\n\t * The amount of used varying registers.\n\t */\n\tpublic get numUsedVaryings():number\n\t{\n\t\treturn this._numUsedVaryings;\n\t}\n}\n\nexport = ShaderRegisterCache;", "import ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\n/**\n * ShaderRegisterData contains the \"named\" registers, generated by the compiler and to be passed on to the methods.\n */\nclass ShaderRegisterData\n{\n\tpublic normalVarying:ShaderRegisterElement;\n\tpublic tangentVarying:ShaderRegisterElement;\n\tpublic bitangentVarying:ShaderRegisterElement;\n\tpublic uvVarying:ShaderRegisterElement;\n\tpublic secondaryUVVarying:ShaderRegisterElement;\n\tpublic viewDirVarying:ShaderRegisterElement;\n\tpublic shadowTarget:ShaderRegisterElement;\n\tpublic shadedTarget:ShaderRegisterElement;\n\tpublic globalPositionVertex:ShaderRegisterElement;\n\tpublic globalPositionVarying:ShaderRegisterElement;\n\tpublic localPosition:ShaderRegisterElement;\n\tpublic normalInput:ShaderRegisterElement;\n\tpublic tangentInput:ShaderRegisterElement;\n\tpublic animatedNormal:ShaderRegisterElement;\n\tpublic animatedTangent:ShaderRegisterElement;\n\tpublic commons:ShaderRegisterElement;\n\tpublic projectionFragment:ShaderRegisterElement;\n\tpublic normalFragment:ShaderRegisterElement;\n\tpublic viewDirFragment:ShaderRegisterElement;\n\tpublic bitangent:ShaderRegisterElement;\n\n\tconstructor()\n\t{\n\n\t}\n}\n\nexport = ShaderRegisterData;", "/**\n * A single register element (an entire register or a single register's component) used by the RegisterPool.\n */\nclass ShaderRegisterElement\n{\n\tprivate _regName:string;\n\tprivate _index:number;\n\tprivate _toStr:string;\n\n\tprivate static COMPONENTS = [\"x\", \"y\", \"z\", \"w\"];\n\n\tpublic _component:number;\n\n\t/**\n\t * Creates a new ShaderRegisterElement object.\n\t *\n\t * @param regName The name of the register.\n\t * @param index The index of the register.\n\t * @param component The register's component, if not the entire register is represented.\n\t */\n\tconstructor(regName:string, index:number, component:number = -1)\n\t{\n\t\tthis._component = component;\n\t\tthis._regName = regName;\n\t\tthis._index = index;\n\n\t\tthis._toStr = this._regName;\n\n\t\tif (this._index >= 0)\n\t\t\tthis._toStr += this._index;\n\n\t\tif (component > -1)\n\t\t\tthis._toStr += \".\" + ShaderRegisterElement.COMPONENTS[component];\n\t}\n\n\t/**\n\t * Converts the register or the components AGAL string representation.\n\t */\n\tpublic toString():string\n\t{\n\t\treturn this._toStr;\n\t}\n\n\t/**\n\t * The register's name.\n\t */\n\tpublic get regName():string\n\t{\n\t\treturn this._regName;\n\t}\n\n\t/**\n\t * The register's index.\n\t */\n\tpublic get index():number\n\t{\n\t\treturn this._index;\n\t}\n}\n\nexport = ShaderRegisterElement;", - "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * AmbientBasicMethod provides the default shading method for uniform ambient lighting.\n */\nclass AmbientBasicMethod extends ShadingMethodBase\n{\n\tprivate _color:number = 0xffffff;\n\tprivate _alpha:number = 1;\n\n\tprivate _colorR:number = 1;\n\tprivate _colorG:number = 1;\n\tprivate _colorB:number = 1;\n\n\tprivate _ambient:number = 1;\n\n\t/**\n\t * Creates a new AmbientBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = Boolean(shaderObject.texture != null);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tif (!methodVO.needsUV) {\n\t\t\tthis._color = shaderObject.color;\n\t\t\tthis.updateColor();\n\t\t}\n\t}\n\n\t/**\n\t * The strength of the ambient reflection of the surface.\n\t */\n\tpublic get ambient():number\n\t{\n\t\treturn this._ambient;\n\t}\n\n\tpublic set ambient(value:number)\n\t{\n\t\tif (this._ambient == value)\n\t\t\treturn;\n\n\t\tthis._ambient = value;\n\n\t\tthis.updateColor();\n\t}\n\n\t/**\n\t * The alpha component of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tthis.updateColor();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar m:any = method;\n\t\tvar b:AmbientBasicMethod = m;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar ambientInputRegister:ShaderRegisterElement;\n\n\t\tif (methodVO.needsUV) {\n\t\t\tambientInputRegister = registerCache.getFreeTextureReg();\n\n\t\t\tmethodVO.texturesIndex = ambientInputRegister.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, ambientInputRegister, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\t\t\tmethodVO.fragmentConstantsIndex = cutOffReg.index*4;\n\n\t\t\t\tcode += \"sub \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\t\"kil \" + targetReg + \".w\\n\" +\n\t\t\t\t\t\"add \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\";\n\t\t\t}\n\n\t\t} else {\n\t\t\tambientInputRegister = registerCache.getFreeFragmentConstant();\n\t\t\tmethodVO.fragmentConstantsIndex = ambientInputRegister.index*4;\n\n\t\t\tcode += \"mov \" + targetReg + \", \" + ambientInputRegister + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (methodVO.needsUV) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR:ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR:ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, shaderObject.texture);\n\n\t\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\t\tshaderObject.fragmentConstantData[methodVO.fragmentConstantsIndex] = shaderObject.alphaThreshold;\n\t\t} else {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = this._colorR;\n\t\t\tdata[index + 1] = this._colorG;\n\t\t\tdata[index + 2] = this._colorB;\n\t\t\tdata[index + 3] = this._alpha;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the ambient color data used by the render state.\n\t */\n\tprivate updateColor()\n\t{\n\t\tthis._colorR = ((this._color >> 16) & 0xff)/0xff*this._ambient;\n\t\tthis._colorG = ((this._color >> 8) & 0xff)/0xff*this._ambient;\n\t\tthis._colorB = (this._color & 0xff)/0xff*this._ambient;\n\t}\n}\n\nexport = AmbientBasicMethod;", - "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DiffuseBasicMethod provides the default shading method for Lambert (dot3) diffuse lighting.\n */\nclass DiffuseBasicMethod extends LightingMethodBase\n{\n\tprivate _multiply:boolean = true;\n\n\tpublic _pUseTexture:boolean;\n\tpublic _pTotalLightColorReg:ShaderRegisterElement;\n\tpublic _pDiffuseInputRegister:ShaderRegisterElement;\n\n\tprivate _texture:Texture2DBase;\n\tprivate _diffuseColor:number = 0xffffff;\n\tprivate _ambientColor:number = 0xffffff;\n\tprivate _diffuseR:number = 1;\n\tprivate _diffuseG:number = 1;\n\tprivate _diffuseB:number = 1;\n\tprivate _ambientR:number = 1;\n\tprivate _ambientG:number = 1;\n\tprivate _ambientB:number = 1;\n\n\tpublic _pIsFirstLight:boolean;\n\n\t/**\n\t * Creates a new DiffuseBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (!shaderObject.numLights)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Set internally if diffuse color component multiplies or replaces the ambient color\n\t */\n\tpublic get multiply():boolean\n\t{\n\t\treturn this._multiply;\n\t}\n\n\tpublic set multiply(value:boolean)\n\t{\n\t\tif (this._multiply == value)\n\t\t\treturn;\n\n\t\tthis._multiply = value;\n\n\t\tthis.iInvalidateShaderProgram();\n\t}\n\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._pUseTexture;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * Forces the creation of the texture.\n\t * @param stage The Stage used by the renderer\n\t */\n\tpublic generateMip(stage:Stage)\n\t{\n\t\tif (this._pUseTexture)\n\t\t\t( stage.context).activateTexture(0, this._texture);\n\t}\n\n\t/**\n\t * The color of the diffuse reflection when not using a texture.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseColor;\n\t}\n\n\tpublic set diffuseColor(value:number)\n\t{\n\t\tif (this._diffuseColor == value)\n\t\t\treturn;\n\n\t\tthis._diffuseColor = value;\n\n\t\tthis.updateDiffuse();\n\t}\n\n\t/**\n\t * The color of the ambient reflection\n\t */\n\tpublic get ambientColor():number\n\t{\n\t\treturn this._ambientColor;\n\t}\n\n\tpublic set ambientColor(value:number)\n\t{\n\t\tif (this._ambientColor == value)\n\t\t\treturn;\n\n\t\tthis._ambientColor = value;\n\n\t\tthis.updateAmbient();\n\t}\n\n\n\t/**\n\t * The bitmapData to use to define the diffuse reflection color per texel.\n\t */\n\tpublic get texture():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set texture(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = (value != null);\n\n\t\tif (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._pUseTexture = b;\n\t\tthis._texture = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._texture = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar diff:DiffuseBasicMethod = method;\n\n\t\tthis.texture = diff.texture;\n\t\tthis.multiply = diff.multiply;\n\t\tthis.diffuseColor = diff.diffuseColor;\n\t\tthis.ambientColor = diff.ambientColor;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\n\t\tthis._pTotalLightColorReg = null;\n\t\tthis._pDiffuseInputRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPreLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tthis._pIsFirstLight = true;\n\n\t\tthis._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(this._pTotalLightColorReg, 1);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerLight(shaderObject:ShaderLightingObject, methodVO:MethodVO, lightDirReg:ShaderRegisterElement, lightColReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tcode += \"dp3 \" + t + \".x, \" + lightDirReg + \", \" + sharedRegisters.normalFragment + \"\\n\" +\n\t\t\t\t\"max \" + t + \".w, \" + t + \".x, \" + sharedRegisters.commons + \".y\\n\";\n\n\t\tif (shaderObject.usesLightFallOff)\n\t\t\tcode += \"mul \" + t + \".w, \" + t + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tcode += \"mul \" + t + \", \" + t + \".w, \" + lightColReg + \"\\n\";\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerProbe(shaderObject:ShaderLightingObject, methodVO:MethodVO, cubeMapReg:ShaderRegisterElement, weightRegister:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tcode += \"tex \" + t + \", \" + sharedRegisters.normalFragment + \", \" + cubeMapReg + \" \\n\" +\n\t\t\t\t\"mul \" + t + \".xyz, \" + t + \".xyz, \" + weightRegister + \"\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPostLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tvar albedo:ShaderRegisterElement;\n\t\tvar cutOffReg:ShaderRegisterElement;\n\n\t\t// incorporate input from ambient\n\t\tif (sharedRegisters.shadowTarget)\n\t\t\tcode += this.pApplyShadow(shaderObject, methodVO, registerCache, sharedRegisters);\n\n\t\talbedo = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(albedo, 1);\n\n\t\tvar ambientColorRegister:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tmethodVO.fragmentConstantsIndex = ambientColorRegister.index*4;\n\n\t\tif (this._pUseTexture) {\n\t\t\tthis._pDiffuseInputRegister = registerCache.getFreeTextureReg();\n\n\t\t\tmethodVO.texturesIndex = this._pDiffuseInputRegister.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, this._pDiffuseInputRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t} else {\n\t\t\tthis._pDiffuseInputRegister = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"mov \" + albedo + \", \" + this._pDiffuseInputRegister + \"\\n\";\n\t\t}\n\n\t\tcode += \"sat \" + this._pTotalLightColorReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\"mul \" + albedo + \".xyz, \" + albedo + \", \" + this._pTotalLightColorReg + \"\\n\";\n\n\t\tif (this._multiply) {\n\t\t\tcode += \"add \" + albedo + \".xyz, \" + albedo + \", \" + ambientColorRegister + \"\\n\" +\n\t\t\t\t\"mul \" + targetReg + \".xyz, \" + targetReg + \", \" + albedo + \"\\n\";\n\t\t} else {\n\t\t\tcode += \"mul \" + targetReg + \".xyz, \" + targetReg + \", \" + ambientColorRegister + \"\\n\" +\n\t\t\t\t\"mul \" + this._pTotalLightColorReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\t\"sub \" + targetReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\t\"add \" + targetReg + \".xyz, \" + targetReg + \", \" + albedo + \"\\n\";\n\t\t}\n\n\t\tregisterCache.removeFragmentTempUsage(this._pTotalLightColorReg);\n\t\tregisterCache.removeFragmentTempUsage(albedo);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Generate the code that applies the calculated shadow to the diffuse light\n\t * @param methodVO The MethodVO object for which the compilation is currently happening.\n\t * @param regCache The register cache the compiler is currently using for the register management.\n\t */\n\tpublic pApplyShadow(shaderObject:ShaderLightingObject, methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + sharedRegisters.shadowTarget + \".w\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderLightingObject, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (this._pUseTexture) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t} else {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index + 4] = this._diffuseR;\n\t\t\tdata[index + 5] = this._diffuseG;\n\t\t\tdata[index + 6] = this._diffuseB;\n\t\t\tdata[index + 7] = 1;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the diffuse color data used by the render state.\n\t */\n\tprivate updateDiffuse()\n\t{\n\t\tthis._diffuseR = ((this._diffuseColor >> 16) & 0xff)/0xff;\n\t\tthis._diffuseG = ((this._diffuseColor >> 8) & 0xff)/0xff;\n\t\tthis._diffuseB = (this._diffuseColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * Updates the ambient color data used by the render state.\n\t */\n\tprivate updateAmbient()\n\t{\n\t\tthis._ambientR = ((this._ambientColor >> 16) & 0xff)/0xff;\n\t\tthis._ambientG = ((this._ambientColor >> 8) & 0xff)/0xff;\n\t\tthis._ambientB = (this._ambientColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderLightingObject, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\t\t//TODO move this to Activate (ambientR/G/B currently calc'd in render state)\n\t\tif (shaderObject.numLights > 0) {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = shaderObject.ambientR*this._ambientR;\n\t\t\tdata[index + 1] = shaderObject.ambientG*this._ambientG;\n\t\t\tdata[index + 2] = shaderObject.ambientB*this._ambientB;\n\t\t\tdata[index + 3] = 1;\n\t\t}\n\t}\n}\n\nexport = DiffuseBasicMethod;", - "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\n\n/**\n * EffectColorTransformMethod provides a shading method that changes the colour of a material analogous to a\n * ColorTransform object.\n */\nclass EffectColorTransformMethod extends EffectMethodBase\n{\n\tprivate _colorTransform:ColorTransform;\n\n\t/**\n\t * Creates a new EffectColorTransformMethod.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this._colorTransform;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tthis._colorTransform = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar colorMultReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar colorOffsReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\tmethodVO.fragmentConstantsIndex = colorMultReg.index*4;\n\n\t\t//TODO: AGAL <> GLSL\n\n\t\tcode += \"mul \" + targetReg + \", \" + targetReg + \", \" + colorMultReg + \"\\n\" + \"add \" + targetReg + \", \" + targetReg + \", \" + colorOffsReg + \"\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tvar inv:number = 1/0xff;\n\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\n\t\tdata[index] = this._colorTransform.redMultiplier;\n\t\tdata[index + 1] = this._colorTransform.greenMultiplier;\n\t\tdata[index + 2] = this._colorTransform.blueMultiplier;\n\t\tdata[index + 3] = this._colorTransform.alphaMultiplier;\n\t\tdata[index + 4] = this._colorTransform.redOffset*inv;\n\t\tdata[index + 5] = this._colorTransform.greenOffset*inv;\n\t\tdata[index + 6] = this._colorTransform.blueOffset*inv;\n\t\tdata[index + 7] = this._colorTransform.alphaOffset*inv;\n\n\t}\n}\n\nexport = EffectColorTransformMethod;", + "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * AmbientBasicMethod provides the default shading method for uniform ambient lighting.\n */\nclass AmbientBasicMethod extends ShadingMethodBase\n{\n\tprivate _color:number = 0xffffff;\n\tprivate _alpha:number = 1;\n\n\tprivate _colorR:number = 1;\n\tprivate _colorG:number = 1;\n\tprivate _colorB:number = 1;\n\n\tprivate _ambient:number = 1;\n\n\t/**\n\t * Creates a new AmbientBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = Boolean(shaderObject.texture != null);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tif (!methodVO.needsUV) {\n\t\t\tthis._color = shaderObject.color;\n\t\t\tthis.updateColor();\n\t\t}\n\t}\n\n\t/**\n\t * The strength of the ambient reflection of the surface.\n\t */\n\tpublic get ambient():number\n\t{\n\t\treturn this._ambient;\n\t}\n\n\tpublic set ambient(value:number)\n\t{\n\t\tif (this._ambient == value)\n\t\t\treturn;\n\n\t\tthis._ambient = value;\n\n\t\tthis.updateColor();\n\t}\n\n\t/**\n\t * The alpha component of the surface.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._alpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tif (this._alpha == value)\n\t\t\treturn;\n\n\t\tthis._alpha = value;\n\n\t\tthis.updateColor();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar m:any = method;\n\t\tvar b:AmbientBasicMethod = m;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar ambientInputRegister:ShaderRegisterElement;\n\n\t\tif (methodVO.needsUV) {\n\t\t\tambientInputRegister = registerCache.getFreeTextureReg();\n\n\t\t\tmethodVO.texturesIndex = ambientInputRegister.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, ambientInputRegister, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\t\t\tmethodVO.fragmentConstantsIndex = cutOffReg.index*4;\n\n\t\t\t\tcode += \"sub \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\t\"kil \" + targetReg + \".w\\n\" +\n\t\t\t\t\t\"add \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\";\n\t\t\t}\n\n\t\t} else {\n\t\t\tambientInputRegister = registerCache.getFreeFragmentConstant();\n\t\t\tmethodVO.fragmentConstantsIndex = ambientInputRegister.index*4;\n\n\t\t\tcode += \"mov \" + targetReg + \", \" + ambientInputRegister + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (methodVO.needsUV) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR:ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR:ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, shaderObject.texture);\n\n\t\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\t\tshaderObject.fragmentConstantData[methodVO.fragmentConstantsIndex] = shaderObject.alphaThreshold;\n\t\t} else {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = this._colorR;\n\t\t\tdata[index + 1] = this._colorG;\n\t\t\tdata[index + 2] = this._colorB;\n\t\t\tdata[index + 3] = this._alpha;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the ambient color data used by the render state.\n\t */\n\tprivate updateColor()\n\t{\n\t\tthis._colorR = ((this._color >> 16) & 0xff)/0xff*this._ambient;\n\t\tthis._colorG = ((this._color >> 8) & 0xff)/0xff*this._ambient;\n\t\tthis._colorB = (this._color & 0xff)/0xff*this._ambient;\n\t}\n}\n\nexport = AmbientBasicMethod;", + "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DiffuseBasicMethod provides the default shading method for Lambert (dot3) diffuse lighting.\n */\nclass DiffuseBasicMethod extends LightingMethodBase\n{\n\tprivate _multiply:boolean = true;\n\n\tpublic _pUseTexture:boolean;\n\tpublic _pTotalLightColorReg:ShaderRegisterElement;\n\tpublic _pDiffuseInputRegister:ShaderRegisterElement;\n\n\tprivate _texture:Texture2DBase;\n\tprivate _diffuseColor:number = 0xffffff;\n\tprivate _ambientColor:number = 0xffffff;\n\tprivate _diffuseR:number = 1;\n\tprivate _diffuseG:number = 1;\n\tprivate _diffuseB:number = 1;\n\tprivate _ambientR:number = 1;\n\tprivate _ambientG:number = 1;\n\tprivate _ambientB:number = 1;\n\n\tpublic _pIsFirstLight:boolean;\n\n\t/**\n\t * Creates a new DiffuseBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (!shaderObject.numLights)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Set internally if diffuse color component multiplies or replaces the ambient color\n\t */\n\tpublic get multiply():boolean\n\t{\n\t\treturn this._multiply;\n\t}\n\n\tpublic set multiply(value:boolean)\n\t{\n\t\tif (this._multiply == value)\n\t\t\treturn;\n\n\t\tthis._multiply = value;\n\n\t\tthis.iInvalidateShaderProgram();\n\t}\n\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._pUseTexture;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * Forces the creation of the texture.\n\t * @param stage The Stage used by the renderer\n\t */\n\tpublic generateMip(stage:Stage)\n\t{\n\t\tif (this._pUseTexture)\n\t\t\t( stage.context).activateTexture(0, this._texture);\n\t}\n\n\t/**\n\t * The color of the diffuse reflection when not using a texture.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseColor;\n\t}\n\n\tpublic set diffuseColor(value:number)\n\t{\n\t\tif (this._diffuseColor == value)\n\t\t\treturn;\n\n\t\tthis._diffuseColor = value;\n\n\t\tthis.updateDiffuse();\n\t}\n\n\t/**\n\t * The color of the ambient reflection\n\t */\n\tpublic get ambientColor():number\n\t{\n\t\treturn this._ambientColor;\n\t}\n\n\tpublic set ambientColor(value:number)\n\t{\n\t\tif (this._ambientColor == value)\n\t\t\treturn;\n\n\t\tthis._ambientColor = value;\n\n\t\tthis.updateAmbient();\n\t}\n\n\n\t/**\n\t * The bitmapData to use to define the diffuse reflection color per texel.\n\t */\n\tpublic get texture():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set texture(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = (value != null);\n\n\t\tif (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._pUseTexture = b;\n\t\tthis._texture = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._texture = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar diff:DiffuseBasicMethod = method;\n\n\t\tthis.texture = diff.texture;\n\t\tthis.multiply = diff.multiply;\n\t\tthis.diffuseColor = diff.diffuseColor;\n\t\tthis.ambientColor = diff.ambientColor;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\n\t\tthis._pTotalLightColorReg = null;\n\t\tthis._pDiffuseInputRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPreLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tthis._pIsFirstLight = true;\n\n\t\tthis._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(this._pTotalLightColorReg, 1);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerLight(shaderObject:ShaderLightingObject, methodVO:MethodVO, lightDirReg:ShaderRegisterElement, lightColReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tcode += \"dp3 \" + t + \".x, \" + lightDirReg + \", \" + sharedRegisters.normalFragment + \"\\n\" +\n\t\t\t\t\"max \" + t + \".w, \" + t + \".x, \" + sharedRegisters.commons + \".y\\n\";\n\n\t\tif (shaderObject.usesLightFallOff)\n\t\t\tcode += \"mul \" + t + \".w, \" + t + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tcode += \"mul \" + t + \", \" + t + \".w, \" + lightColReg + \"\\n\";\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerProbe(shaderObject:ShaderLightingObject, methodVO:MethodVO, cubeMapReg:ShaderRegisterElement, weightRegister:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tcode += \"tex \" + t + \", \" + sharedRegisters.normalFragment + \", \" + cubeMapReg + \" \\n\" +\n\t\t\t\t\"mul \" + t + \".xyz, \" + t + \".xyz, \" + weightRegister + \"\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPostLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tvar albedo:ShaderRegisterElement;\n\t\tvar cutOffReg:ShaderRegisterElement;\n\n\t\t// incorporate input from ambient\n\t\tif (sharedRegisters.shadowTarget)\n\t\t\tcode += this.pApplyShadow(shaderObject, methodVO, registerCache, sharedRegisters);\n\n\t\talbedo = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(albedo, 1);\n\n\t\tvar ambientColorRegister:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tmethodVO.fragmentConstantsIndex = ambientColorRegister.index*4;\n\n\t\tif (this._pUseTexture) {\n\t\t\tthis._pDiffuseInputRegister = registerCache.getFreeTextureReg();\n\n\t\t\tmethodVO.texturesIndex = this._pDiffuseInputRegister.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, this._pDiffuseInputRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t} else {\n\t\t\tthis._pDiffuseInputRegister = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"mov \" + albedo + \", \" + this._pDiffuseInputRegister + \"\\n\";\n\t\t}\n\n\t\tcode += \"sat \" + this._pTotalLightColorReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\"mul \" + albedo + \".xyz, \" + albedo + \", \" + this._pTotalLightColorReg + \"\\n\";\n\n\t\tif (this._multiply) {\n\t\t\tcode += \"add \" + albedo + \".xyz, \" + albedo + \", \" + ambientColorRegister + \"\\n\" +\n\t\t\t\t\"mul \" + targetReg + \".xyz, \" + targetReg + \", \" + albedo + \"\\n\";\n\t\t} else {\n\t\t\tcode += \"mul \" + targetReg + \".xyz, \" + targetReg + \", \" + ambientColorRegister + \"\\n\" +\n\t\t\t\t\"mul \" + this._pTotalLightColorReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\t\"sub \" + targetReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\" +\n\t\t\t\t\"add \" + targetReg + \".xyz, \" + targetReg + \", \" + albedo + \"\\n\";\n\t\t}\n\n\t\tregisterCache.removeFragmentTempUsage(this._pTotalLightColorReg);\n\t\tregisterCache.removeFragmentTempUsage(albedo);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Generate the code that applies the calculated shadow to the diffuse light\n\t * @param methodVO The MethodVO object for which the compilation is currently happening.\n\t * @param regCache The register cache the compiler is currently using for the register management.\n\t */\n\tpublic pApplyShadow(shaderObject:ShaderLightingObject, methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + sharedRegisters.shadowTarget + \".w\\n\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderLightingObject, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (this._pUseTexture) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t} else {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index + 4] = this._diffuseR;\n\t\t\tdata[index + 5] = this._diffuseG;\n\t\t\tdata[index + 6] = this._diffuseB;\n\t\t\tdata[index + 7] = 1;\n\t\t}\n\t}\n\n\t/**\n\t * Updates the diffuse color data used by the render state.\n\t */\n\tprivate updateDiffuse()\n\t{\n\t\tthis._diffuseR = ((this._diffuseColor >> 16) & 0xff)/0xff;\n\t\tthis._diffuseG = ((this._diffuseColor >> 8) & 0xff)/0xff;\n\t\tthis._diffuseB = (this._diffuseColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * Updates the ambient color data used by the render state.\n\t */\n\tprivate updateAmbient()\n\t{\n\t\tthis._ambientR = ((this._ambientColor >> 16) & 0xff)/0xff;\n\t\tthis._ambientG = ((this._ambientColor >> 8) & 0xff)/0xff;\n\t\tthis._ambientB = (this._ambientColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderLightingObject, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\t\t//TODO move this to Activate (ambientR/G/B currently calc'd in render state)\n\t\tif (shaderObject.numLights > 0) {\n\t\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = shaderObject.ambientR*this._ambientR;\n\t\t\tdata[index + 1] = shaderObject.ambientG*this._ambientG;\n\t\t\tdata[index + 2] = shaderObject.ambientB*this._ambientB;\n\t\t\tdata[index + 3] = 1;\n\t\t}\n\t}\n}\n\nexport = DiffuseBasicMethod;", + "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\n\n/**\n * EffectColorTransformMethod provides a shading method that changes the colour of a material analogous to a\n * ColorTransform object.\n */\nclass EffectColorTransformMethod extends EffectMethodBase\n{\n\tprivate _colorTransform:ColorTransform;\n\n\t/**\n\t * Creates a new EffectColorTransformMethod.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this._colorTransform;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tthis._colorTransform = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar colorMultReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar colorOffsReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\tmethodVO.fragmentConstantsIndex = colorMultReg.index*4;\n\n\t\t//TODO: AGAL <> GLSL\n\n\t\tcode += \"mul \" + targetReg + \", \" + targetReg + \", \" + colorMultReg + \"\\n\" + \"add \" + targetReg + \", \" + targetReg + \", \" + colorOffsReg + \"\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tvar inv:number = 1/0xff;\n\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\n\t\tdata[index] = this._colorTransform.redMultiplier;\n\t\tdata[index + 1] = this._colorTransform.greenMultiplier;\n\t\tdata[index + 2] = this._colorTransform.blueMultiplier;\n\t\tdata[index + 3] = this._colorTransform.alphaMultiplier;\n\t\tdata[index + 4] = this._colorTransform.redOffset*inv;\n\t\tdata[index + 5] = this._colorTransform.greenOffset*inv;\n\t\tdata[index + 6] = this._colorTransform.blueOffset*inv;\n\t\tdata[index + 7] = this._colorTransform.alphaOffset*inv;\n\n\t}\n}\n\nexport = EffectColorTransformMethod;", "import AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport IAsset\t\t\t\t\t\t= require(\"awayjs-core/lib/library/IAsset\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\n\n/**\n * EffectMethodBase forms an abstract base class for shader methods that are not dependent on light sources,\n * and are in essence post-process effects on the materials.\n */\nclass EffectMethodBase extends ShadingMethodBase implements IAsset\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.EFFECTS_METHOD;\n\t}\n\n\t/**\n\t * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register.\n\t * @param methodVO The MethodVO object containing the method data for the currently compiled material pass.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register that will be containing the method's output.\n\t * @private\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t\treturn \"\";\n\t}\n}\n\nexport = EffectMethodBase;", "import MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\n\n/**\n * LightingMethodBase provides an abstract base method for shading methods that uses lights.\n * Used for diffuse and specular shaders only.\n */\nclass LightingMethodBase extends ShadingMethodBase\n{\n\t/**\n\t * A method that is exposed to wrappers in case the strength needs to be controlled\n\t */\n\tpublic _iModulateMethod:(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData) => string;\n\n\t/**\n\t * Creates a new LightingMethodBase.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Get the fragment shader code that will be needed before any per-light code is added.\n\t * @param methodVO The MethodVO object containing the method data for the currently compiled material pass.\n\t * @param regCache The register cache used during the compilation.\n\t * @private\n\t */\n\tpublic iGetFragmentPreLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Get the fragment shader code that will generate the code relevant to a single light.\n\t *\n\t * @param methodVO The MethodVO object containing the method data for the currently compiled material pass.\n\t * @param lightDirReg The register containing the light direction vector.\n\t * @param lightColReg The register containing the light colour.\n\t * @param regCache The register cache used during the compilation.\n\t */\n\tpublic iGetFragmentCodePerLight(shaderObject:ShaderLightingObject, methodVO:MethodVO, lightDirReg:ShaderRegisterElement, lightColReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Get the fragment shader code that will generate the code relevant to a single light probe object.\n\t *\n\t * @param methodVO The MethodVO object containing the method data for the currently compiled material pass.\n\t * @param cubeMapReg The register containing the cube map for the current probe\n\t * @param weightRegister A string representation of the register + component containing the current weight\n\t * @param regCache The register cache providing any necessary registers to the shader\n\t */\n\tpublic iGetFragmentCodePerProbe(shaderObject:ShaderLightingObject, methodVO:MethodVO, cubeMapReg:ShaderRegisterElement, weightRegister:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Get the fragment shader code that should be added after all per-light code. Usually composits everything to the target register.\n\t *\n\t * @param methodVO The MethodVO object containing the method data for the currently compiled material pass.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register containing the final shading output.\n\t * @private\n\t */\n\tpublic iGetFragmentPostLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n}\n\nexport = LightingMethodBase;", - "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * NormalBasicMethod is the default method for standard tangent-space normal mapping.\n */\nclass NormalBasicMethod extends ShadingMethodBase\n{\n\tprivate _texture:Texture2DBase;\n\tprivate _useTexture:boolean;\n\tpublic _pNormalTextureRegister:ShaderRegisterElement;\n\n\t/**\n\t * Creates a new NormalBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\tif (!this._useTexture || !shaderObject.normalDependencies)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._useTexture;\n\t}\n\n\t/**\n\t * Indicates whether or not this method outputs normals in tangent space. Override for object-space normals.\n\t */\n\tpublic iOutputsTangentNormals():boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar s:any = method;\n\t\tvar bnm:NormalBasicMethod = method;\n\n\t\tif (bnm.normalMap != null)\n\t\t\tthis.normalMap = bnm.normalMap;\n\t}\n\n\t/**\n\t * The texture containing the normals per pixel.\n\t */\n\tpublic get normalMap():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set normalMap(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = (value != null);\n\n\t\tif (b != this._useTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._useTexture = b;\n\t\tthis._texture = value;\n\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\t\tthis._pNormalTextureRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._texture)\n\t\t\tthis._texture = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (methodVO.texturesIndex >= 0) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthis._pNormalTextureRegister = registerCache.getFreeTextureReg();\n\n\t\tmethodVO.texturesIndex = this._pNormalTextureRegister.index;\n\n\t\treturn ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, this._pNormalTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping) +\n\t\t\t\"sub \" + targetReg + \".xyz, \" + targetReg + \".xyz, \" + sharedRegisters.commons + \".xxx\\n\" +\n\t\t\t\"nrm \" + targetReg + \".xyz, \" + targetReg + \"\\n\";\n\t}\n}\n\nexport = NormalBasicMethod;", - "import NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n\n/**\n * ShadingMethodBase provides an abstract base method for shading methods, used by compiled passes to compile\n * the final shading program.\n */\nclass ShadingMethodBase extends NamedAssetBase\n{\n\tpublic _passes:Array; // should be protected\n\n\t/**\n\t * Create a new ShadingMethodBase object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * Initializes the properties for a MethodVO, including register and texture indices.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t *\n\t * @internal\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\n\t}\n\n\t/**\n\t * Initializes unchanging shader constants using the data from a MethodVO.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t *\n\t * @internal\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\n\n\t}\n\n\t/**\n\t * Indicates whether or not this method expects normals in tangent space. Override for object-space normals.\n\t */\n\tpublic iUsesTangentSpace():boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * Any passes required that render to a texture used by this method.\n\t */\n\tpublic get passes():Array\n\t{\n\t\treturn this._passes;\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t */\n\tpublic dispose()\n\t{\n\n\t}\n\n\t/**\n\t * Resets the compilation state of the method.\n\t *\n\t * @internal\n\t */\n\tpublic iReset()\n\t{\n\t\tthis.iCleanCompilationData();\n\t}\n\n\t/**\n\t * Resets the method's state for compilation.\n\t *\n\t * @internal\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t}\n\n\t/**\n\t * Get the vertex shader code for this method.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t *\n\t * @internal\n\t */\n\tpublic iGetVertexCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn null;\n\t}\n\n\t/**\n\t * Sets the render state for this method.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param stage The Stage object currently used for rendering.\n\t *\n\t * @internal\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\n\t}\n\n\t/**\n\t * Sets the render state for a single renderable.\n\t *\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param renderable The renderable currently being rendered.\n\t * @param stage The Stage object currently used for rendering.\n\t * @param camera The camera from which the scene is currently rendered.\n\t *\n\t * @internal\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderObjectBase, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\n\t}\n\n\t/**\n\t * Clears the render state for this method.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param stage The Stage object currently used for rendering.\n\t *\n\t * @internal\n\t */\n\tpublic iDeactivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\n\t}\n\n\t/**\n\t * Marks the shader program as invalid, so it will be recompiled before the next render.\n\t *\n\t * @internal\n\t */\n\tpublic iInvalidateShaderProgram()\n\t{\n\t\tthis.dispatchEvent(new ShadingMethodEvent(ShadingMethodEvent.SHADER_INVALIDATED));\n\t}\n\n\t/**\n\t * Copies the state from a ShadingMethodBase object into the current object.\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t}\n}\n\nexport = ShadingMethodBase;", - "import LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadowMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMethodBase\");\n\n/**\n * ShadowHardMethod provides the cheapest shadow map method by using a single tap without any filtering.\n */\nclass ShadowHardMethod extends ShadowMethodBase\n{\n\t/**\n\t * Creates a new ShadowHardMethod object.\n\t */\n\tconstructor(castingLight:LightBase)\n\t{\n\t\tsuper(castingLight);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _pGetPlanarFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar depthMapRegister:ShaderRegisterElement = regCache.getFreeTextureReg();\n\t\tvar decReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\n\t\t// needs to be reserved anyway. DO NOT REMOVE\n\t\tvar dataReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\n\t\tvar depthCol:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tvar code:string = \"\";\n\n\t\tmethodVO.fragmentConstantsIndex = decReg.index*4;\n\t\tmethodVO.texturesIndex = depthMapRegister.index;\n\n\t\tcode += \"tex \" + depthCol + \", \" + this._pDepthMapCoordReg + \", \" + depthMapRegister + \" <2d, nearest, clamp>\\n\" +\n\t\t\t\"dp4 \" + depthCol + \".z, \" + depthCol + \", \" + decReg + \"\\n\" +\n\t\t\t\"slt \" + targetReg + \".w, \" + this._pDepthMapCoordReg + \".z, \" + depthCol + \".z\\n\"; // 0 if in shadow\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _pGetPointFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar depthMapRegister:ShaderRegisterElement = regCache.getFreeTextureReg();\n\t\tvar decReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar epsReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar posReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar depthSampleCol:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tregCache.addFragmentTempUsages(depthSampleCol, 1);\n\t\tvar lightDir:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tvar code:string = \"\";\n\n\t\tmethodVO.fragmentConstantsIndex = decReg.index*4;\n\t\tmethodVO.texturesIndex = depthMapRegister.index;\n\n\t\tcode += \"sub \" + lightDir + \", \" + sharedRegisters.globalPositionVarying + \", \" + posReg + \"\\n\" +\n\t\t\t\"dp3 \" + lightDir + \".w, \" + lightDir + \".xyz, \" + lightDir + \".xyz\\n\" +\n\t\t\t\"mul \" + lightDir + \".w, \" + lightDir + \".w, \" + posReg + \".w\\n\" +\n\t\t\t\"nrm \" + lightDir + \".xyz, \" + lightDir + \".xyz\\n\" +\n\n\t\t\t\"tex \" + depthSampleCol + \", \" + lightDir + \", \" + depthMapRegister + \" \\n\" +\n\t\t\t\"dp4 \" + depthSampleCol + \".z, \" + depthSampleCol + \", \" + decReg + \"\\n\" +\n\t\t\t\"add \" + targetReg + \".w, \" + lightDir + \".w, \" + epsReg + \".x\\n\" + // offset by epsilon\n\n\t\t\t\"slt \" + targetReg + \".w, \" + targetReg + \".w, \" + depthSampleCol + \".z\\n\"; // 0 if in shadow\n\n\t\tregCache.removeFragmentTempUsage(depthSampleCol);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetCascadeFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, decodeRegister:ShaderRegisterElement, depthTexture:ShaderRegisterElement, depthProjection:ShaderRegisterElement, targetRegister:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar temp:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\treturn \"tex \" + temp + \", \" + depthProjection + \", \" + depthTexture + \" <2d, nearest, clamp>\\n\" +\n\t\t\t\"dp4 \" + temp + \".z, \" + temp + \", \" + decodeRegister + \"\\n\" +\n\t\t\t\"slt \" + targetRegister + \".w, \" + depthProjection + \".z, \" + temp + \".z\\n\"; // 0 if in shadow\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivateForCascade(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t}\n}\n\nexport = ShadowHardMethod;", + "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * NormalBasicMethod is the default method for standard tangent-space normal mapping.\n */\nclass NormalBasicMethod extends ShadingMethodBase\n{\n\tprivate _texture:Texture2DBase;\n\tprivate _useTexture:boolean;\n\tpublic _pNormalTextureRegister:ShaderRegisterElement;\n\n\t/**\n\t * Creates a new NormalBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\tif (!this._useTexture || !shaderObject.normalDependencies)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._useTexture;\n\t}\n\n\t/**\n\t * Indicates whether or not this method outputs normals in tangent space. Override for object-space normals.\n\t */\n\tpublic iOutputsTangentNormals():boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t\tvar s:any = method;\n\t\tvar bnm:NormalBasicMethod = method;\n\n\t\tif (bnm.normalMap != null)\n\t\t\tthis.normalMap = bnm.normalMap;\n\t}\n\n\t/**\n\t * The texture containing the normals per pixel.\n\t */\n\tpublic get normalMap():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set normalMap(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = (value != null);\n\n\t\tif (b != this._useTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._useTexture = b;\n\t\tthis._texture = value;\n\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\t\tthis._pNormalTextureRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._texture)\n\t\t\tthis._texture = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (methodVO.texturesIndex >= 0) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthis._pNormalTextureRegister = registerCache.getFreeTextureReg();\n\n\t\tmethodVO.texturesIndex = this._pNormalTextureRegister.index;\n\n\t\treturn ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedRegisters, this._pNormalTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping) +\n\t\t\t\"sub \" + targetReg + \".xyz, \" + targetReg + \".xyz, \" + sharedRegisters.commons + \".xxx\\n\" +\n\t\t\t\"nrm \" + targetReg + \".xyz, \" + targetReg + \"\\n\";\n\t}\n}\n\nexport = NormalBasicMethod;", + "import NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n\n/**\n * ShadingMethodBase provides an abstract base method for shading methods, used by compiled passes to compile\n * the final shading program.\n */\nclass ShadingMethodBase extends NamedAssetBase\n{\n\tpublic _passes:Array; // should be protected\n\n\t/**\n\t * Create a new ShadingMethodBase object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * Initializes the properties for a MethodVO, including register and texture indices.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t *\n\t * @internal\n\t */\n\tpublic iInitVO(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\n\t}\n\n\t/**\n\t * Initializes unchanging shader constants using the data from a MethodVO.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t *\n\t * @internal\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\n\n\t}\n\n\t/**\n\t * Indicates whether or not this method expects normals in tangent space. Override for object-space normals.\n\t */\n\tpublic iUsesTangentSpace():boolean\n\t{\n\t\treturn true;\n\t}\n\n\t/**\n\t * Any passes required that render to a texture used by this method.\n\t */\n\tpublic get passes():Array\n\t{\n\t\treturn this._passes;\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t */\n\tpublic dispose()\n\t{\n\n\t}\n\n\t/**\n\t * Resets the compilation state of the method.\n\t *\n\t * @internal\n\t */\n\tpublic iReset()\n\t{\n\t\tthis.iCleanCompilationData();\n\t}\n\n\t/**\n\t * Resets the method's state for compilation.\n\t *\n\t * @internal\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t}\n\n\t/**\n\t * Get the vertex shader code for this method.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t *\n\t * @internal\n\t */\n\tpublic iGetVertexCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn null;\n\t}\n\n\t/**\n\t * Sets the render state for this method.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param stage The Stage object currently used for rendering.\n\t *\n\t * @internal\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\n\t}\n\n\t/**\n\t * Sets the render state for a single renderable.\n\t *\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param renderable The renderable currently being rendered.\n\t * @param stage The Stage object currently used for rendering.\n\t * @param camera The camera from which the scene is currently rendered.\n\t *\n\t * @internal\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderObjectBase, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\n\t}\n\n\t/**\n\t * Clears the render state for this method.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param stage The Stage object currently used for rendering.\n\t *\n\t * @internal\n\t */\n\tpublic iDeactivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\n\t}\n\n\t/**\n\t * Marks the shader program as invalid, so it will be recompiled before the next render.\n\t *\n\t * @internal\n\t */\n\tpublic iInvalidateShaderProgram()\n\t{\n\t\tthis.dispatchEvent(new ShadingMethodEvent(ShadingMethodEvent.SHADER_INVALIDATED));\n\t}\n\n\t/**\n\t * Copies the state from a ShadingMethodBase object into the current object.\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\t}\n}\n\nexport = ShadingMethodBase;", + "import LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadowMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMethodBase\");\n\n/**\n * ShadowHardMethod provides the cheapest shadow map method by using a single tap without any filtering.\n */\nclass ShadowHardMethod extends ShadowMethodBase\n{\n\t/**\n\t * Creates a new ShadowHardMethod object.\n\t */\n\tconstructor(castingLight:LightBase)\n\t{\n\t\tsuper(castingLight);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _pGetPlanarFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar depthMapRegister:ShaderRegisterElement = regCache.getFreeTextureReg();\n\t\tvar decReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\n\t\t// needs to be reserved anyway. DO NOT REMOVE\n\t\tvar dataReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\n\t\tvar depthCol:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tvar code:string = \"\";\n\n\t\tmethodVO.fragmentConstantsIndex = decReg.index*4;\n\t\tmethodVO.texturesIndex = depthMapRegister.index;\n\n\t\tcode += \"tex \" + depthCol + \", \" + this._pDepthMapCoordReg + \", \" + depthMapRegister + \" <2d, nearest, clamp>\\n\" +\n\t\t\t\"dp4 \" + depthCol + \".z, \" + depthCol + \", \" + decReg + \"\\n\" +\n\t\t\t\"slt \" + targetReg + \".w, \" + this._pDepthMapCoordReg + \".z, \" + depthCol + \".z\\n\"; // 0 if in shadow\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _pGetPointFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar depthMapRegister:ShaderRegisterElement = regCache.getFreeTextureReg();\n\t\tvar decReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar epsReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar posReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\tvar depthSampleCol:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tregCache.addFragmentTempUsages(depthSampleCol, 1);\n\t\tvar lightDir:ShaderRegisterElement = regCache.getFreeFragmentVectorTemp();\n\t\tvar code:string = \"\";\n\n\t\tmethodVO.fragmentConstantsIndex = decReg.index*4;\n\t\tmethodVO.texturesIndex = depthMapRegister.index;\n\n\t\tcode += \"sub \" + lightDir + \", \" + sharedRegisters.globalPositionVarying + \", \" + posReg + \"\\n\" +\n\t\t\t\"dp3 \" + lightDir + \".w, \" + lightDir + \".xyz, \" + lightDir + \".xyz\\n\" +\n\t\t\t\"mul \" + lightDir + \".w, \" + lightDir + \".w, \" + posReg + \".w\\n\" +\n\t\t\t\"nrm \" + lightDir + \".xyz, \" + lightDir + \".xyz\\n\" +\n\n\t\t\t\"tex \" + depthSampleCol + \", \" + lightDir + \", \" + depthMapRegister + \" \\n\" +\n\t\t\t\"dp4 \" + depthSampleCol + \".z, \" + depthSampleCol + \", \" + decReg + \"\\n\" +\n\t\t\t\"add \" + targetReg + \".w, \" + lightDir + \".w, \" + epsReg + \".x\\n\" + // offset by epsilon\n\n\t\t\t\"slt \" + targetReg + \".w, \" + targetReg + \".w, \" + depthSampleCol + \".z\\n\"; // 0 if in shadow\n\n\t\tregCache.removeFragmentTempUsage(depthSampleCol);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetCascadeFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, decodeRegister:ShaderRegisterElement, depthTexture:ShaderRegisterElement, depthProjection:ShaderRegisterElement, targetRegister:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar temp:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\treturn \"tex \" + temp + \", \" + depthProjection + \", \" + depthTexture + \" <2d, nearest, clamp>\\n\" +\n\t\t\t\"dp4 \" + temp + \".z, \" + temp + \", \" + decodeRegister + \"\\n\" +\n\t\t\t\"slt \" + targetRegister + \".w, \" + depthProjection + \".z, \" + temp + \".z\\n\"; // 0 if in shadow\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivateForCascade(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t}\n}\n\nexport = ShadowHardMethod;", "import AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport IAsset\t\t\t\t\t\t= require(\"awayjs-core/lib/library/IAsset\");\n\nimport LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\nimport ShadowMapperBase\t\t\t\t= require(\"awayjs-display/lib/materials/shadowmappers/ShadowMapperBase\");\n\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\n\n/**\n * ShadowMapMethodBase provides an abstract base method for shadow map methods.\n */\nclass ShadowMapMethodBase extends ShadingMethodBase implements IAsset\n{\n\tpublic _pCastingLight:LightBase;\n\tpublic _pShadowMapper:ShadowMapperBase;\n\n\tpublic _pEpsilon:number = .02;\n\tpublic _pAlpha:number = 1;\n\n\t/**\n\t * Creates a new ShadowMapMethodBase object.\n\t * @param castingLight The light used to cast shadows.\n\t */\n\tconstructor(castingLight:LightBase)\n\t{\n\t\tsuper();\n\t\tthis._pCastingLight = castingLight;\n\t\tcastingLight.castsShadows = true;\n\t\tthis._pShadowMapper = castingLight.shadowMapper;\n\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get assetType():string\n\t{\n\t\treturn AssetType.SHADOW_MAP_METHOD;\n\t}\n\n\t/**\n\t * The \"transparency\" of the shadows. This allows making shadows less strong.\n\t */\n\tpublic get alpha():number\n\t{\n\t\treturn this._pAlpha;\n\t}\n\n\tpublic set alpha(value:number)\n\t{\n\t\tthis._pAlpha = value;\n\t}\n\n\t/**\n\t * The light casting the shadows.\n\t */\n\tpublic get castingLight():LightBase\n\t{\n\t\treturn this._pCastingLight;\n\t}\n\n\t/**\n\t * A small value to counter floating point precision errors when comparing values in the shadow map with the\n\t * calculated depth value. Increase this if shadow banding occurs, decrease it if the shadow seems to be too detached.\n\t */\n\tpublic get epsilon():number\n\t{\n\t\treturn this._pEpsilon;\n\t}\n\n\tpublic set epsilon(value:number)\n\t{\n\t\tthis._pEpsilon = value;\n\t}\n}\n\nexport = ShadowMapMethodBase;", - "import Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport DirectionalShadowMapper\t\t= require(\"awayjs-display/lib/materials/shadowmappers/DirectionalShadowMapper\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\n\n/**\n * ShadowMethodBase provides an abstract method for simple (non-wrapping) shadow map methods.\n */\nclass ShadowMethodBase extends ShadowMapMethodBase\n{\n\tpublic _pDepthMapCoordReg:ShaderRegisterElement;\n\tpublic _pUsePoint:boolean;\n\n\t/**\n\t * Creates a new ShadowMethodBase object.\n\t * @param castingLight The light used to cast shadows.\n\t */\n\tconstructor(castingLight:LightBase)\n\t{\n\t\tthis._pUsePoint = (castingLight instanceof PointLight);\n\n\t\tsuper(castingLight);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsView = true;\n\t\tmethodVO.needsGlobalVertexPos = true;\n\t\tmethodVO.needsGlobalFragmentPos = this._pUsePoint;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tvar fragmentData:Array = shaderObject.fragmentConstantData;\n\t\tvar vertexData:Array = shaderObject.vertexConstantData;\n\t\tvar index:number /*int*/ = methodVO.fragmentConstantsIndex;\n\t\tfragmentData[index] = 1.0;\n\t\tfragmentData[index + 1] = 1/255.0;\n\t\tfragmentData[index + 2] = 1/65025.0;\n\t\tfragmentData[index + 3] = 1/16581375.0;\n\n\t\tfragmentData[index + 6] = 0;\n\t\tfragmentData[index + 7] = 1;\n\n\t\tif (this._pUsePoint) {\n\t\t\tfragmentData[index + 8] = 0;\n\t\t\tfragmentData[index + 9] = 0;\n\t\t\tfragmentData[index + 10] = 0;\n\t\t\tfragmentData[index + 11] = 1;\n\t\t}\n\n\t\tindex = methodVO.vertexConstantsIndex;\n\t\tif (index != -1) {\n\t\t\tvertexData[index] = .5;\n\t\t\tvertexData[index + 1] = .5;\n\t\t\tvertexData[index + 2] = 0.0;\n\t\t\tvertexData[index + 3] = 1.0;\n\t\t}\n\t}\n\n\t/**\n\t * Wrappers that override the vertex shader need to set this explicitly\n\t */\n\tpublic get _iDepthMapCoordReg():ShaderRegisterElement\n\t{\n\t\treturn this._pDepthMapCoordReg;\n\t}\n\n\tpublic set _iDepthMapCoordReg(value:ShaderRegisterElement)\n\t{\n\t\tthis._pDepthMapCoordReg = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\n\t\tthis._pDepthMapCoordReg = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetVertexCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn this._pUsePoint? this._pGetPointVertexCode(methodVO, regCache, sharedRegisters):this.pGetPlanarVertexCode(methodVO, regCache, sharedRegisters);\n\t}\n\n\t/**\n\t * Gets the vertex code for shadow mapping with a point light.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t */\n\tpublic _pGetPointVertexCode(methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tmethodVO.vertexConstantsIndex = -1;\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Gets the vertex code for shadow mapping with a planar shadow map (fe: directional lights).\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t */\n\tpublic pGetPlanarVertexCode(methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar temp:ShaderRegisterElement = regCache.getFreeVertexVectorTemp();\n\t\tvar dataReg:ShaderRegisterElement = regCache.getFreeVertexConstant();\n\t\tvar depthMapProj:ShaderRegisterElement = regCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tthis._pDepthMapCoordReg = regCache.getFreeVarying();\n\t\tmethodVO.vertexConstantsIndex = dataReg.index*4;\n\n\t\t// todo: can epsilon be applied here instead of fragment shader?\n\n\t\tcode += \"m44 \" + temp + \", \" + sharedRegisters.globalPositionVertex + \", \" + depthMapProj + \"\\n\" + \"div \" + temp + \", \" + temp + \", \" + temp + \".w\\n\" + \"mul \" + temp + \".xy, \" + temp + \".xy, \" + dataReg + \".xy\\n\" + \"add \" + this._pDepthMapCoordReg + \", \" + temp + \", \" + dataReg + \".xxwz\\n\";\n\t\t//\"sub \" + this._pDepthMapCoordReg + \".z, \" + this._pDepthMapCoordReg + \".z, \" + this._pDepthMapCoordReg + \".w\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = this._pUsePoint? this._pGetPointFragmentCode(methodVO, targetReg, registerCache, sharedRegisters):this._pGetPlanarFragmentCode(methodVO, targetReg, registerCache, sharedRegisters);\n\t\tcode += \"add \" + targetReg + \".w, \" + targetReg + \".w, fc\" + (methodVO.fragmentConstantsIndex/4 + 1) + \".y\\n\" + \"sat \" + targetReg + \".w, \" + targetReg + \".w\\n\";\n\t\treturn code;\n\t}\n\n\t/**\n\t * Gets the fragment code for shadow mapping with a planar shadow map.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _pGetPlanarFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Gets the fragment code for shadow mapping with a point light.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _pGetPointFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderObjectBase, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\t\tif (!this._pUsePoint)\n\t\t\t( this._pShadowMapper).iDepthProjection.copyRawDataTo(shaderObject.vertexConstantData, methodVO.vertexConstantsIndex + 4, true);\n\t}\n\n\t/**\n\t * Gets the fragment code for combining this method with a cascaded shadow map method.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param decodeRegister The register containing the data to decode the shadow map depth value.\n\t * @param depthTexture The texture containing the shadow map.\n\t * @param depthProjection The projection of the fragment relative to the light.\n\t * @param targetRegister The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _iGetCascadeFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, decodeRegister:ShaderRegisterElement, depthTexture:ShaderRegisterElement, depthProjection:ShaderRegisterElement, targetRegister:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new Error(\"This shadow method is incompatible with cascade shadows\");\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tvar fragmentData:Array = shaderObject.fragmentConstantData;\n\t\tvar index:number /*int*/ = methodVO.fragmentConstantsIndex;\n\n\t\tif (this._pUsePoint)\n\t\t\tfragmentData[index + 4] = -Math.pow(1/(( this._pCastingLight).fallOff*this._pEpsilon), 2);\n\t\telse\n\t\t\tshaderObject.vertexConstantData[methodVO.vertexConstantsIndex + 3] = -1/(( this._pShadowMapper).depth*this._pEpsilon);\n\n\t\tfragmentData[index + 5] = 1 - this._pAlpha;\n\n\t\tif (this._pUsePoint) {\n\t\t\tvar pos:Vector3D = this._pCastingLight.scenePosition;\n\t\t\tfragmentData[index + 8] = pos.x;\n\t\t\tfragmentData[index + 9] = pos.y;\n\t\t\tfragmentData[index + 10] = pos.z;\n\t\t\t// used to decompress distance\n\t\t\tvar f:number = ( this._pCastingLight).fallOff;\n\t\t\tfragmentData[index + 11] = 1/(2*f*f);\n\t\t}\n\n\t\tif (!this._pUsePoint)\n\t\t\t( stage.context).activateRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap);\n\t\t//else\n\t\t//\t( stage.context).activateCubeRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap);\n\t}\n\n\t/**\n\t * Sets the method state for cascade shadow mapping.\n\t */\n\tpublic iActivateForCascade(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tthrow new Error(\"This shadow method is incompatible with cascade shadows\");\n\t}\n}\n\nexport = ShadowMethodBase;", - "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * SpecularBasicMethod provides the default shading method for Blinn-Phong specular highlights (an optimized but approximated\n * version of Phong specularity).\n */\nclass SpecularBasicMethod extends LightingMethodBase\n{\n\tpublic _pUseTexture:boolean;\n\tpublic _pTotalLightColorReg:ShaderRegisterElement;\n\tpublic _pSpecularTextureRegister:ShaderRegisterElement;\n\tpublic _pSpecularTexData:ShaderRegisterElement;\n\tpublic _pSpecularDataRegister:ShaderRegisterElement;\n\n\tprivate _texture:Texture2DBase;\n\n\tprivate _gloss:number = 50;\n\tprivate _specular:number = 1;\n\tprivate _specularColor:number = 0xffffff;\n\tpublic _iSpecularR:number = 1;\n\tpublic _iSpecularG:number = 1;\n\tpublic _iSpecularB:number = 1;\n\tpublic _pIsFirstLight:boolean;\n\n\t/**\n\t * Creates a new SpecularBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (!shaderObject.numLights)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._pUseTexture;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t\tmethodVO.needsView = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * The sharpness of the specular highlight.\n\t */\n\tpublic get gloss():number\n\t{\n\t\treturn this._gloss;\n\t}\n\n\tpublic set gloss(value:number)\n\t{\n\t\tthis._gloss = value;\n\t}\n\n\t/**\n\t * The overall strength of the specular highlights.\n\t */\n\tpublic get specular():number\n\t{\n\t\treturn this._specular;\n\t}\n\n\tpublic set specular(value:number)\n\t{\n\t\tif (value == this._specular)\n\t\t\treturn;\n\n\t\tthis._specular = value;\n\t\tthis.updateSpecular();\n\t}\n\n\t/**\n\t * The colour of the specular reflection of the surface.\n\t */\n\tpublic get specularColor():number\n\t{\n\t\treturn this._specularColor;\n\t}\n\n\tpublic set specularColor(value:number)\n\t{\n\t\tif (this._specularColor == value)\n\t\t\treturn;\n\n\t\t// specular is now either enabled or disabled\n\t\tif (this._specularColor == 0 || value == 0)\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._specularColor = value;\n\t\tthis.updateSpecular();\n\t}\n\n\t/**\n\t * The bitmapData that encodes the specular highlight strength per texel in the red channel, and the sharpness\n\t * in the green channel. You can use SpecularBitmapTexture if you want to easily set specular and gloss maps\n\t * from grayscale images, but prepared images are preferred.\n\t */\n\tpublic get texture():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set texture(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = ( value != null );\n\n\t\tif (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._pUseTexture = b;\n\t\tthis._texture = value;\n\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\n\t\tvar m:any = method;\n\t\tvar bsm:SpecularBasicMethod = method;\n\n\t\tvar spec:SpecularBasicMethod = bsm;//SpecularBasicMethod(method);\n\t\tthis.texture = spec.texture;\n\t\tthis.specular = spec.specular;\n\t\tthis.specularColor = spec.specularColor;\n\t\tthis.gloss = spec.gloss;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\t\tthis._pTotalLightColorReg = null;\n\t\tthis._pSpecularTextureRegister = null;\n\t\tthis._pSpecularTexData = null;\n\t\tthis._pSpecularDataRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPreLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tthis._pIsFirstLight = true;\n\n\t\tthis._pSpecularDataRegister = registerCache.getFreeFragmentConstant();\n\t\tmethodVO.fragmentConstantsIndex = this._pSpecularDataRegister.index*4;\n\n\t\tif (this._pUseTexture) {\n\n\t\t\tthis._pSpecularTexData = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(this._pSpecularTexData, 1);\n\t\t\tthis._pSpecularTextureRegister = registerCache.getFreeTextureReg();\n\t\t\tmethodVO.texturesIndex = this._pSpecularTextureRegister.index;\n\t\t\tcode = ShaderCompilerHelper.getTex2DSampleCode(this._pSpecularTexData, sharedRegisters, this._pSpecularTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t} else {\n\n\t\t\tthis._pSpecularTextureRegister = null;\n\t\t}\n\n\t\tthis._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(this._pTotalLightColorReg, 1);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerLight(shaderObject:ShaderLightingObject, methodVO:MethodVO, lightDirReg:ShaderRegisterElement, lightColReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tvar viewDirReg:ShaderRegisterElement = sharedRegisters.viewDirFragment;\n\t\tvar normalReg:ShaderRegisterElement = sharedRegisters.normalFragment;\n\n\t\t// blinn-phong half vector model\n\t\tcode += \"add \" + t + \", \" + lightDirReg + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"nrm \" + t + \".xyz, \" + t + \"\\n\" +\n\t\t\t\t\"dp3 \" + t + \".w, \" + normalReg + \", \" + t + \"\\n\" +\n\t\t\t\t\"sat \" + t + \".w, \" + t + \".w\\n\";\n\n\t\tif (this._pUseTexture) {\n\t\t\t// apply gloss modulation from texture\n\t\t\tcode += \"mul \" + this._pSpecularTexData + \".w, \" + this._pSpecularTexData + \".y, \" + this._pSpecularDataRegister + \".w\\n\" +\n\t\t\t\t\t\"pow \" + t + \".w, \" + t + \".w, \" + this._pSpecularTexData + \".w\\n\";\n\t\t} else {\n\t\t\tcode += \"pow \" + t + \".w, \" + t + \".w, \" + this._pSpecularDataRegister + \".w\\n\";\n\t\t}\n\n\t\t// attenuate\n\t\tif (shaderObject.usesLightFallOff)\n\t\t\tcode += \"mul \" + t + \".w, \" + t + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tcode += \"mul \" + t + \".xyz, \" + lightColReg + \", \" + t + \".w\\n\";\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerProbe(shaderObject:ShaderLightingObject, methodVO:MethodVO, cubeMapReg:ShaderRegisterElement, weightRegister:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tvar normalReg:ShaderRegisterElement = sharedRegisters.normalFragment;\n\t\tvar viewDirReg:ShaderRegisterElement = sharedRegisters.viewDirFragment;\n\n\t\tcode += \"dp3 \" + t + \".w, \" + normalReg + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"add \" + t + \".w, \" + t + \".w, \" + t + \".w\\n\" +\n\t\t\t\t\"mul \" + t + \", \" + t + \".w, \" + normalReg + \"\\n\" +\n\t\t\t\t\"sub \" + t + \", \" + t + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"tex \" + t + \", \" + t + \", \" + cubeMapReg + \" \\n\" +\n\t\t\t\t\"mul \" + t + \".xyz, \" + t + \", \" + weightRegister + \"\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPostLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (sharedRegisters.shadowTarget)\n\t\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + sharedRegisters.shadowTarget + \".w\\n\";\n\n\t\tif (this._pUseTexture) {\n\t\t\t// apply strength modulation from texture\n\t\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + this._pSpecularTexData + \".x\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(this._pSpecularTexData);\n\t\t}\n\n\t\t// apply material's specular reflection\n\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + this._pSpecularDataRegister + \"\\n\" +\n\t\t\t\"add \" + targetReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\";\n\t\tregisterCache.removeFragmentTempUsage(this._pTotalLightColorReg);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderLightingObject, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (this._pUseTexture) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR:ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR:ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t}\n\n\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = this._iSpecularR;\n\t\tdata[index + 1] = this._iSpecularG;\n\t\tdata[index + 2] = this._iSpecularB;\n\t\tdata[index + 3] = this._gloss;\n\t}\n\n\t/**\n\t * Updates the specular color data used by the render state.\n\t */\n\tprivate updateSpecular()\n\t{\n\t\tthis._iSpecularR = (( this._specularColor >> 16) & 0xff)/0xff*this._specular;\n\t\tthis._iSpecularG = (( this._specularColor >> 8) & 0xff)/0xff*this._specular;\n\t\tthis._iSpecularB = ( this._specularColor & 0xff)/0xff*this._specular;\n\t}\n}\n\nexport = SpecularBasicMethod;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLProgramType\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DepthMapPass is a pass that writes depth values to a depth map as a 32-bit value exploded over the 4 texture channels.\n * This is used to render shadow maps, depth maps, etc.\n */\nclass DepthMapPass extends MaterialPassBase\n{\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * Creates a new DepthMapPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = 1.0;\n\t\tdata[index + 1] = 255.0;\n\t\tdata[index + 2] = 65025.0;\n\t\tdata[index + 3] = 16581375.0;\n\t\tdata[index + 4] = 1.0/255.0;\n\t\tdata[index + 5] = 1.0/255.0;\n\t\tdata[index + 6] = 1.0/255.0;\n\t\tdata[index + 7] = 0.0;\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tshaderObject.projectionDependencies++;\n\n\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\tshaderObject.uvDependencies++;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar targetReg:ShaderRegisterElement = sharedRegisters.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\t\tvar dataReg1:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar dataReg2:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\tthis._fragmentConstantsIndex = dataReg1.index*4;\n\n\t\tvar temp1:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp1, 1);\n\t\tvar temp2:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp2, 1);\n\n\t\tcode += \"div \" + temp1 + \", \" + sharedRegisters.projectionFragment + \", \" + sharedRegisters.projectionFragment + \".w\\n\" + //\"sub ft2.z, fc0.x, ft2.z\\n\" + //invert\n\t\t\t\"mul \" + temp1 + \", \" + dataReg1 + \", \" + temp1 + \".z\\n\" +\n\t\t\t\"frc \" + temp1 + \", \" + temp1 + \"\\n\" +\n\t\t\t\"mul \" + temp2 + \", \" + temp1 + \".yzww, \" + dataReg2 + \"\\n\";\n\n\t\t//codeF += \"mov ft1.w, fc1.w\t\\n\" +\n\t\t// \"mov ft0.w, fc0.x\t\\n\";\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tdiffuseInputReg = registerCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tvar albedo:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"sub \" + albedo + \".w, \" + albedo + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\"kil \" + albedo + \".w\\n\";\n\t\t}\n\n\t\tcode += \"sub \" + targetReg + \", \" + temp1 + \", \" + temp2 + \"\\n\";\n\n\t\tregisterCache.removeFragmentTempUsage(temp1);\n\t\tregisterCache.removeFragmentTempUsage(temp2);\n\n\t\treturn code;\n\t}\n\n\tpublic _iRender(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\t//this.setRenderState(pass, renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tcontext.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\tcontext.activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tshaderObject.fragmentConstantData[this._fragmentConstantsIndex + 8] = pass.shaderObject.alphaThreshold;\n\t\t}\n\t}\n}\n\nexport = DepthMapPass;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DistanceMapPass is a pass that writes distance values to a depth map as a 32-bit value exploded over the 4 texture channels.\n * This is used to render omnidirectional shadow maps.\n */\nclass DistanceMapPass extends MaterialPassBase\n{\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * Creates a new DistanceMapPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index + 4] = 1.0/255.0;\n\t\tdata[index + 5] = 1.0/255.0;\n\t\tdata[index + 6] = 1.0/255.0;\n\t\tdata[index + 7] = 0.0;\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tshaderObject.projectionDependencies++;\n\t\tshaderObject.viewDirDependencies++;\n\n\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\tshaderObject.uvDependencies++;\n\n\t\tshaderObject.addWorldSpaceDependencies(false);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string;\n\t\tvar targetReg:ShaderRegisterElement = sharedRegisters.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\t\tvar dataReg1:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar dataReg2:ShaderRegisterElement = registerCache.getFreeFragmentConstant()\n\n\t\tthis._fragmentConstantsIndex = dataReg1.index*4;\n\n\t\tvar temp1:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp1, 1);\n\t\tvar temp2:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp2, 1);\n\n\t\t// squared distance to view\n\t\tcode = \"dp3 \" + temp1 + \".z, \" + sharedRegisters.viewDirVarying + \".xyz, \" + sharedRegisters.viewDirVarying + \".xyz\\n\" +\n\t\t\t \"mul \" + temp1 + \", \" + dataReg1 + \", \" + temp1 + \".z\\n\" +\n\t\t\t \"frc \" + temp1 + \", \" + temp1 + \"\\n\" +\n\t\t\t \"mul \" + temp2 + \", \" + temp1 + \".yzww, \" + dataReg2 + \"\\n\";\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tdiffuseInputReg = registerCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tvar albedo:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"sub \" + albedo + \".w, \" + albedo + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\"kil \" + albedo + \".w\\n\";\n\t\t}\n\n\t\tcode += \"sub \" + targetReg + \", \" + temp1 + \", \" + temp2 + \"\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tvar f:number = camera.projection.far;\n\n\t\tf = 1/(2*f*f);\n\t\t// sqrt(f*f+f*f) is largest possible distance for any frustum, so we need to divide by it. Rarely a tight fit, but with 32 bits precision, it's enough.\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = 1.0*f;\n\t\tdata[index + 1] = 255.0*f;\n\t\tdata[index + 2] = 65025.0*f;\n\t\tdata[index + 3] = 16581375.0*f;\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tcontext.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\tcontext.activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tdata[index + 8] = pass.shaderObject.alphaThreshold;\n\t\t}\n\t}\n}\n\nexport = DistanceMapPass;", + "import Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport CubeTextureBase\t\t\t\t= require(\"awayjs-core/lib/textures/CubeTextureBase\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport DirectionalShadowMapper\t\t= require(\"awayjs-display/lib/materials/shadowmappers/DirectionalShadowMapper\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\n\n/**\n * ShadowMethodBase provides an abstract method for simple (non-wrapping) shadow map methods.\n */\nclass ShadowMethodBase extends ShadowMapMethodBase\n{\n\tpublic _pDepthMapCoordReg:ShaderRegisterElement;\n\tpublic _pUsePoint:boolean;\n\n\t/**\n\t * Creates a new ShadowMethodBase object.\n\t * @param castingLight The light used to cast shadows.\n\t */\n\tconstructor(castingLight:LightBase)\n\t{\n\t\tthis._pUsePoint = (castingLight instanceof PointLight);\n\n\t\tsuper(castingLight);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsView = true;\n\t\tmethodVO.needsGlobalVertexPos = true;\n\t\tmethodVO.needsGlobalFragmentPos = this._pUsePoint;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitConstants(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tvar fragmentData:Array = shaderObject.fragmentConstantData;\n\t\tvar vertexData:Array = shaderObject.vertexConstantData;\n\t\tvar index:number /*int*/ = methodVO.fragmentConstantsIndex;\n\t\tfragmentData[index] = 1.0;\n\t\tfragmentData[index + 1] = 1/255.0;\n\t\tfragmentData[index + 2] = 1/65025.0;\n\t\tfragmentData[index + 3] = 1/16581375.0;\n\n\t\tfragmentData[index + 6] = 0;\n\t\tfragmentData[index + 7] = 1;\n\n\t\tif (this._pUsePoint) {\n\t\t\tfragmentData[index + 8] = 0;\n\t\t\tfragmentData[index + 9] = 0;\n\t\t\tfragmentData[index + 10] = 0;\n\t\t\tfragmentData[index + 11] = 1;\n\t\t}\n\n\t\tindex = methodVO.vertexConstantsIndex;\n\t\tif (index != -1) {\n\t\t\tvertexData[index] = .5;\n\t\t\tvertexData[index + 1] = .5;\n\t\t\tvertexData[index + 2] = 0.0;\n\t\t\tvertexData[index + 3] = 1.0;\n\t\t}\n\t}\n\n\t/**\n\t * Wrappers that override the vertex shader need to set this explicitly\n\t */\n\tpublic get _iDepthMapCoordReg():ShaderRegisterElement\n\t{\n\t\treturn this._pDepthMapCoordReg;\n\t}\n\n\tpublic set _iDepthMapCoordReg(value:ShaderRegisterElement)\n\t{\n\t\tthis._pDepthMapCoordReg = value;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\n\t\tthis._pDepthMapCoordReg = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetVertexCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn this._pUsePoint? this._pGetPointVertexCode(methodVO, regCache, sharedRegisters):this.pGetPlanarVertexCode(methodVO, regCache, sharedRegisters);\n\t}\n\n\t/**\n\t * Gets the vertex code for shadow mapping with a point light.\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t */\n\tpublic _pGetPointVertexCode(methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tmethodVO.vertexConstantsIndex = -1;\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Gets the vertex code for shadow mapping with a planar shadow map (fe: directional lights).\n\t *\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t */\n\tpublic pGetPlanarVertexCode(methodVO:MethodVO, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar temp:ShaderRegisterElement = regCache.getFreeVertexVectorTemp();\n\t\tvar dataReg:ShaderRegisterElement = regCache.getFreeVertexConstant();\n\t\tvar depthMapProj:ShaderRegisterElement = regCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tregCache.getFreeVertexConstant();\n\t\tthis._pDepthMapCoordReg = regCache.getFreeVarying();\n\t\tmethodVO.vertexConstantsIndex = dataReg.index*4;\n\n\t\t// todo: can epsilon be applied here instead of fragment shader?\n\n\t\tcode += \"m44 \" + temp + \", \" + sharedRegisters.globalPositionVertex + \", \" + depthMapProj + \"\\n\" + \"div \" + temp + \", \" + temp + \", \" + temp + \".w\\n\" + \"mul \" + temp + \".xy, \" + temp + \".xy, \" + dataReg + \".xy\\n\" + \"add \" + this._pDepthMapCoordReg + \", \" + temp + \", \" + dataReg + \".xxwz\\n\";\n\t\t//\"sub \" + this._pDepthMapCoordReg + \".z, \" + this._pDepthMapCoordReg + \".z, \" + this._pDepthMapCoordReg + \".w\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = this._pUsePoint? this._pGetPointFragmentCode(methodVO, targetReg, registerCache, sharedRegisters):this._pGetPlanarFragmentCode(methodVO, targetReg, registerCache, sharedRegisters);\n\t\tcode += \"add \" + targetReg + \".w, \" + targetReg + \".w, fc\" + (methodVO.fragmentConstantsIndex/4 + 1) + \".y\\n\" + \"sat \" + targetReg + \".w, \" + targetReg + \".w\\n\";\n\t\treturn code;\n\t}\n\n\t/**\n\t * Gets the fragment code for shadow mapping with a planar shadow map.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _pGetPlanarFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Gets the fragment code for shadow mapping with a point light.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param targetReg The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _pGetPointFragmentCode(methodVO:MethodVO, targetReg:ShaderRegisterElement, regCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new AbstractMethodError();\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iSetRenderState(shaderObject:ShaderObjectBase, methodVO:MethodVO, renderable:RenderableBase, stage:Stage, camera:Camera)\n\t{\n\t\tif (!this._pUsePoint)\n\t\t\t( this._pShadowMapper).iDepthProjection.copyRawDataTo(shaderObject.vertexConstantData, methodVO.vertexConstantsIndex + 4, true);\n\t}\n\n\t/**\n\t * Gets the fragment code for combining this method with a cascaded shadow map method.\n\t * @param methodVO The MethodVO object linking this method with the pass currently being compiled.\n\t * @param regCache The register cache used during the compilation.\n\t * @param decodeRegister The register containing the data to decode the shadow map depth value.\n\t * @param depthTexture The texture containing the shadow map.\n\t * @param depthProjection The projection of the fragment relative to the light.\n\t * @param targetRegister The register to contain the shadow coverage\n\t * @return\n\t */\n\tpublic _iGetCascadeFragmentCode(shaderObject:ShaderObjectBase, methodVO:MethodVO, decodeRegister:ShaderRegisterElement, depthTexture:ShaderRegisterElement, depthProjection:ShaderRegisterElement, targetRegister:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tthrow new Error(\"This shadow method is incompatible with cascade shadows\");\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tvar fragmentData:Array = shaderObject.fragmentConstantData;\n\t\tvar index:number /*int*/ = methodVO.fragmentConstantsIndex;\n\n\t\tif (this._pUsePoint)\n\t\t\tfragmentData[index + 4] = -Math.pow(1/(( this._pCastingLight).fallOff*this._pEpsilon), 2);\n\t\telse\n\t\t\tshaderObject.vertexConstantData[methodVO.vertexConstantsIndex + 3] = -1/(( this._pShadowMapper).depth*this._pEpsilon);\n\n\t\tfragmentData[index + 5] = 1 - this._pAlpha;\n\n\t\tif (this._pUsePoint) {\n\t\t\tvar pos:Vector3D = this._pCastingLight.scenePosition;\n\t\t\tfragmentData[index + 8] = pos.x;\n\t\t\tfragmentData[index + 9] = pos.y;\n\t\t\tfragmentData[index + 10] = pos.z;\n\t\t\t// used to decompress distance\n\t\t\tvar f:number = ( this._pCastingLight).fallOff;\n\t\t\tfragmentData[index + 11] = 1/(2*f*f);\n\t\t}\n\n\t\tif (!this._pUsePoint)\n\t\t\t( stage.context).activateRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap);\n\t\t//else\n\t\t//\t( stage.context).activateCubeRenderTexture(methodVO.texturesIndex, this._pCastingLight.shadowMapper.depthMap);\n\t}\n\n\t/**\n\t * Sets the method state for cascade shadow mapping.\n\t */\n\tpublic iActivateForCascade(shaderObject:ShaderObjectBase, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tthrow new Error(\"This shadow method is incompatible with cascade shadows\");\n\t}\n}\n\nexport = ShadowMethodBase;", + "import Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport ShadingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadingMethodBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * SpecularBasicMethod provides the default shading method for Blinn-Phong specular highlights (an optimized but approximated\n * version of Phong specularity).\n */\nclass SpecularBasicMethod extends LightingMethodBase\n{\n\tpublic _pUseTexture:boolean;\n\tpublic _pTotalLightColorReg:ShaderRegisterElement;\n\tpublic _pSpecularTextureRegister:ShaderRegisterElement;\n\tpublic _pSpecularTexData:ShaderRegisterElement;\n\tpublic _pSpecularDataRegister:ShaderRegisterElement;\n\n\tprivate _texture:Texture2DBase;\n\n\tprivate _gloss:number = 50;\n\tprivate _specular:number = 1;\n\tprivate _specularColor:number = 0xffffff;\n\tpublic _iSpecularR:number = 1;\n\tpublic _iSpecularG:number = 1;\n\tpublic _iSpecularB:number = 1;\n\tpublic _pIsFirstLight:boolean;\n\n\t/**\n\t * Creates a new SpecularBasicMethod object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\tpublic iIsUsed(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (!shaderObject.numLights)\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iInitVO(shaderObject:ShaderLightingObject, methodVO:MethodVO)\n\t{\n\t\tmethodVO.needsUV = this._pUseTexture;\n\t\tmethodVO.needsNormals = shaderObject.numLights > 0;\n\t\tmethodVO.needsView = shaderObject.numLights > 0;\n\t}\n\n\t/**\n\t * The sharpness of the specular highlight.\n\t */\n\tpublic get gloss():number\n\t{\n\t\treturn this._gloss;\n\t}\n\n\tpublic set gloss(value:number)\n\t{\n\t\tthis._gloss = value;\n\t}\n\n\t/**\n\t * The overall strength of the specular highlights.\n\t */\n\tpublic get specular():number\n\t{\n\t\treturn this._specular;\n\t}\n\n\tpublic set specular(value:number)\n\t{\n\t\tif (value == this._specular)\n\t\t\treturn;\n\n\t\tthis._specular = value;\n\t\tthis.updateSpecular();\n\t}\n\n\t/**\n\t * The colour of the specular reflection of the surface.\n\t */\n\tpublic get specularColor():number\n\t{\n\t\treturn this._specularColor;\n\t}\n\n\tpublic set specularColor(value:number)\n\t{\n\t\tif (this._specularColor == value)\n\t\t\treturn;\n\n\t\t// specular is now either enabled or disabled\n\t\tif (this._specularColor == 0 || value == 0)\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._specularColor = value;\n\t\tthis.updateSpecular();\n\t}\n\n\t/**\n\t * The bitmapData that encodes the specular highlight strength per texel in the red channel, and the sharpness\n\t * in the green channel. You can use SpecularBitmapTexture if you want to easily set specular and gloss maps\n\t * from grayscale images, but prepared images are preferred.\n\t */\n\tpublic get texture():Texture2DBase\n\t{\n\t\treturn this._texture;\n\t}\n\n\tpublic set texture(value:Texture2DBase)\n\t{\n\t\tvar b:boolean = ( value != null );\n\n\t\tif (b != this._pUseTexture || (value && this._texture && (value.hasMipmaps != this._texture.hasMipmaps || value.format != this._texture.format)))\n\t\t\tthis.iInvalidateShaderProgram();\n\n\t\tthis._pUseTexture = b;\n\t\tthis._texture = value;\n\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic copyFrom(method:ShadingMethodBase)\n\t{\n\n\t\tvar m:any = method;\n\t\tvar bsm:SpecularBasicMethod = method;\n\n\t\tvar spec:SpecularBasicMethod = bsm;//SpecularBasicMethod(method);\n\t\tthis.texture = spec.texture;\n\t\tthis.specular = spec.specular;\n\t\tthis.specularColor = spec.specularColor;\n\t\tthis.gloss = spec.gloss;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iCleanCompilationData()\n\t{\n\t\tsuper.iCleanCompilationData();\n\t\tthis._pTotalLightColorReg = null;\n\t\tthis._pSpecularTextureRegister = null;\n\t\tthis._pSpecularTexData = null;\n\t\tthis._pSpecularDataRegister = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPreLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tthis._pIsFirstLight = true;\n\n\t\tthis._pSpecularDataRegister = registerCache.getFreeFragmentConstant();\n\t\tmethodVO.fragmentConstantsIndex = this._pSpecularDataRegister.index*4;\n\n\t\tif (this._pUseTexture) {\n\n\t\t\tthis._pSpecularTexData = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(this._pSpecularTexData, 1);\n\t\t\tthis._pSpecularTextureRegister = registerCache.getFreeTextureReg();\n\t\t\tmethodVO.texturesIndex = this._pSpecularTextureRegister.index;\n\t\t\tcode = ShaderCompilerHelper.getTex2DSampleCode(this._pSpecularTexData, sharedRegisters, this._pSpecularTextureRegister, this._texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t} else {\n\n\t\t\tthis._pSpecularTextureRegister = null;\n\t\t}\n\n\t\tthis._pTotalLightColorReg = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(this._pTotalLightColorReg, 1);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerLight(shaderObject:ShaderLightingObject, methodVO:MethodVO, lightDirReg:ShaderRegisterElement, lightColReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tvar viewDirReg:ShaderRegisterElement = sharedRegisters.viewDirFragment;\n\t\tvar normalReg:ShaderRegisterElement = sharedRegisters.normalFragment;\n\n\t\t// blinn-phong half vector model\n\t\tcode += \"add \" + t + \", \" + lightDirReg + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"nrm \" + t + \".xyz, \" + t + \"\\n\" +\n\t\t\t\t\"dp3 \" + t + \".w, \" + normalReg + \", \" + t + \"\\n\" +\n\t\t\t\t\"sat \" + t + \".w, \" + t + \".w\\n\";\n\n\t\tif (this._pUseTexture) {\n\t\t\t// apply gloss modulation from texture\n\t\t\tcode += \"mul \" + this._pSpecularTexData + \".w, \" + this._pSpecularTexData + \".y, \" + this._pSpecularDataRegister + \".w\\n\" +\n\t\t\t\t\t\"pow \" + t + \".w, \" + t + \".w, \" + this._pSpecularTexData + \".w\\n\";\n\t\t} else {\n\t\t\tcode += \"pow \" + t + \".w, \" + t + \".w, \" + this._pSpecularDataRegister + \".w\\n\";\n\t\t}\n\n\t\t// attenuate\n\t\tif (shaderObject.usesLightFallOff)\n\t\t\tcode += \"mul \" + t + \".w, \" + t + \".w, \" + lightDirReg + \".w\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tcode += \"mul \" + t + \".xyz, \" + lightColReg + \", \" + t + \".w\\n\";\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentCodePerProbe(shaderObject:ShaderLightingObject, methodVO:MethodVO, cubeMapReg:ShaderRegisterElement, weightRegister:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar t:ShaderRegisterElement;\n\n\t\t// write in temporary if not first light, so we can add to total diffuse colour\n\t\tif (this._pIsFirstLight) {\n\t\t\tt = this._pTotalLightColorReg;\n\t\t} else {\n\t\t\tt = registerCache.getFreeFragmentVectorTemp();\n\t\t\tregisterCache.addFragmentTempUsages(t, 1);\n\t\t}\n\n\t\tvar normalReg:ShaderRegisterElement = sharedRegisters.normalFragment;\n\t\tvar viewDirReg:ShaderRegisterElement = sharedRegisters.viewDirFragment;\n\n\t\tcode += \"dp3 \" + t + \".w, \" + normalReg + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"add \" + t + \".w, \" + t + \".w, \" + t + \".w\\n\" +\n\t\t\t\t\"mul \" + t + \", \" + t + \".w, \" + normalReg + \"\\n\" +\n\t\t\t\t\"sub \" + t + \", \" + t + \", \" + viewDirReg + \"\\n\" +\n\t\t\t\t\"tex \" + t + \", \" + t + \", \" + cubeMapReg + \" \\n\" +\n\t\t\t\t\"mul \" + t + \".xyz, \" + t + \", \" + weightRegister + \"\\n\";\n\n\t\tif (this._iModulateMethod != null)\n\t\t\tcode += this._iModulateMethod(shaderObject, methodVO, t, registerCache, sharedRegisters);\n\n\t\tif (!this._pIsFirstLight) {\n\t\t\tcode += \"add \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + t + \"\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(t);\n\t\t}\n\n\t\tthis._pIsFirstLight = false;\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iGetFragmentPostLightingCode(shaderObject:ShaderLightingObject, methodVO:MethodVO, targetReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (sharedRegisters.shadowTarget)\n\t\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + sharedRegisters.shadowTarget + \".w\\n\";\n\n\t\tif (this._pUseTexture) {\n\t\t\t// apply strength modulation from texture\n\t\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + this._pSpecularTexData + \".x\\n\";\n\t\t\tregisterCache.removeFragmentTempUsage(this._pSpecularTexData);\n\t\t}\n\n\t\t// apply material's specular reflection\n\t\tcode += \"mul \" + this._pTotalLightColorReg + \".xyz, \" + this._pTotalLightColorReg + \", \" + this._pSpecularDataRegister + \"\\n\" +\n\t\t\t\"add \" + targetReg + \".xyz, \" + targetReg + \", \" + this._pTotalLightColorReg + \"\\n\";\n\t\tregisterCache.removeFragmentTempUsage(this._pTotalLightColorReg);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic iActivate(shaderObject:ShaderLightingObject, methodVO:MethodVO, stage:Stage)\n\t{\n\t\tif (this._pUseTexture) {\n\t\t\t( stage.context).setSamplerStateAt(methodVO.texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR:ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR:ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(methodVO.texturesIndex, this._texture);\n\t\t}\n\n\t\tvar index:number = methodVO.fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = this._iSpecularR;\n\t\tdata[index + 1] = this._iSpecularG;\n\t\tdata[index + 2] = this._iSpecularB;\n\t\tdata[index + 3] = this._gloss;\n\t}\n\n\t/**\n\t * Updates the specular color data used by the render state.\n\t */\n\tprivate updateSpecular()\n\t{\n\t\tthis._iSpecularR = (( this._specularColor >> 16) & 0xff)/0xff*this._specular;\n\t\tthis._iSpecularG = (( this._specularColor >> 8) & 0xff)/0xff*this._specular;\n\t\tthis._iSpecularB = ( this._specularColor & 0xff)/0xff*this._specular;\n\t}\n}\n\nexport = SpecularBasicMethod;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport ContextGLProgramType\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLProgramType\");\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DepthMapPass is a pass that writes depth values to a depth map as a 32-bit value exploded over the 4 texture channels.\n * This is used to render shadow maps, depth maps, etc.\n */\nclass DepthMapPass extends MaterialPassBase\n{\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * Creates a new DepthMapPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = 1.0;\n\t\tdata[index + 1] = 255.0;\n\t\tdata[index + 2] = 65025.0;\n\t\tdata[index + 3] = 16581375.0;\n\t\tdata[index + 4] = 1.0/255.0;\n\t\tdata[index + 5] = 1.0/255.0;\n\t\tdata[index + 6] = 1.0/255.0;\n\t\tdata[index + 7] = 0.0;\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tshaderObject.projectionDependencies++;\n\n\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\tshaderObject.uvDependencies++;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar targetReg:ShaderRegisterElement = sharedRegisters.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\t\tvar dataReg1:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar dataReg2:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\tthis._fragmentConstantsIndex = dataReg1.index*4;\n\n\t\tvar temp1:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp1, 1);\n\t\tvar temp2:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp2, 1);\n\n\t\tcode += \"div \" + temp1 + \", \" + sharedRegisters.projectionFragment + \", \" + sharedRegisters.projectionFragment + \".w\\n\" + //\"sub ft2.z, fc0.x, ft2.z\\n\" + //invert\n\t\t\t\"mul \" + temp1 + \", \" + dataReg1 + \", \" + temp1 + \".z\\n\" +\n\t\t\t\"frc \" + temp1 + \", \" + temp1 + \"\\n\" +\n\t\t\t\"mul \" + temp2 + \", \" + temp1 + \".yzww, \" + dataReg2 + \"\\n\";\n\n\t\t//codeF += \"mov ft1.w, fc1.w\t\\n\" +\n\t\t// \"mov ft0.w, fc0.x\t\\n\";\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tdiffuseInputReg = registerCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tvar albedo:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"sub \" + albedo + \".w, \" + albedo + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\"kil \" + albedo + \".w\\n\";\n\t\t}\n\n\t\tcode += \"sub \" + targetReg + \", \" + temp1 + \", \" + temp2 + \"\\n\";\n\n\t\tregisterCache.removeFragmentTempUsage(temp1);\n\t\tregisterCache.removeFragmentTempUsage(temp2);\n\n\t\treturn code;\n\t}\n\n\tpublic _iRender(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\t//this.setRenderState(pass, renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tcontext.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\tcontext.activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tshaderObject.fragmentConstantData[this._fragmentConstantsIndex + 8] = pass.shaderObject.alphaThreshold;\n\t\t}\n\t}\n}\n\nexport = DepthMapPass;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * DistanceMapPass is a pass that writes distance values to a depth map as a 32-bit value exploded over the 4 texture channels.\n * This is used to render omnidirectional shadow maps.\n */\nclass DistanceMapPass extends MaterialPassBase\n{\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * Creates a new DistanceMapPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index + 4] = 1.0/255.0;\n\t\tdata[index + 5] = 1.0/255.0;\n\t\tdata[index + 6] = 1.0/255.0;\n\t\tdata[index + 7] = 0.0;\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tshaderObject.projectionDependencies++;\n\t\tshaderObject.viewDirDependencies++;\n\n\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\tshaderObject.uvDependencies++;\n\n\t\tshaderObject.addWorldSpaceDependencies(false);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string;\n\t\tvar targetReg:ShaderRegisterElement = sharedRegisters.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement = registerCache.getFreeTextureReg();\n\t\tvar dataReg1:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\t\tvar dataReg2:ShaderRegisterElement = registerCache.getFreeFragmentConstant()\n\n\t\tthis._fragmentConstantsIndex = dataReg1.index*4;\n\n\t\tvar temp1:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp1, 1);\n\t\tvar temp2:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\tregisterCache.addFragmentTempUsages(temp2, 1);\n\n\t\t// squared distance to view\n\t\tcode = \"dp3 \" + temp1 + \".z, \" + sharedRegisters.viewDirVarying + \".xyz, \" + sharedRegisters.viewDirVarying + \".xyz\\n\" +\n\t\t\t \"mul \" + temp1 + \", \" + dataReg1 + \", \" + temp1 + \".z\\n\" +\n\t\t\t \"frc \" + temp1 + \", \" + temp1 + \"\\n\" +\n\t\t\t \"mul \" + temp2 + \", \" + temp1 + \".yzww, \" + dataReg2 + \"\\n\";\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tdiffuseInputReg = registerCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tvar albedo:ShaderRegisterElement = registerCache.getFreeFragmentVectorTemp();\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(albedo, sharedRegisters, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tvar cutOffReg:ShaderRegisterElement = registerCache.getFreeFragmentConstant();\n\n\t\t\tcode += \"sub \" + albedo + \".w, \" + albedo + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\"kil \" + albedo + \".w\\n\";\n\t\t}\n\n\t\tcode += \"sub \" + targetReg + \", \" + temp1 + \", \" + temp2 + \"\\n\";\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar context:IContextStageGL = stage.context;\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tvar f:number = camera.projection.far;\n\n\t\tf = 1/(2*f*f);\n\t\t// sqrt(f*f+f*f) is largest possible distance for any frustum, so we need to divide by it. Rarely a tight fit, but with 32 bits precision, it's enough.\n\t\tvar index:number = this._fragmentConstantsIndex;\n\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\tdata[index] = 1.0*f;\n\t\tdata[index + 1] = 255.0*f;\n\t\tdata[index + 2] = 65025.0*f;\n\t\tdata[index + 3] = 16581375.0*f;\n\n\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\tcontext.setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\tcontext.activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tdata[index + 8] = pass.shaderObject.alphaThreshold;\n\t\t}\n\t}\n}\n\nexport = DistanceMapPass;", "import LightPickerBase\t\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/LightPickerBase\");\n\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\n\n\ninterface ILightingPassStageGL extends IMaterialPassStageGL\n{\n\t/**\n\t * The amount of point lights that need to be supported.\n\t */\n\tiNumPointLights:number;\n\n\t/**\n\t * The amount of directional lights that need to be supported.\n\t */\n\tiNumDirectionalLights:number;\n\n\t/**\n\t * The amount of light probes that need to be supported.\n\t */\n\tiNumLightProbes:number;\n\n\t/**\n\t * Indicates the offset in the light picker's directional light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tdirectionalLightsOffset:number;\n\n\t/**\n\t * Indicates the offset in the light picker's point light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpointLightsOffset:number;\n\n\t/**\n\t * Indicates the offset in the light picker's light probes vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tlightProbesOffset:number;\n\n\t/**\n\t * The light picker used by the material to provide lights to the material if it supports lighting.\n\t *\n\t * @see away.materials.LightPickerBase\n\t * @see away.materials.StaticLightPicker\n\t */\n\tlightPicker:LightPickerBase;\n\n\t_iUsesSpecular();\n\n\t_iUsesShadows();\n\n\t_iGetPerLightDiffuseFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, diffuseColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetPerLightSpecularFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, specularColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetPerProbeDiffuseFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetPerProbeSpecularFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetPostLightingVertexCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\t_iGetPostLightingFragmentCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n}\n\nexport = ILightingPassStageGL;", "import IMaterialPass\t\t\t\t= require(\"awayjs-display/lib/materials/passes/IMaterialPass\");\n\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\ninterface IMaterialPassStageGL extends IMaterialPass\n{\n\t_iGetPreLightingVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetPreLightingFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetNormalVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\t_iGetNormalFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string;\n\n\tforceSeparateMVP:boolean;\n\n\tpassMode:number;\n\n\t_iInitConstantData(shaderObject:ShaderObjectBase);\n\n\t_iIncludeDependencies(shaderObject:ShaderObjectBase);\n\n\t/**\n\t * Factory method to create a concrete shader object for this pass.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tcreateShaderObject(profile:string):ShaderObjectBase;\n}\n\nexport = IMaterialPassStageGL;", "import ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n/**\n * LineBasicPass is a material pass that draws wireframe segments.\n */\nclass LineBasicPass extends MaterialPassBase\n{\n\t/**\n\t * Creates a new SegmentPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar targetReg:ShaderRegisterElement = sharedReg.shadedTarget;\n\n\t\treturn \"mov \" + targetReg + \", v0\\n\";\n\t}\n}\n\nexport = LineBasicPass;", - "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport ArgumentError\t\t\t\t= require(\"awayjs-core/lib/errors/ArgumentError\");\nimport Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport LightPickerBase\t\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/LightPickerBase\");\nimport IMaterialPass\t\t\t\t= require(\"awayjs-display/lib/materials/passes/IMaterialPass\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\n\n/**\n * MaterialPassBase provides an abstract base class for material shader passes. A material pass constitutes at least\n * a render call per required renderable.\n */\nclass MaterialPassBase extends NamedAssetBase implements IMaterialPass, IMaterialPassStageGL\n{\n\tprivate _materialPassData:Array = new Array();\n\tprivate _maxLights:number = 3;\n\tprivate _preserveAlpha:boolean = true;\n\tprivate _includeCasters:boolean = true;\n\tprivate _forceSeparateMVP:boolean = false;\n\n\tprivate _directionalLightsOffset:number = 0;\n\tprivate _pointLightsOffset:number = 0;\n\tprivate _lightProbesOffset:number = 0;\n\n\tpublic _pNumPointLights:number = 0;\n\tpublic _pNumDirectionalLights:number = 0;\n\tpublic _pNumLightProbes:number = 0;\n\tpublic _pNumLights:number = 0;\n\n\tprivate _passMode:number;\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\tprivate _blendFactorSource:string = ContextGLBlendFactor.ONE;\n\tprivate _blendFactorDest:string = ContextGLBlendFactor.ZERO;\n\n\tpublic _pEnableBlending:boolean = false;\n\n\tpublic _pLightPicker:LightPickerBase;\n\n\tprivate _writeDepth:boolean = true;\n\tprivate _onLightsChangeDelegate:(event:Event) => void;\n\n\t/**\n\t * Indicates whether the output alpha value should remain unchanged compared to the material's original alpha.\n\t */\n\tpublic get preserveAlpha():boolean\n\t{\n\t\treturn this._preserveAlpha;\n\t}\n\n\tpublic set preserveAlpha(value:boolean)\n\t{\n\t\tif (this._preserveAlpha == value)\n\t\t\treturn;\n\n\t\tthis._preserveAlpha = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Indicates whether or not shadow casting lights need to be included.\n\t */\n\tpublic get includeCasters():boolean\n\t{\n\t\treturn this._includeCasters;\n\t}\n\n\tpublic set includeCasters(value:boolean)\n\t{\n\t\tif (this._includeCasters == value)\n\t\t\treturn;\n\n\t\tthis._includeCasters = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Indicates whether the screen projection should be calculated by forcing a separate scene matrix and\n\t * view-projection matrix. This is used to prevent rounding errors when using multiple passes with different\n\t * projection code.\n\t */\n\tpublic get forceSeparateMVP():boolean\n\t{\n\t\treturn this._forceSeparateMVP;\n\t}\n\n\tpublic set forceSeparateMVP(value:boolean)\n\t{\n\t\tif (this._forceSeparateMVP == value)\n\t\t\treturn;\n\n\t\tthis._forceSeparateMVP = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\t/**\n\t * Indicates the offset in the light picker's directional light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get directionalLightsOffset():number\n\t{\n\t\treturn this._directionalLightsOffset;\n\t}\n\n\tpublic set directionalLightsOffset(value:number)\n\t{\n\t\tthis._directionalLightsOffset = value;\n\t}\n\n\t/**\n\t * Indicates the offset in the light picker's point light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get pointLightsOffset():number\n\t{\n\t\treturn this._pointLightsOffset;\n\t}\n\n\tpublic set pointLightsOffset(value:number)\n\t{\n\t\tthis._pointLightsOffset = value;\n\t}\n\n\t/**\n\t * Indicates the offset in the light picker's light probes vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get lightProbesOffset():number\n\t{\n\t\treturn this._lightProbesOffset;\n\t}\n\n\tpublic set lightProbesOffset(value:number)\n\t{\n\t\tthis._lightProbesOffset = value;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get passMode():number\n\t{\n\t\treturn this._passMode;\n\t}\n\n\tpublic set passMode(value:number)\n\t{\n\t\tthis._passMode = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Creates a new MaterialPassBase object.\n\t */\n\tconstructor(passMode:number = 0x03)\n\t{\n\t\tsuper();\n\n\t\tthis._passMode = passMode;\n\n\t\tthis._onLightsChangeDelegate = (event:Event) => this.onLightsChange(event);\n\t}\n\n\t/**\n\t * Factory method to create a concrete shader object for this pass.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tpublic createShaderObject(profile:string):ShaderObjectBase\n\t{\n\t\treturn new ShaderObjectBase(profile);\n\t}\n\n\t/**\n\t * Indicate whether this pass should write to the depth buffer or not. Ignored when blending is enabled.\n\t */\n\tpublic get writeDepth():boolean\n\t{\n\t\treturn this._writeDepth;\n\t}\n\n\tpublic set writeDepth(value:boolean)\n\t{\n\t\tthis._writeDepth = value;\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tthis._depthCompareMode = value;\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t * @param deep Indicates whether other resources should be cleaned up, that could potentially be shared across different instances.\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\twhile (this._materialPassData.length)\n\t\t\tthis._materialPassData[0].dispose();\n\n\t\tthis._materialPassData = null;\n\t}\n\n\t/**\n\t * Renders an object to the current render target.\n\t *\n\t * @private\n\t */\n\tpublic _iRender(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tthis.setRenderState(pass, renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tpass.shaderObject.setRenderState(renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t * The blend mode to use when drawing this renderable. The following blend modes are supported:\n\t *
    \n\t *
  • BlendMode.NORMAL: No blending, unless the material inherently needs it
  • \n\t *
  • BlendMode.LAYER: Force blending. This will draw the object the same as NORMAL, but without writing depth writes.
  • \n\t *
  • BlendMode.MULTIPLY
  • \n\t *
  • BlendMode.ADD
  • \n\t *
  • BlendMode.ALPHA
  • \n\t *
\n\t */\n\tpublic setBlendMode(value:string)\n\t{\n\t\tswitch (value) {\n\n\t\t\tcase BlendMode.NORMAL:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ONE;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._pEnableBlending = false;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.LAYER:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.MULTIPLY:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.SOURCE_COLOR;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.ADD:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ONE;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.ALPHA:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new ArgumentError(\"Unsupported blend mode!\");\n\n\t\t}\n\t}\n\n\t/**\n\t * Sets the render state for the pass that is independent of the rendered object. This needs to be called before\n\t * calling renderPass. Before activating a pass, the previously used pass needs to be deactivated.\n\t * @param stage The Stage object which is currently used for rendering.\n\t * @param camera The camera from which the scene is viewed.\n\t * @private\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tcontext.setDepthTest(( this._writeDepth && !this._pEnableBlending ), this._depthCompareMode);\n\n\t\tif (this._pEnableBlending)\n\t\t\tcontext.setBlendFactors(this._blendFactorSource, this._blendFactorDest);\n\n\t\tcontext.activateMaterialPass(pass, stage, camera);\n\t}\n\n\t/**\n\t * Clears the render state for the pass. This needs to be called before activating another pass.\n\t * @param stage The Stage used for rendering\n\t *\n\t * @private\n\t */\n\tpublic _iDeactivate(pass:MaterialPassData, stage:Stage)\n\t{\n\t\t( stage.context).deactivateMaterialPass(pass, stage);\n\n\t\t( stage.context).setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); // TODO : imeplement\n\t}\n\n\t/**\n\t * Marks the shader program as invalid, so it will be recompiled before the next render.\n\t *\n\t * @param updateMaterial Indicates whether the invalidation should be performed on the entire material. Should always pass \"true\" unless it's called from the material itself.\n\t */\n\tpublic _pInvalidatePass()\n\t{\n\t\tvar len:number = this._materialPassData.length;\n\t\tfor (var i:number = 0; i < len; i++)\n\t\t\tthis._materialPassData[i].invalidate();\n\n\t\tthis.dispatchEvent(new Event(Event.CHANGE));\n\t}\n\n\t/**\n\t * The light picker used by the material to provide lights to the material if it supports lighting.\n\t *\n\t * @see away.materials.LightPickerBase\n\t * @see away.materials.StaticLightPicker\n\t */\n\tpublic get lightPicker():LightPickerBase\n\t{\n\t\treturn this._pLightPicker;\n\t}\n\n\tpublic set lightPicker(value:LightPickerBase)\n\t{\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\tthis._pLightPicker = value;\n\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.addEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\tthis.pUpdateLights();\n\t}\n\n\t/**\n\t * Called when the light picker's configuration changes.\n\t */\n\tprivate onLightsChange(event:Event)\n\t{\n\t\tthis.pUpdateLights();\n\t}\n\n\t/**\n\t * Implemented by subclasses if the pass uses lights to update the shader.\n\t */\n\tpublic pUpdateLights()\n\t{\n\t\tvar numDirectionalLightsOld:number = this._pNumDirectionalLights;\n\t\tvar numPointLightsOld:number = this._pNumPointLights;\n\t\tvar numLightProbesOld:number = this._pNumLightProbes;\n\n\t\tif (this._pLightPicker && (this._passMode & MaterialPassMode.LIGHTING)) {\n\t\t\tthis._pNumDirectionalLights = this.calculateNumDirectionalLights(this._pLightPicker.numDirectionalLights);\n\t\t\tthis._pNumPointLights = this.calculateNumPointLights(this._pLightPicker.numPointLights);\n\t\t\tthis._pNumLightProbes = this.calculateNumProbes(this._pLightPicker.numLightProbes);\n\n\t\t\tif (this._includeCasters) {\n\t\t\t\tthis._pNumDirectionalLights += this._pLightPicker.numCastingDirectionalLights;\n\t\t\t\tthis._pNumPointLights += this._pLightPicker.numCastingPointLights;\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis._pNumDirectionalLights = 0;\n\t\t\tthis._pNumPointLights = 0;\n\t\t\tthis._pNumLightProbes = 0;\n\t\t}\n\n\t\tthis._pNumLights = this._pNumDirectionalLights + this._pNumPointLights;\n\n\t\tif (numDirectionalLightsOld != this._pNumDirectionalLights || numPointLightsOld != this._pNumPointLights || numLightProbesOld != this._pNumLightProbes)\n\t\t\tthis._pInvalidatePass();\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tif (this._forceSeparateMVP)\n\t\t\tshaderObject.globalPosDependencies++;\n\n\t\tshaderObject.outputsNormals = this._pOutputsNormals(shaderObject);\n\t\tshaderObject.outputsTangentNormals = shaderObject.outputsNormals && this._pOutputsTangentNormals(shaderObject);\n\t\tshaderObject.usesTangentSpace = shaderObject.outputsTangentNormals && this._pUsesTangentSpace(shaderObject);\n\n\t\tif (!shaderObject.usesTangentSpace)\n\t\t\tshaderObject.addWorldSpaceDependencies(Boolean(this._passMode & MaterialPassMode.EFFECTS));\n\t}\n\n\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\n\t}\n\n\tpublic _iGetPreLightingVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetPreLightingFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetNormalVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetNormalFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * The amount of point lights that need to be supported.\n\t */\n\tpublic get iNumPointLights():number\n\t{\n\t\treturn this._pNumPointLights;\n\t}\n\n\t/**\n\t * The amount of directional lights that need to be supported.\n\t */\n\tpublic get iNumDirectionalLights():number\n\t{\n\t\treturn this._pNumDirectionalLights;\n\t}\n\n\t/**\n\t * The amount of light probes that need to be supported.\n\t */\n\tpublic get iNumLightProbes():number\n\t{\n\t\treturn this._pNumLightProbes;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are calculated at all.\n\t */\n\tpublic _pOutputsNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are calculated in tangent space.\n\t */\n\tpublic _pOutputsTangentNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space\n\t * dependencies exist.\n\t */\n\tpublic _pUsesTangentSpace(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Calculates the amount of directional lights this material will support.\n\t * @param numDirectionalLights The maximum amount of directional lights to support.\n\t * @return The amount of directional lights this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumDirectionalLights(numDirectionalLights:number):number\n\t{\n\t\treturn Math.min(numDirectionalLights - this._directionalLightsOffset, this._maxLights);\n\t}\n\n\t/**\n\t * Calculates the amount of point lights this material will support.\n\t * @param numDirectionalLights The maximum amount of point lights to support.\n\t * @return The amount of point lights this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumPointLights(numPointLights:number):number\n\t{\n\t\tvar numFree:number = this._maxLights - this._pNumDirectionalLights;\n\t\treturn Math.min(numPointLights - this._pointLightsOffset, numFree);\n\t}\n\n\t/**\n\t * Calculates the amount of light probes this material will support.\n\t * @param numDirectionalLights The maximum amount of light probes to support.\n\t * @return The amount of light probes this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumProbes(numLightProbes:number):number\n\t{\n\t\tvar numChannels:number = 0;\n\t\t//\t\t\tif ((this._pSpecularLightSources & LightSources.PROBES) != 0)\n\t\t//\t\t\t\t++numChannels;\n\t\t//\n\t\t//\t\t\tif ((this._pDiffuseLightSources & LightSources.PROBES) != 0)\n\t\t//\t\t\t\t++numChannels;\n\n\t\t// 4 channels available\n\t\treturn Math.min(numLightProbes - this._lightProbesOffset, (4/numChannels) | 0);\n\t}\n\n\tpublic _iAddMaterialPassData(materialPassData:MaterialPassData):MaterialPassData\n\t{\n\t\tthis._materialPassData.push(materialPassData);\n\n\t\treturn materialPassData;\n\t}\n\n\tpublic _iRemoveMaterialPassData(materialPassData:MaterialPassData):MaterialPassData\n\t{\n\t\tthis._materialPassData.splice(this._materialPassData.indexOf(materialPassData), 1);\n\n\t\treturn materialPassData;\n\t}\n}\n\nexport = MaterialPassBase;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport NamedAssetBase\t\t\t\t= require(\"awayjs-core/lib/library/NamedAssetBase\");\nimport ArgumentError\t\t\t\t= require(\"awayjs-core/lib/errors/ArgumentError\");\nimport Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nimport BlendMode\t\t\t\t\t= require(\"awayjs-display/lib/base/BlendMode\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport LightPickerBase\t\t\t\t= require(\"awayjs-display/lib/materials/lightpickers/LightPickerBase\");\nimport IMaterialPass\t\t\t\t= require(\"awayjs-display/lib/materials/passes/IMaterialPass\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport IMaterialPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/IMaterialPassStageGL\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\n\n/**\n * MaterialPassBase provides an abstract base class for material shader passes. A material pass constitutes at least\n * a render call per required renderable.\n */\nclass MaterialPassBase extends NamedAssetBase implements IMaterialPass, IMaterialPassStageGL\n{\n\tprivate _materialPassData:Array = new Array();\n\tprivate _maxLights:number = 3;\n\tprivate _preserveAlpha:boolean = true;\n\tprivate _includeCasters:boolean = true;\n\tprivate _forceSeparateMVP:boolean = false;\n\n\tprivate _directionalLightsOffset:number = 0;\n\tprivate _pointLightsOffset:number = 0;\n\tprivate _lightProbesOffset:number = 0;\n\n\tpublic _pNumPointLights:number = 0;\n\tpublic _pNumDirectionalLights:number = 0;\n\tpublic _pNumLightProbes:number = 0;\n\tpublic _pNumLights:number = 0;\n\n\tprivate _passMode:number;\n\n\tprivate _depthCompareMode:string = ContextGLCompareMode.LESS_EQUAL;\n\n\tprivate _blendFactorSource:string = ContextGLBlendFactor.ONE;\n\tprivate _blendFactorDest:string = ContextGLBlendFactor.ZERO;\n\n\tpublic _pEnableBlending:boolean = false;\n\n\tpublic _pLightPicker:LightPickerBase;\n\n\tprivate _writeDepth:boolean = true;\n\tprivate _onLightsChangeDelegate:(event:Event) => void;\n\n\t/**\n\t * Indicates whether the output alpha value should remain unchanged compared to the material's original alpha.\n\t */\n\tpublic get preserveAlpha():boolean\n\t{\n\t\treturn this._preserveAlpha;\n\t}\n\n\tpublic set preserveAlpha(value:boolean)\n\t{\n\t\tif (this._preserveAlpha == value)\n\t\t\treturn;\n\n\t\tthis._preserveAlpha = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Indicates whether or not shadow casting lights need to be included.\n\t */\n\tpublic get includeCasters():boolean\n\t{\n\t\treturn this._includeCasters;\n\t}\n\n\tpublic set includeCasters(value:boolean)\n\t{\n\t\tif (this._includeCasters == value)\n\t\t\treturn;\n\n\t\tthis._includeCasters = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Indicates whether the screen projection should be calculated by forcing a separate scene matrix and\n\t * view-projection matrix. This is used to prevent rounding errors when using multiple passes with different\n\t * projection code.\n\t */\n\tpublic get forceSeparateMVP():boolean\n\t{\n\t\treturn this._forceSeparateMVP;\n\t}\n\n\tpublic set forceSeparateMVP(value:boolean)\n\t{\n\t\tif (this._forceSeparateMVP == value)\n\t\t\treturn;\n\n\t\tthis._forceSeparateMVP = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\t/**\n\t * Indicates the offset in the light picker's directional light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get directionalLightsOffset():number\n\t{\n\t\treturn this._directionalLightsOffset;\n\t}\n\n\tpublic set directionalLightsOffset(value:number)\n\t{\n\t\tthis._directionalLightsOffset = value;\n\t}\n\n\t/**\n\t * Indicates the offset in the light picker's point light vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get pointLightsOffset():number\n\t{\n\t\treturn this._pointLightsOffset;\n\t}\n\n\tpublic set pointLightsOffset(value:number)\n\t{\n\t\tthis._pointLightsOffset = value;\n\t}\n\n\t/**\n\t * Indicates the offset in the light picker's light probes vector for which to start including lights.\n\t * This needs to be set before the light picker is assigned.\n\t */\n\tpublic get lightProbesOffset():number\n\t{\n\t\treturn this._lightProbesOffset;\n\t}\n\n\tpublic set lightProbesOffset(value:number)\n\t{\n\t\tthis._lightProbesOffset = value;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get passMode():number\n\t{\n\t\treturn this._passMode;\n\t}\n\n\tpublic set passMode(value:number)\n\t{\n\t\tthis._passMode = value;\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Creates a new MaterialPassBase object.\n\t */\n\tconstructor(passMode:number = 0x03)\n\t{\n\t\tsuper();\n\n\t\tthis._passMode = passMode;\n\n\t\tthis._onLightsChangeDelegate = (event:Event) => this.onLightsChange(event);\n\t}\n\n\t/**\n\t * Factory method to create a concrete shader object for this pass.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tpublic createShaderObject(profile:string):ShaderObjectBase\n\t{\n\t\treturn new ShaderObjectBase(profile);\n\t}\n\n\t/**\n\t * Indicate whether this pass should write to the depth buffer or not. Ignored when blending is enabled.\n\t */\n\tpublic get writeDepth():boolean\n\t{\n\t\treturn this._writeDepth;\n\t}\n\n\tpublic set writeDepth(value:boolean)\n\t{\n\t\tthis._writeDepth = value;\n\t}\n\n\t/**\n\t * The depth compare mode used to render the renderables using this material.\n\t *\n\t * @see away.stagegl.ContextGLCompareMode\n\t */\n\tpublic get depthCompareMode():string\n\t{\n\t\treturn this._depthCompareMode;\n\t}\n\n\tpublic set depthCompareMode(value:string)\n\t{\n\t\tthis._depthCompareMode = value;\n\t}\n\n\t/**\n\t * Cleans up any resources used by the current object.\n\t * @param deep Indicates whether other resources should be cleaned up, that could potentially be shared across different instances.\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\twhile (this._materialPassData.length)\n\t\t\tthis._materialPassData[0].dispose();\n\n\t\tthis._materialPassData = null;\n\t}\n\n\t/**\n\t * Renders an object to the current render target.\n\t *\n\t * @private\n\t */\n\tpublic _iRender(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tthis.setRenderState(pass, renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tpass.shaderObject.setRenderState(renderable, stage, camera, viewProjection);\n\t}\n\n\t/**\n\t * The blend mode to use when drawing this renderable. The following blend modes are supported:\n\t *
    \n\t *
  • BlendMode.NORMAL: No blending, unless the material inherently needs it
  • \n\t *
  • BlendMode.LAYER: Force blending. This will draw the object the same as NORMAL, but without writing depth writes.
  • \n\t *
  • BlendMode.MULTIPLY
  • \n\t *
  • BlendMode.ADD
  • \n\t *
  • BlendMode.ALPHA
  • \n\t *
\n\t */\n\tpublic setBlendMode(value:string)\n\t{\n\t\tswitch (value) {\n\n\t\t\tcase BlendMode.NORMAL:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ONE;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._pEnableBlending = false;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.LAYER:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.MULTIPLY:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.SOURCE_COLOR;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.ADD:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.ONE;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tcase BlendMode.ALPHA:\n\n\t\t\t\tthis._blendFactorSource = ContextGLBlendFactor.ZERO;\n\t\t\t\tthis._blendFactorDest = ContextGLBlendFactor.SOURCE_ALPHA;\n\t\t\t\tthis._pEnableBlending = true;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new ArgumentError(\"Unsupported blend mode!\");\n\n\t\t}\n\t}\n\n\t/**\n\t * Sets the render state for the pass that is independent of the rendered object. This needs to be called before\n\t * calling renderPass. Before activating a pass, the previously used pass needs to be deactivated.\n\t * @param stage The Stage object which is currently used for rendering.\n\t * @param camera The camera from which the scene is viewed.\n\t * @private\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tcontext.setDepthTest(( this._writeDepth && !this._pEnableBlending ), this._depthCompareMode);\n\n\t\tif (this._pEnableBlending)\n\t\t\tcontext.setBlendFactors(this._blendFactorSource, this._blendFactorDest);\n\n\t\tcontext.activateMaterialPass(pass, stage, camera);\n\t}\n\n\t/**\n\t * Clears the render state for the pass. This needs to be called before activating another pass.\n\t * @param stage The Stage used for rendering\n\t *\n\t * @private\n\t */\n\tpublic _iDeactivate(pass:MaterialPassData, stage:Stage)\n\t{\n\t\t( stage.context).deactivateMaterialPass(pass, stage);\n\n\t\t( stage.context).setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); // TODO : imeplement\n\t}\n\n\t/**\n\t * Marks the shader program as invalid, so it will be recompiled before the next render.\n\t *\n\t * @param updateMaterial Indicates whether the invalidation should be performed on the entire material. Should always pass \"true\" unless it's called from the material itself.\n\t */\n\tpublic _pInvalidatePass()\n\t{\n\t\tvar len:number = this._materialPassData.length;\n\t\tfor (var i:number = 0; i < len; i++)\n\t\t\tthis._materialPassData[i].invalidate();\n\n\t\tthis.dispatchEvent(new Event(Event.CHANGE));\n\t}\n\n\t/**\n\t * The light picker used by the material to provide lights to the material if it supports lighting.\n\t *\n\t * @see away.materials.LightPickerBase\n\t * @see away.materials.StaticLightPicker\n\t */\n\tpublic get lightPicker():LightPickerBase\n\t{\n\t\treturn this._pLightPicker;\n\t}\n\n\tpublic set lightPicker(value:LightPickerBase)\n\t{\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.removeEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\tthis._pLightPicker = value;\n\n\t\tif (this._pLightPicker)\n\t\t\tthis._pLightPicker.addEventListener(Event.CHANGE, this._onLightsChangeDelegate);\n\n\t\tthis.pUpdateLights();\n\t}\n\n\t/**\n\t * Called when the light picker's configuration changes.\n\t */\n\tprivate onLightsChange(event:Event)\n\t{\n\t\tthis.pUpdateLights();\n\t}\n\n\t/**\n\t * Implemented by subclasses if the pass uses lights to update the shader.\n\t */\n\tpublic pUpdateLights()\n\t{\n\t\tvar numDirectionalLightsOld:number = this._pNumDirectionalLights;\n\t\tvar numPointLightsOld:number = this._pNumPointLights;\n\t\tvar numLightProbesOld:number = this._pNumLightProbes;\n\n\t\tif (this._pLightPicker && (this._passMode & MaterialPassMode.LIGHTING)) {\n\t\t\tthis._pNumDirectionalLights = this.calculateNumDirectionalLights(this._pLightPicker.numDirectionalLights);\n\t\t\tthis._pNumPointLights = this.calculateNumPointLights(this._pLightPicker.numPointLights);\n\t\t\tthis._pNumLightProbes = this.calculateNumProbes(this._pLightPicker.numLightProbes);\n\n\t\t\tif (this._includeCasters) {\n\t\t\t\tthis._pNumDirectionalLights += this._pLightPicker.numCastingDirectionalLights;\n\t\t\t\tthis._pNumPointLights += this._pLightPicker.numCastingPointLights;\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis._pNumDirectionalLights = 0;\n\t\t\tthis._pNumPointLights = 0;\n\t\t\tthis._pNumLightProbes = 0;\n\t\t}\n\n\t\tthis._pNumLights = this._pNumDirectionalLights + this._pNumPointLights;\n\n\t\tif (numDirectionalLightsOld != this._pNumDirectionalLights || numPointLightsOld != this._pNumPointLights || numLightProbesOld != this._pNumLightProbes)\n\t\t\tthis._pInvalidatePass();\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderObjectBase)\n\t{\n\t\tif (this._forceSeparateMVP)\n\t\t\tshaderObject.globalPosDependencies++;\n\n\t\tshaderObject.outputsNormals = this._pOutputsNormals(shaderObject);\n\t\tshaderObject.outputsTangentNormals = shaderObject.outputsNormals && this._pOutputsTangentNormals(shaderObject);\n\t\tshaderObject.usesTangentSpace = shaderObject.outputsTangentNormals && this._pUsesTangentSpace(shaderObject);\n\n\t\tif (!shaderObject.usesTangentSpace)\n\t\t\tshaderObject.addWorldSpaceDependencies(Boolean(this._passMode & MaterialPassMode.EFFECTS));\n\t}\n\n\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\n\t}\n\n\tpublic _iGetPreLightingVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetPreLightingFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetNormalVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\tpublic _iGetNormalFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * The amount of point lights that need to be supported.\n\t */\n\tpublic get iNumPointLights():number\n\t{\n\t\treturn this._pNumPointLights;\n\t}\n\n\t/**\n\t * The amount of directional lights that need to be supported.\n\t */\n\tpublic get iNumDirectionalLights():number\n\t{\n\t\treturn this._pNumDirectionalLights;\n\t}\n\n\t/**\n\t * The amount of light probes that need to be supported.\n\t */\n\tpublic get iNumLightProbes():number\n\t{\n\t\treturn this._pNumLightProbes;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are calculated at all.\n\t */\n\tpublic _pOutputsNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are calculated in tangent space.\n\t */\n\tpublic _pOutputsTangentNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space\n\t * dependencies exist.\n\t */\n\tpublic _pUsesTangentSpace(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn false;\n\t}\n\n\t/**\n\t * Calculates the amount of directional lights this material will support.\n\t * @param numDirectionalLights The maximum amount of directional lights to support.\n\t * @return The amount of directional lights this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumDirectionalLights(numDirectionalLights:number):number\n\t{\n\t\treturn Math.min(numDirectionalLights - this._directionalLightsOffset, this._maxLights);\n\t}\n\n\t/**\n\t * Calculates the amount of point lights this material will support.\n\t * @param numDirectionalLights The maximum amount of point lights to support.\n\t * @return The amount of point lights this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumPointLights(numPointLights:number):number\n\t{\n\t\tvar numFree:number = this._maxLights - this._pNumDirectionalLights;\n\t\treturn Math.min(numPointLights - this._pointLightsOffset, numFree);\n\t}\n\n\t/**\n\t * Calculates the amount of light probes this material will support.\n\t * @param numDirectionalLights The maximum amount of light probes to support.\n\t * @return The amount of light probes this material will support, bounded by the amount necessary.\n\t */\n\tprivate calculateNumProbes(numLightProbes:number):number\n\t{\n\t\tvar numChannels:number = 0;\n\t\t//\t\t\tif ((this._pSpecularLightSources & LightSources.PROBES) != 0)\n\t\t//\t\t\t\t++numChannels;\n\t\t//\n\t\t//\t\t\tif ((this._pDiffuseLightSources & LightSources.PROBES) != 0)\n\t\t//\t\t\t\t++numChannels;\n\n\t\t// 4 channels available\n\t\treturn Math.min(numLightProbes - this._lightProbesOffset, (4/numChannels) | 0);\n\t}\n\n\tpublic _iAddMaterialPassData(materialPassData:MaterialPassData):MaterialPassData\n\t{\n\t\tthis._materialPassData.push(materialPassData);\n\n\t\treturn materialPassData;\n\t}\n\n\tpublic _iRemoveMaterialPassData(materialPassData:MaterialPassData):MaterialPassData\n\t{\n\t\tthis._materialPassData.splice(this._materialPassData.indexOf(materialPassData), 1);\n\n\t\treturn materialPassData;\n\t}\n}\n\nexport = MaterialPassBase;", "class MaterialPassMode\n{\n\tpublic static EFFECTS:number = 0x01\n\t/**\n\t *\n\t */\n\tpublic static LIGHTING:number = 0x02;\n\t/**\n\t *\n\t */\n\tpublic static SUPER_SHADER:number = 0x03;\n}\n\nexport = MaterialPassMode;", "import ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n/**\n * SkyboxPass provides a material pass exclusively used to render sky boxes from a cube texture.\n */\nclass SkyboxPass extends MaterialPassBase\n{\n\t/**\n\t * Creates a new SkyboxPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderLightingObject)\n\t{\n\t\tshaderObject.useMipmapping = false;\n\t}\n}\n\nexport = SkyboxPass;", - "import Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/core/stagegl/IContextStageGL\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleBasicPass extends MaterialPassBase\n{\n\tprivate _diffuseColor:number = 0xffffff;\n\tprivate _diffuseR:number = 1;\n\tprivate _diffuseG:number = 1;\n\tprivate _diffuseB:number = 1;\n\tprivate _diffuseA:number = 1;\n\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * The alpha component of the diffuse reflection.\n\t */\n\tpublic get diffuseAlpha():number\n\t{\n\t\treturn this._diffuseA;\n\t}\n\n\tpublic set diffuseAlpha(value:number)\n\t{\n\t\tthis._diffuseA = value;\n\t}\n\n\t/**\n\t * The color of the diffuse reflection when not using a texture.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseColor;\n\t}\n\n\tpublic set diffuseColor(diffuseColor:number)\n\t{\n\t\tthis._diffuseColor = diffuseColor;\n\n\t\tthis._diffuseR = ((this._diffuseColor >> 16) & 0xff)/0xff;\n\t\tthis._diffuseG = ((this._diffuseColor >> 8) & 0xff)/0xff;\n\t\tthis._diffuseB = (this._diffuseColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * Creates a new CompiledPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar targetReg:ShaderRegisterElement = sharedReg.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement;\n\n\t\tif (shaderObject.texture != null) {\n\t\t\tdiffuseInputReg = regCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedReg, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\t\tvar cutOffReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\t\t\tthis._fragmentConstantsIndex = cutOffReg.index*4;\n\n\t\t\t\tcode += \"sub \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\t\"kil \" + targetReg + \".w\\n\" +\n\t\t\t\t\t\"add \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\";\n\t\t\t}\n\n\t\t} else {\n\t\t\tdiffuseInputReg = regCache.getFreeFragmentConstant();\n\n\t\t\tthis._fragmentConstantsIndex = diffuseInputReg.index*4;\n\n\t\t\tcode += \"mov \" + targetReg + \", \" + diffuseInputReg + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\tpublic _iIncludeDependencies(dependencyCounter:ShaderObjectBase)\n\t{\n\t\tif (dependencyCounter.texture != null)\n\t\t\tdependencyCounter.uvDependencies++;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.texture != null) {\n\t\t\t( stage.context).setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\t\tshaderObject.fragmentConstantData[this._fragmentConstantsIndex] = shaderObject.alphaThreshold;\n\t\t} else {\n\t\t\tvar index:number = this._fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = this._diffuseR;\n\t\t\tdata[index + 1] = this._diffuseG;\n\t\t\tdata[index + 2] = this._diffuseB;\n\t\t\tdata[index + 3] = this._diffuseA;\n\t\t}\n\t}\n}\n\nexport = TriangleBasicPass;", - "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\nimport Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/core/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/core/pool/RenderableBase\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport AmbientBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod\");\nimport DiffuseBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod\");\nimport EffectColorTransformMethod\t= require(\"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport NormalBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/NormalBasicMethod\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\nimport SpecularBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleMethodPass extends MaterialPassBase implements ILightingPassStageGL\n{\n\tpublic _iColorTransformMethodVO:MethodVO;\n\tpublic _iNormalMethodVO:MethodVO;\n\tpublic _iAmbientMethodVO:MethodVO;\n\tpublic _iShadowMethodVO:MethodVO;\n\tpublic _iDiffuseMethodVO:MethodVO;\n\tpublic _iSpecularMethodVO:MethodVO;\n\tpublic _iMethodVOs:Array = new Array();\n\n\tpublic _numEffectDependencies:number = 0;\n\n\tprivate _onShaderInvalidatedDelegate:(event:ShadingMethodEvent) => void;\n\n\t/**\n\t * Creates a new CompiledPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor(passMode:number = 0x03)\n\t{\n\t\tsuper(passMode);\n\n\t\tthis._onShaderInvalidatedDelegate = (event:ShadingMethodEvent) => this.onShaderInvalidated(event);\n\t}\n\n\t/**\n\t * Factory method to create a concrete shader object for this pass.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tpublic createShaderObject(profile:string):ShaderObjectBase\n\t{\n\t\tif (this._pLightPicker && (this.passMode & MaterialPassMode.LIGHTING))\n\t\t\treturn new ShaderLightingObject(profile);\n\n\t\treturn new ShaderObjectBase(profile);\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\t//Updates method constants if they have changed.\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\tthis._iMethodVOs[i].method.iInitConstants(shaderObject, this._iMethodVOs[i]);\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this.colorTransformMethod? this.colorTransformMethod.colorTransform : null;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tif (value) {\n\t\t\tif (this.colorTransformMethod == null)\n\t\t\t\tthis.colorTransformMethod = new EffectColorTransformMethod();\n\n\t\t\tthis.colorTransformMethod.colorTransform = value;\n\n\t\t} else if (!value) {\n\t\t\tif (this.colorTransformMethod)\n\t\t\t\tthis.colorTransformMethod = null;\n\t\t}\n\t}\n\n\t/**\n\t * The EffectColorTransformMethod object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransformMethod():EffectColorTransformMethod\n\t{\n\t\treturn this._iColorTransformMethodVO? this._iColorTransformMethodVO.method : null;\n\t}\n\n\tpublic set colorTransformMethod(value:EffectColorTransformMethod)\n\t{\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iColorTransformMethodVO) {\n\t\t\tthis._removeDependency(this._iColorTransformMethodVO);\n\t\t\tthis._iColorTransformMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iColorTransformMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iColorTransformMethodVO);\n\t\t}\n\t}\n\n\tprivate _removeDependency(methodVO:MethodVO, effectsDependency:boolean = false)\n\t{\n\t\tvar index:number = this._iMethodVOs.indexOf(methodVO);\n\n\t\tif (!effectsDependency)\n\t\t\tthis._numEffectDependencies--;\n\n\t\tmethodVO.method.removeEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate);\n\t\tthis._iMethodVOs.splice(index, 1);\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\tprivate _addDependency(methodVO:MethodVO, effectsDependency:boolean = false, index:number = -1)\n\t{\n\t\tmethodVO.method.addEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate);\n\n\t\tif (effectsDependency) {\n\t\t\tif (index != -1)\n\t\t\t\tthis._iMethodVOs.splice(index + this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO);\n\t\t\telse\n\t\t\t\tthis._iMethodVOs.push(methodVO);\n\t\t\tthis._numEffectDependencies++;\n\t\t} else {\n\t\t\tthis._iMethodVOs.splice(this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO);\n\t\t}\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Appends an \"effect\" shading method to the shader. Effect methods are those that do not influence the lighting\n\t * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the\n\t * methods added prior.\n\t */\n\tpublic addEffectMethod(method:EffectMethodBase)\n\t{\n\t\tthis._addDependency(new MethodVO(method), true);\n\t}\n\n\t/**\n\t * The number of \"effect\" methods added to the material.\n\t */\n\tpublic get numEffectMethods():number\n\t{\n\t\treturn this._numEffectDependencies;\n\t}\n\n\t/**\n\t * Queries whether a given effects method was added to the material.\n\t *\n\t * @param method The method to be queried.\n\t * @return true if the method was added to the material, false otherwise.\n\t */\n\tpublic hasEffectMethod(method:EffectMethodBase):boolean\n\t{\n\t\treturn this.getDependencyForMethod(method) != null;\n\t}\n\n\t/**\n\t * Returns the method added at the given index.\n\t * @param index The index of the method to retrieve.\n\t * @return The method at the given index.\n\t */\n\tpublic getEffectMethodAt(index:number):EffectMethodBase\n\t{\n\t\tif (index < 0 || index > this._numEffectDependencies - 1)\n\t\t\treturn null;\n\n\t\treturn this._iMethodVOs[index + this._iMethodVOs.length - this._numEffectDependencies].method;\n\t}\n\n\t/**\n\t * Adds an effect method at the specified index amongst the methods already added to the material. Effect\n\t * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines,\n\t * etc. The method will be applied to the result of the methods with a lower index.\n\t */\n\tpublic addEffectMethodAt(method:EffectMethodBase, index:number)\n\t{\n\t\tthis._addDependency(new MethodVO(method), true, index);\n\t}\n\n\t/**\n\t * Removes an effect method from the material.\n\t * @param method The method to be removed.\n\t */\n\tpublic removeEffectMethod(method:EffectMethodBase)\n\t{\n\t\tvar methodVO:MethodVO = this.getDependencyForMethod(method);\n\n\t\tif (methodVO != null)\n\t\t\tthis._removeDependency(methodVO, true);\n\t}\n\n\n\tprivate getDependencyForMethod(method:EffectMethodBase):MethodVO\n\t{\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\tif (this._iMethodVOs[i].method == method)\n\t\t\t\treturn this._iMethodVOs[i];\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod.\n\t */\n\tpublic get normalMethod():NormalBasicMethod\n\t{\n\t\treturn this._iNormalMethodVO? this._iNormalMethodVO.method : null;\n\t}\n\n\tpublic set normalMethod(value:NormalBasicMethod)\n\t{\n\t\tif (this._iNormalMethodVO && this._iNormalMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iNormalMethodVO) {\n\t\t\tthis._removeDependency(this._iNormalMethodVO);\n\t\t\tthis._iNormalMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iNormalMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iNormalMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod.\n\t */\n\tpublic get ambientMethod():AmbientBasicMethod\n\t{\n\t\treturn this._iAmbientMethodVO? this._iAmbientMethodVO.method : null;\n\t}\n\n\tpublic set ambientMethod(value:AmbientBasicMethod)\n\t{\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iAmbientMethodVO) {\n\t\t\tthis._removeDependency(this._iAmbientMethodVO);\n\t\t\tthis._iAmbientMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iAmbientMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iAmbientMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null.\n\t */\n\tpublic get shadowMethod():ShadowMapMethodBase\n\t{\n\t\treturn this._iShadowMethodVO? this._iShadowMethodVO.method : null;\n\t}\n\n\tpublic set shadowMethod(value:ShadowMapMethodBase)\n\t{\n\t\tif (this._iShadowMethodVO && this._iShadowMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iShadowMethodVO) {\n\t\t\tthis._removeDependency(this._iShadowMethodVO);\n\t\t\tthis._iShadowMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iShadowMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iShadowMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod.\n\t */\n\tpublic get diffuseMethod():DiffuseBasicMethod\n\t{\n\t\treturn this._iDiffuseMethodVO? this._iDiffuseMethodVO.method : null;\n\t}\n\n\tpublic set diffuseMethod(value:DiffuseBasicMethod)\n\t{\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iDiffuseMethodVO) {\n\t\t\tthis._removeDependency(this._iDiffuseMethodVO);\n\t\t\tthis._iDiffuseMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iDiffuseMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iDiffuseMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod.\n\t */\n\tpublic get specularMethod():SpecularBasicMethod\n\t{\n\t\treturn this._iSpecularMethodVO? this._iSpecularMethodVO.method : null;\n\t}\n\n\tpublic set specularMethod(value:SpecularBasicMethod)\n\t{\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iSpecularMethodVO) {\n\t\t\tthis._removeDependency(this._iSpecularMethodVO);\n\t\t\tthis._iSpecularMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iSpecularMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iSpecularMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tsuper.dispose();\n\n\t\twhile (this._iMethodVOs.length)\n\t\t\tthis._removeDependency(this._iMethodVOs[0]);\n\n\t\tthis._iMethodVOs = null;\n\t}\n\n\t/**\n\t * Called when any method's shader code is invalidated.\n\t */\n\tprivate onShaderInvalidated(event:ShadingMethodEvent)\n\t{\n\t\tthis._pInvalidatePass();\n\t}\n\n\t// RENDER LOOP\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iActivate(pass.shaderObject, methodVO, stage);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper.setRenderState(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iSetRenderState(pass.shaderObject, methodVO, renderable, stage, camera);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iDeactivate(pass:MaterialPassData, stage:Stage)\n\t{\n\t\tsuper._iDeactivate(pass, stage);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iDeactivate(pass.shaderObject, methodVO, stage);\n\t\t}\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderLightingObject)\n\t{\n\t\tvar i:number;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis.setupAndCountDependencies(shaderObject, this._iMethodVOs[i]);\n\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis._iMethodVOs[i].useMethod = this._iMethodVOs[i].method.iIsUsed(shaderObject);\n\n\t\tsuper._iIncludeDependencies(shaderObject);\n\t}\n\n\n\t/**\n\t * Counts the dependencies for a given method.\n\t * @param method The method to count the dependencies for.\n\t * @param methodVO The method's data for this material.\n\t */\n\tprivate setupAndCountDependencies(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.reset();\n\n\t\tmethodVO.method.iInitVO(shaderObject, methodVO);\n\n\t\tif (methodVO.needsProjection)\n\t\t\tshaderObject.projectionDependencies++;\n\n\t\tif (methodVO.needsGlobalVertexPos) {\n\n\t\t\tshaderObject.globalPosDependencies++;\n\n\t\t\tif (methodVO.needsGlobalFragmentPos)\n\t\t\t\tshaderObject.usesGlobalPosFragment = true;\n\n\t\t} else if (methodVO.needsGlobalFragmentPos) {\n\t\t\tshaderObject.globalPosDependencies++;\n\t\t\tshaderObject.usesGlobalPosFragment = true;\n\t\t}\n\n\t\tif (methodVO.needsNormals)\n\t\t\tshaderObject.normalDependencies++;\n\n\t\tif (methodVO.needsTangents)\n\t\t\tshaderObject.tangentDependencies++;\n\n\t\tif (methodVO.needsView)\n\t\t\tshaderObject.viewDirDependencies++;\n\n\t\tif (methodVO.needsUV)\n\t\t\tshaderObject.uvDependencies++;\n\n\t\tif (methodVO.needsSecondaryUV)\n\t\t\tshaderObject.secondaryUVDependencies++;\n\t}\n\n\tpublic _iGetPreLightingVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod)\n\t\t\tcode += this._iAmbientMethodVO.method.iGetVertexCode(shaderObject, this._iAmbientMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod)\n\t\t\tcode += this._iDiffuseMethodVO.method.iGetVertexCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod)\n\t\t\tcode += this._iSpecularMethodVO.method.iGetVertexCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPreLightingFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) {\n\t\t\tcode += this._iAmbientMethodVO.method.iGetFragmentCode(shaderObject, this._iAmbientMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\n\t\t\tif (this._iAmbientMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\n\t\t\tif (this._iAmbientMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod)\n\t\t\tcode += ( this._iDiffuseMethodVO.method).iGetFragmentPreLightingCode( shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod)\n\t\t\tcode += ( this._iSpecularMethodVO.method).iGetFragmentPreLightingCode( shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPerLightDiffuseFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, diffuseColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iDiffuseMethodVO.method).iGetFragmentCodePerLight(shaderObject, this._iDiffuseMethodVO, lightDirReg, diffuseColorReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerLightSpecularFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, specularColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iSpecularMethodVO.method).iGetFragmentCodePerLight(shaderObject, this._iSpecularMethodVO, lightDirReg, specularColorReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerProbeDiffuseFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iDiffuseMethodVO.method).iGetFragmentCodePerProbe(shaderObject, this._iDiffuseMethodVO, texReg, weightReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerProbeSpecularFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iSpecularMethodVO.method).iGetFragmentCodePerProbe(shaderObject, this._iSpecularMethodVO, texReg, weightReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPostLightingVertexCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tcode += this._iShadowMethodVO.method.iGetVertexCode(shaderObject, this._iShadowMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPostLightingFragmentCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (shaderObject.useAlphaPremultiplied && this._pEnableBlending) {\n\t\t\tcode += \"add \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.commons + \".z\\n\" +\n\t\t\t\t\"div \" + sharedRegisters.shadedTarget + \".xyz, \" + sharedRegisters.shadedTarget + \", \" + sharedRegisters.shadedTarget + \".w\\n\" +\n\t\t\t\t\"sub \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.commons + \".z\\n\" +\n\t\t\t\t\"sat \" + sharedRegisters.shadedTarget + \".xyz, \" + sharedRegisters.shadedTarget + \"\\n\";\n\t\t}\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tcode += this._iShadowMethodVO.method.iGetFragmentCode(shaderObject, this._iShadowMethodVO, sharedRegisters.shadowTarget, registerCache, sharedRegisters);\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) {\n\t\t\tcode += ( this._iDiffuseMethodVO.method).iGetFragmentPostLightingCode(shaderObject, this._iDiffuseMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\n\t\t\t// resolve other dependencies as well?\n\t\t\tif (this._iDiffuseMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\n\t\t\tif (this._iDiffuseMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) {\n\t\t\tcode += ( this._iSpecularMethodVO.method).iGetFragmentPostLightingCode(shaderObject, this._iSpecularMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\t\t\tif (this._iSpecularMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\t\t\tif (this._iSpecularMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.shadowTarget);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space\n\t * dependencies exist.\n\t */\n\tpublic _pUsesTangentSpace(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (shaderObject.usesProbes)\n\t\t\treturn false;\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod && !methodVO.method.iUsesTangentSpace())\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are output in tangent space.\n\t */\n\tpublic _pOutputsTangentNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn ( this._iNormalMethodVO.method).iOutputsTangentNormals();\n\t}\n\n\t/**\n\t * Indicates whether or not normals are output by the pass.\n\t */\n\tpublic _pOutputsNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn this._iNormalMethodVO && this._iNormalMethodVO.useMethod;\n\t}\n\n\n\tpublic _iGetNormalVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn this._iNormalMethodVO.method.iGetVertexCode(shaderObject, this._iNormalMethodVO, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetNormalFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = this._iNormalMethodVO.method.iGetFragmentCode(shaderObject, this._iNormalMethodVO, sharedRegisters.normalFragment, registerCache, sharedRegisters);\n\n\t\tif (this._iNormalMethodVO.needsView)\n\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\n\t\tif (this._iNormalMethodVO.needsGlobalFragmentPos || this._iNormalMethodVO.needsGlobalVertexPos)\n\t\t\tregisterCache.removeVertexTempUsage(sharedRegisters.globalPositionVertex);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = len - this._numEffectDependencies; i < len; i++) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod) {\n\t\t\t\tcode += methodVO.method.iGetVertexCode(shaderObject, methodVO, regCache, sharedReg);\n\n\t\t\t\tif (methodVO.needsGlobalVertexPos || methodVO.needsGlobalFragmentPos)\n\t\t\t\t\tregCache.removeVertexTempUsage(sharedReg.globalPositionVertex);\n\t\t\t}\n\t\t}\n\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod)\n\t\t\tcode += this._iColorTransformMethodVO.method.iGetVertexCode(shaderObject, this._iColorTransformMethodVO, regCache, sharedReg);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar alphaReg:ShaderRegisterElement;\n\n\t\tif (this.preserveAlpha && this._numEffectDependencies > 0) {\n\t\t\talphaReg = regCache.getFreeFragmentSingleTemp();\n\t\t\tregCache.addFragmentTempUsages(alphaReg, 1);\n\t\t\tcode += \"mov \" + alphaReg + \", \" + sharedReg.shadedTarget + \".w\\n\";\n\t\t}\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = len - this._numEffectDependencies; i < len; i++) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod) {\n\t\t\t\tcode += methodVO.method.iGetFragmentCode(shaderObject, methodVO, sharedReg.shadedTarget, regCache, sharedReg);\n\n\t\t\t\tif (methodVO.needsNormals)\n\t\t\t\t\tregCache.removeFragmentTempUsage(sharedReg.normalFragment);\n\n\t\t\t\tif (methodVO.needsView)\n\t\t\t\t\tregCache.removeFragmentTempUsage(sharedReg.viewDirFragment);\n\n\t\t\t}\n\t\t}\n\n\t\tif (this.preserveAlpha && this._numEffectDependencies > 0) {\n\t\t\tcode += \"mov \" + sharedReg.shadedTarget + \".w, \" + alphaReg + \"\\n\";\n\t\t\tregCache.removeFragmentTempUsage(alphaReg);\n\t\t}\n\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod)\n\t\t\tcode += this._iColorTransformMethodVO.method.iGetFragmentCode(shaderObject, this._iColorTransformMethodVO, sharedReg.shadedTarget, regCache, sharedReg);\n\n\t\treturn code;\n\t}\n\t/**\n\t * Indicates whether the shader uses any shadows.\n\t */\n\tpublic _iUsesShadows():boolean\n\t{\n\t\treturn Boolean(this._iShadowMethodVO || this.lightPicker.castingDirectionalLights.length > 0 || this.lightPicker.castingPointLights.length > 0);\n\t}\n\n\t/**\n\t * Indicates whether the shader uses any specular component.\n\t */\n\tpublic _iUsesSpecular():boolean\n\t{\n\t\treturn Boolean(this._iSpecularMethodVO);\n\t}\n}\n\nexport = TriangleMethodPass;", + "import Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport ContextGLMipFilter\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLMipFilter\");\nimport ContextGLTextureFilter\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFilter\");\nimport ContextGLWrapMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLWrapMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport ShaderCompilerHelper\t\t\t= require(\"awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleBasicPass extends MaterialPassBase\n{\n\tprivate _diffuseColor:number = 0xffffff;\n\tprivate _diffuseR:number = 1;\n\tprivate _diffuseG:number = 1;\n\tprivate _diffuseB:number = 1;\n\tprivate _diffuseA:number = 1;\n\n\tprivate _fragmentConstantsIndex:number;\n\tprivate _texturesIndex:number;\n\n\t/**\n\t * The alpha component of the diffuse reflection.\n\t */\n\tpublic get diffuseAlpha():number\n\t{\n\t\treturn this._diffuseA;\n\t}\n\n\tpublic set diffuseAlpha(value:number)\n\t{\n\t\tthis._diffuseA = value;\n\t}\n\n\t/**\n\t * The color of the diffuse reflection when not using a texture.\n\t */\n\tpublic get diffuseColor():number\n\t{\n\t\treturn this._diffuseColor;\n\t}\n\n\tpublic set diffuseColor(diffuseColor:number)\n\t{\n\t\tthis._diffuseColor = diffuseColor;\n\n\t\tthis._diffuseR = ((this._diffuseColor >> 16) & 0xff)/0xff;\n\t\tthis._diffuseG = ((this._diffuseColor >> 8) & 0xff)/0xff;\n\t\tthis._diffuseB = (this._diffuseColor & 0xff)/0xff;\n\t}\n\n\t/**\n\t * Creates a new CompiledPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar targetReg:ShaderRegisterElement = sharedReg.shadedTarget;\n\t\tvar diffuseInputReg:ShaderRegisterElement;\n\n\t\tif (shaderObject.texture != null) {\n\t\t\tdiffuseInputReg = regCache.getFreeTextureReg();\n\n\t\t\tthis._texturesIndex = diffuseInputReg.index;\n\n\t\t\tcode += ShaderCompilerHelper.getTex2DSampleCode(targetReg, sharedReg, diffuseInputReg, shaderObject.texture, shaderObject.useSmoothTextures, shaderObject.repeatTextures, shaderObject.useMipmapping);\n\n\t\t\tif (shaderObject.alphaThreshold > 0) {\n\t\t\t\tvar cutOffReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();\n\t\t\t\tthis._fragmentConstantsIndex = cutOffReg.index*4;\n\n\t\t\t\tcode += \"sub \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\" +\n\t\t\t\t\t\"kil \" + targetReg + \".w\\n\" +\n\t\t\t\t\t\"add \" + targetReg + \".w, \" + targetReg + \".w, \" + cutOffReg + \".x\\n\";\n\t\t\t}\n\n\t\t} else {\n\t\t\tdiffuseInputReg = regCache.getFreeFragmentConstant();\n\n\t\t\tthis._fragmentConstantsIndex = diffuseInputReg.index*4;\n\n\t\t\tcode += \"mov \" + targetReg + \", \" + diffuseInputReg + \"\\n\";\n\t\t}\n\n\t\treturn code;\n\t}\n\n\tpublic _iIncludeDependencies(dependencyCounter:ShaderObjectBase)\n\t{\n\t\tif (dependencyCounter.texture != null)\n\t\t\tdependencyCounter.uvDependencies++;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar shaderObject:ShaderObjectBase = pass.shaderObject;\n\n\t\tif (shaderObject.texture != null) {\n\t\t\t( stage.context).setSamplerStateAt(this._texturesIndex, shaderObject.repeatTextures? ContextGLWrapMode.REPEAT:ContextGLWrapMode.CLAMP, shaderObject.useSmoothTextures? ContextGLTextureFilter.LINEAR : ContextGLTextureFilter.NEAREST, shaderObject.useMipmapping? ContextGLMipFilter.MIPLINEAR : ContextGLMipFilter.MIPNONE);\n\t\t\t( stage.context).activateTexture(this._texturesIndex, shaderObject.texture);\n\n\t\t\tif (shaderObject.alphaThreshold > 0)\n\t\t\t\tshaderObject.fragmentConstantData[this._fragmentConstantsIndex] = shaderObject.alphaThreshold;\n\t\t} else {\n\t\t\tvar index:number = this._fragmentConstantsIndex;\n\t\t\tvar data:Array = shaderObject.fragmentConstantData;\n\t\t\tdata[index] = this._diffuseR;\n\t\t\tdata[index + 1] = this._diffuseG;\n\t\t\tdata[index + 2] = this._diffuseB;\n\t\t\tdata[index + 3] = this._diffuseA;\n\t\t}\n\t}\n}\n\nexport = TriangleBasicPass;", + "import ColorTransform\t\t\t\t= require(\"awayjs-core/lib/geom/ColorTransform\");\nimport Matrix\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Matrix3DUtils\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3DUtils\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport Texture2DBase\t\t\t\t= require(\"awayjs-core/lib/textures/Texture2DBase\");\n\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ShadingMethodEvent\t\t\t= require(\"awayjs-stagegl/lib/events/ShadingMethodEvent\");\nimport MethodVO\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/MethodVO\");\nimport ShaderLightingObject\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderLightingObject\");\nimport ShaderObjectBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderObjectBase\");\nimport ShaderRegisterCache\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\nimport AmbientBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/AmbientBasicMethod\");\nimport DiffuseBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod\");\nimport EffectColorTransformMethod\t= require(\"awayjs-stagegl/lib/materials/methods/EffectColorTransformMethod\");\nimport EffectMethodBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/EffectMethodBase\");\nimport LightingMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/LightingMethodBase\");\nimport NormalBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/NormalBasicMethod\");\nimport ShadowMapMethodBase\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/ShadowMapMethodBase\");\nimport SpecularBasicMethod\t\t\t= require(\"awayjs-stagegl/lib/materials/methods/SpecularBasicMethod\");\nimport ILightingPassStageGL\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/ILightingPassStageGL\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\nimport MaterialPassMode\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassMode\");\n\n/**\n * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D,\n * using material methods to define their appearance.\n */\nclass TriangleMethodPass extends MaterialPassBase implements ILightingPassStageGL\n{\n\tpublic _iColorTransformMethodVO:MethodVO;\n\tpublic _iNormalMethodVO:MethodVO;\n\tpublic _iAmbientMethodVO:MethodVO;\n\tpublic _iShadowMethodVO:MethodVO;\n\tpublic _iDiffuseMethodVO:MethodVO;\n\tpublic _iSpecularMethodVO:MethodVO;\n\tpublic _iMethodVOs:Array = new Array();\n\n\tpublic _numEffectDependencies:number = 0;\n\n\tprivate _onShaderInvalidatedDelegate:(event:ShadingMethodEvent) => void;\n\n\t/**\n\t * Creates a new CompiledPass object.\n\t *\n\t * @param material The material to which this pass belongs.\n\t */\n\tconstructor(passMode:number = 0x03)\n\t{\n\t\tsuper(passMode);\n\n\t\tthis._onShaderInvalidatedDelegate = (event:ShadingMethodEvent) => this.onShaderInvalidated(event);\n\t}\n\n\t/**\n\t * Factory method to create a concrete shader object for this pass.\n\t *\n\t * @param profile The compatibility profile used by the renderer.\n\t */\n\tpublic createShaderObject(profile:string):ShaderObjectBase\n\t{\n\t\tif (this._pLightPicker && (this.passMode & MaterialPassMode.LIGHTING))\n\t\t\treturn new ShaderLightingObject(profile);\n\n\t\treturn new ShaderObjectBase(profile);\n\t}\n\n\t/**\n\t * Initializes the unchanging constant data for this material.\n\t */\n\tpublic _iInitConstantData(shaderObject:ShaderObjectBase)\n\t{\n\t\tsuper._iInitConstantData(shaderObject);\n\n\t\t//Updates method constants if they have changed.\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\tthis._iMethodVOs[i].method.iInitConstants(shaderObject, this._iMethodVOs[i]);\n\t}\n\n\t/**\n\t * The ColorTransform object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransform():ColorTransform\n\t{\n\t\treturn this.colorTransformMethod? this.colorTransformMethod.colorTransform : null;\n\t}\n\n\tpublic set colorTransform(value:ColorTransform)\n\t{\n\t\tif (value) {\n\t\t\tif (this.colorTransformMethod == null)\n\t\t\t\tthis.colorTransformMethod = new EffectColorTransformMethod();\n\n\t\t\tthis.colorTransformMethod.colorTransform = value;\n\n\t\t} else if (!value) {\n\t\t\tif (this.colorTransformMethod)\n\t\t\t\tthis.colorTransformMethod = null;\n\t\t}\n\t}\n\n\t/**\n\t * The EffectColorTransformMethod object to transform the colour of the material with. Defaults to null.\n\t */\n\tpublic get colorTransformMethod():EffectColorTransformMethod\n\t{\n\t\treturn this._iColorTransformMethodVO? this._iColorTransformMethodVO.method : null;\n\t}\n\n\tpublic set colorTransformMethod(value:EffectColorTransformMethod)\n\t{\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iColorTransformMethodVO) {\n\t\t\tthis._removeDependency(this._iColorTransformMethodVO);\n\t\t\tthis._iColorTransformMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iColorTransformMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iColorTransformMethodVO);\n\t\t}\n\t}\n\n\tprivate _removeDependency(methodVO:MethodVO, effectsDependency:boolean = false)\n\t{\n\t\tvar index:number = this._iMethodVOs.indexOf(methodVO);\n\n\t\tif (!effectsDependency)\n\t\t\tthis._numEffectDependencies--;\n\n\t\tmethodVO.method.removeEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate);\n\t\tthis._iMethodVOs.splice(index, 1);\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\tprivate _addDependency(methodVO:MethodVO, effectsDependency:boolean = false, index:number = -1)\n\t{\n\t\tmethodVO.method.addEventListener(ShadingMethodEvent.SHADER_INVALIDATED, this._onShaderInvalidatedDelegate);\n\n\t\tif (effectsDependency) {\n\t\t\tif (index != -1)\n\t\t\t\tthis._iMethodVOs.splice(index + this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO);\n\t\t\telse\n\t\t\t\tthis._iMethodVOs.push(methodVO);\n\t\t\tthis._numEffectDependencies++;\n\t\t} else {\n\t\t\tthis._iMethodVOs.splice(this._iMethodVOs.length - this._numEffectDependencies, 0, methodVO);\n\t\t}\n\n\t\tthis._pInvalidatePass();\n\t}\n\n\t/**\n\t * Appends an \"effect\" shading method to the shader. Effect methods are those that do not influence the lighting\n\t * but modulate the shaded colour, used for fog, outlines, etc. The method will be applied to the result of the\n\t * methods added prior.\n\t */\n\tpublic addEffectMethod(method:EffectMethodBase)\n\t{\n\t\tthis._addDependency(new MethodVO(method), true);\n\t}\n\n\t/**\n\t * The number of \"effect\" methods added to the material.\n\t */\n\tpublic get numEffectMethods():number\n\t{\n\t\treturn this._numEffectDependencies;\n\t}\n\n\t/**\n\t * Queries whether a given effects method was added to the material.\n\t *\n\t * @param method The method to be queried.\n\t * @return true if the method was added to the material, false otherwise.\n\t */\n\tpublic hasEffectMethod(method:EffectMethodBase):boolean\n\t{\n\t\treturn this.getDependencyForMethod(method) != null;\n\t}\n\n\t/**\n\t * Returns the method added at the given index.\n\t * @param index The index of the method to retrieve.\n\t * @return The method at the given index.\n\t */\n\tpublic getEffectMethodAt(index:number):EffectMethodBase\n\t{\n\t\tif (index < 0 || index > this._numEffectDependencies - 1)\n\t\t\treturn null;\n\n\t\treturn this._iMethodVOs[index + this._iMethodVOs.length - this._numEffectDependencies].method;\n\t}\n\n\t/**\n\t * Adds an effect method at the specified index amongst the methods already added to the material. Effect\n\t * methods are those that do not influence the lighting but modulate the shaded colour, used for fog, outlines,\n\t * etc. The method will be applied to the result of the methods with a lower index.\n\t */\n\tpublic addEffectMethodAt(method:EffectMethodBase, index:number)\n\t{\n\t\tthis._addDependency(new MethodVO(method), true, index);\n\t}\n\n\t/**\n\t * Removes an effect method from the material.\n\t * @param method The method to be removed.\n\t */\n\tpublic removeEffectMethod(method:EffectMethodBase)\n\t{\n\t\tvar methodVO:MethodVO = this.getDependencyForMethod(method);\n\n\t\tif (methodVO != null)\n\t\t\tthis._removeDependency(methodVO, true);\n\t}\n\n\n\tprivate getDependencyForMethod(method:EffectMethodBase):MethodVO\n\t{\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i)\n\t\t\tif (this._iMethodVOs[i].method == method)\n\t\t\t\treturn this._iMethodVOs[i];\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * The method used to generate the per-pixel normals. Defaults to NormalBasicMethod.\n\t */\n\tpublic get normalMethod():NormalBasicMethod\n\t{\n\t\treturn this._iNormalMethodVO? this._iNormalMethodVO.method : null;\n\t}\n\n\tpublic set normalMethod(value:NormalBasicMethod)\n\t{\n\t\tif (this._iNormalMethodVO && this._iNormalMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iNormalMethodVO) {\n\t\t\tthis._removeDependency(this._iNormalMethodVO);\n\t\t\tthis._iNormalMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iNormalMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iNormalMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the ambient lighting contribution. Defaults to AmbientBasicMethod.\n\t */\n\tpublic get ambientMethod():AmbientBasicMethod\n\t{\n\t\treturn this._iAmbientMethodVO? this._iAmbientMethodVO.method : null;\n\t}\n\n\tpublic set ambientMethod(value:AmbientBasicMethod)\n\t{\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iAmbientMethodVO) {\n\t\t\tthis._removeDependency(this._iAmbientMethodVO);\n\t\t\tthis._iAmbientMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iAmbientMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iAmbientMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method used to render shadows cast on this surface, or null if no shadows are to be rendered. Defaults to null.\n\t */\n\tpublic get shadowMethod():ShadowMapMethodBase\n\t{\n\t\treturn this._iShadowMethodVO? this._iShadowMethodVO.method : null;\n\t}\n\n\tpublic set shadowMethod(value:ShadowMapMethodBase)\n\t{\n\t\tif (this._iShadowMethodVO && this._iShadowMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iShadowMethodVO) {\n\t\t\tthis._removeDependency(this._iShadowMethodVO);\n\t\t\tthis._iShadowMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iShadowMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iShadowMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the diffuse lighting contribution. Defaults to DiffuseBasicMethod.\n\t */\n\tpublic get diffuseMethod():DiffuseBasicMethod\n\t{\n\t\treturn this._iDiffuseMethodVO? this._iDiffuseMethodVO.method : null;\n\t}\n\n\tpublic set diffuseMethod(value:DiffuseBasicMethod)\n\t{\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iDiffuseMethodVO) {\n\t\t\tthis._removeDependency(this._iDiffuseMethodVO);\n\t\t\tthis._iDiffuseMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iDiffuseMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iDiffuseMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * The method that provides the specular lighting contribution. Defaults to SpecularBasicMethod.\n\t */\n\tpublic get specularMethod():SpecularBasicMethod\n\t{\n\t\treturn this._iSpecularMethodVO? this._iSpecularMethodVO.method : null;\n\t}\n\n\tpublic set specularMethod(value:SpecularBasicMethod)\n\t{\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.method == value)\n\t\t\treturn;\n\n\t\tif (this._iSpecularMethodVO) {\n\t\t\tthis._removeDependency(this._iSpecularMethodVO);\n\t\t\tthis._iSpecularMethodVO = null;\n\t\t}\n\n\t\tif (value) {\n\t\t\tthis._iSpecularMethodVO = new MethodVO(value);\n\t\t\tthis._addDependency(this._iSpecularMethodVO);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic dispose()\n\t{\n\t\tsuper.dispose();\n\n\t\twhile (this._iMethodVOs.length)\n\t\t\tthis._removeDependency(this._iMethodVOs[0]);\n\n\t\tthis._iMethodVOs = null;\n\t}\n\n\t/**\n\t * Called when any method's shader code is invalidated.\n\t */\n\tprivate onShaderInvalidated(event:ShadingMethodEvent)\n\t{\n\t\tthis._pInvalidatePass();\n\t}\n\n\t// RENDER LOOP\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iActivate(pass:MaterialPassData, stage:Stage, camera:Camera)\n\t{\n\t\tsuper._iActivate(pass, stage, camera);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iActivate(pass.shaderObject, methodVO, stage);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t *\n\t * @param renderable\n\t * @param stage\n\t * @param camera\n\t */\n\tpublic setRenderState(pass:MaterialPassData, renderable:RenderableBase, stage:Stage, camera:Camera, viewProjection:Matrix3D)\n\t{\n\t\tsuper.setRenderState(pass, renderable, stage, camera, viewProjection);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iSetRenderState(pass.shaderObject, methodVO, renderable, stage, camera);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iDeactivate(pass:MaterialPassData, stage:Stage)\n\t{\n\t\tsuper._iDeactivate(pass, stage);\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod)\n\t\t\t\tmethodVO.method.iDeactivate(pass.shaderObject, methodVO, stage);\n\t\t}\n\t}\n\n\tpublic _iIncludeDependencies(shaderObject:ShaderLightingObject)\n\t{\n\t\tvar i:number;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis.setupAndCountDependencies(shaderObject, this._iMethodVOs[i]);\n\n\t\tfor (i = 0; i < len; ++i)\n\t\t\tthis._iMethodVOs[i].useMethod = this._iMethodVOs[i].method.iIsUsed(shaderObject);\n\n\t\tsuper._iIncludeDependencies(shaderObject);\n\t}\n\n\n\t/**\n\t * Counts the dependencies for a given method.\n\t * @param method The method to count the dependencies for.\n\t * @param methodVO The method's data for this material.\n\t */\n\tprivate setupAndCountDependencies(shaderObject:ShaderObjectBase, methodVO:MethodVO)\n\t{\n\t\tmethodVO.reset();\n\n\t\tmethodVO.method.iInitVO(shaderObject, methodVO);\n\n\t\tif (methodVO.needsProjection)\n\t\t\tshaderObject.projectionDependencies++;\n\n\t\tif (methodVO.needsGlobalVertexPos) {\n\n\t\t\tshaderObject.globalPosDependencies++;\n\n\t\t\tif (methodVO.needsGlobalFragmentPos)\n\t\t\t\tshaderObject.usesGlobalPosFragment = true;\n\n\t\t} else if (methodVO.needsGlobalFragmentPos) {\n\t\t\tshaderObject.globalPosDependencies++;\n\t\t\tshaderObject.usesGlobalPosFragment = true;\n\t\t}\n\n\t\tif (methodVO.needsNormals)\n\t\t\tshaderObject.normalDependencies++;\n\n\t\tif (methodVO.needsTangents)\n\t\t\tshaderObject.tangentDependencies++;\n\n\t\tif (methodVO.needsView)\n\t\t\tshaderObject.viewDirDependencies++;\n\n\t\tif (methodVO.needsUV)\n\t\t\tshaderObject.uvDependencies++;\n\n\t\tif (methodVO.needsSecondaryUV)\n\t\t\tshaderObject.secondaryUVDependencies++;\n\t}\n\n\tpublic _iGetPreLightingVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod)\n\t\t\tcode += this._iAmbientMethodVO.method.iGetVertexCode(shaderObject, this._iAmbientMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod)\n\t\t\tcode += this._iDiffuseMethodVO.method.iGetVertexCode(shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod)\n\t\t\tcode += this._iSpecularMethodVO.method.iGetVertexCode(shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPreLightingFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iAmbientMethodVO && this._iAmbientMethodVO.useMethod) {\n\t\t\tcode += this._iAmbientMethodVO.method.iGetFragmentCode(shaderObject, this._iAmbientMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\n\t\t\tif (this._iAmbientMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\n\t\t\tif (this._iAmbientMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod)\n\t\t\tcode += ( this._iDiffuseMethodVO.method).iGetFragmentPreLightingCode( shaderObject, this._iDiffuseMethodVO, registerCache, sharedRegisters);\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod)\n\t\t\tcode += ( this._iSpecularMethodVO.method).iGetFragmentPreLightingCode( shaderObject, this._iSpecularMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPerLightDiffuseFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, diffuseColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iDiffuseMethodVO.method).iGetFragmentCodePerLight(shaderObject, this._iDiffuseMethodVO, lightDirReg, diffuseColorReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerLightSpecularFragmentCode(shaderObject:ShaderLightingObject, lightDirReg:ShaderRegisterElement, specularColorReg:ShaderRegisterElement, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iSpecularMethodVO.method).iGetFragmentCodePerLight(shaderObject, this._iSpecularMethodVO, lightDirReg, specularColorReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerProbeDiffuseFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iDiffuseMethodVO.method).iGetFragmentCodePerProbe(shaderObject, this._iDiffuseMethodVO, texReg, weightReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPerProbeSpecularFragmentCode(shaderObject:ShaderLightingObject, texReg:ShaderRegisterElement, weightReg:string, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn ( this._iSpecularMethodVO.method).iGetFragmentCodePerProbe(shaderObject, this._iSpecularMethodVO, texReg, weightReg, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetPostLightingVertexCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tcode += this._iShadowMethodVO.method.iGetVertexCode(shaderObject, this._iShadowMethodVO, registerCache, sharedRegisters);\n\n\t\treturn code;\n\t}\n\n\tpublic _iGetPostLightingFragmentCode(shaderObject:ShaderLightingObject, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\n\t\tif (shaderObject.useAlphaPremultiplied && this._pEnableBlending) {\n\t\t\tcode += \"add \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.commons + \".z\\n\" +\n\t\t\t\t\"div \" + sharedRegisters.shadedTarget + \".xyz, \" + sharedRegisters.shadedTarget + \", \" + sharedRegisters.shadedTarget + \".w\\n\" +\n\t\t\t\t\"sub \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.shadedTarget + \".w, \" + sharedRegisters.commons + \".z\\n\" +\n\t\t\t\t\"sat \" + sharedRegisters.shadedTarget + \".xyz, \" + sharedRegisters.shadedTarget + \"\\n\";\n\t\t}\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tcode += this._iShadowMethodVO.method.iGetFragmentCode(shaderObject, this._iShadowMethodVO, sharedRegisters.shadowTarget, registerCache, sharedRegisters);\n\n\t\tif (this._iDiffuseMethodVO && this._iDiffuseMethodVO.useMethod) {\n\t\t\tcode += ( this._iDiffuseMethodVO.method).iGetFragmentPostLightingCode(shaderObject, this._iDiffuseMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\n\t\t\t// resolve other dependencies as well?\n\t\t\tif (this._iDiffuseMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\n\t\t\tif (this._iDiffuseMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iSpecularMethodVO && this._iSpecularMethodVO.useMethod) {\n\t\t\tcode += ( this._iSpecularMethodVO.method).iGetFragmentPostLightingCode(shaderObject, this._iSpecularMethodVO, sharedRegisters.shadedTarget, registerCache, sharedRegisters);\n\t\t\tif (this._iSpecularMethodVO.needsNormals)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.normalFragment);\n\t\t\tif (this._iSpecularMethodVO.needsView)\n\t\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\t\t}\n\n\t\tif (this._iShadowMethodVO)\n\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.shadowTarget);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are allowed in tangent space. This is only the case if no object-space\n\t * dependencies exist.\n\t */\n\tpublic _pUsesTangentSpace(shaderObject:ShaderLightingObject):boolean\n\t{\n\t\tif (shaderObject.usesProbes)\n\t\t\treturn false;\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = 0; i < len; ++i) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod && !methodVO.method.iUsesTangentSpace())\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Indicates whether or not normals are output in tangent space.\n\t */\n\tpublic _pOutputsTangentNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn ( this._iNormalMethodVO.method).iOutputsTangentNormals();\n\t}\n\n\t/**\n\t * Indicates whether or not normals are output by the pass.\n\t */\n\tpublic _pOutputsNormals(shaderObject:ShaderObjectBase):boolean\n\t{\n\t\treturn this._iNormalMethodVO && this._iNormalMethodVO.useMethod;\n\t}\n\n\n\tpublic _iGetNormalVertexCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\treturn this._iNormalMethodVO.method.iGetVertexCode(shaderObject, this._iNormalMethodVO, registerCache, sharedRegisters);\n\t}\n\n\tpublic _iGetNormalFragmentCode(shaderObject:ShaderObjectBase, registerCache:ShaderRegisterCache, sharedRegisters:ShaderRegisterData):string\n\t{\n\t\tvar code:string = this._iNormalMethodVO.method.iGetFragmentCode(shaderObject, this._iNormalMethodVO, sharedRegisters.normalFragment, registerCache, sharedRegisters);\n\n\t\tif (this._iNormalMethodVO.needsView)\n\t\t\tregisterCache.removeFragmentTempUsage(sharedRegisters.viewDirFragment);\n\n\t\tif (this._iNormalMethodVO.needsGlobalFragmentPos || this._iNormalMethodVO.needsGlobalVertexPos)\n\t\t\tregisterCache.removeVertexTempUsage(sharedRegisters.globalPositionVertex);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetVertexCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = len - this._numEffectDependencies; i < len; i++) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod) {\n\t\t\t\tcode += methodVO.method.iGetVertexCode(shaderObject, methodVO, regCache, sharedReg);\n\n\t\t\t\tif (methodVO.needsGlobalVertexPos || methodVO.needsGlobalFragmentPos)\n\t\t\t\t\tregCache.removeVertexTempUsage(sharedReg.globalPositionVertex);\n\t\t\t}\n\t\t}\n\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod)\n\t\t\tcode += this._iColorTransformMethodVO.method.iGetVertexCode(shaderObject, this._iColorTransformMethodVO, regCache, sharedReg);\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic _iGetFragmentCode(shaderObject:ShaderObjectBase, regCache:ShaderRegisterCache, sharedReg:ShaderRegisterData):string\n\t{\n\t\tvar code:string = \"\";\n\t\tvar alphaReg:ShaderRegisterElement;\n\n\t\tif (this.preserveAlpha && this._numEffectDependencies > 0) {\n\t\t\talphaReg = regCache.getFreeFragmentSingleTemp();\n\t\t\tregCache.addFragmentTempUsages(alphaReg, 1);\n\t\t\tcode += \"mov \" + alphaReg + \", \" + sharedReg.shadedTarget + \".w\\n\";\n\t\t}\n\n\t\tvar methodVO:MethodVO;\n\t\tvar len:number = this._iMethodVOs.length;\n\t\tfor (var i:number = len - this._numEffectDependencies; i < len; i++) {\n\t\t\tmethodVO = this._iMethodVOs[i];\n\t\t\tif (methodVO.useMethod) {\n\t\t\t\tcode += methodVO.method.iGetFragmentCode(shaderObject, methodVO, sharedReg.shadedTarget, regCache, sharedReg);\n\n\t\t\t\tif (methodVO.needsNormals)\n\t\t\t\t\tregCache.removeFragmentTempUsage(sharedReg.normalFragment);\n\n\t\t\t\tif (methodVO.needsView)\n\t\t\t\t\tregCache.removeFragmentTempUsage(sharedReg.viewDirFragment);\n\n\t\t\t}\n\t\t}\n\n\t\tif (this.preserveAlpha && this._numEffectDependencies > 0) {\n\t\t\tcode += \"mov \" + sharedReg.shadedTarget + \".w, \" + alphaReg + \"\\n\";\n\t\t\tregCache.removeFragmentTempUsage(alphaReg);\n\t\t}\n\n\t\tif (this._iColorTransformMethodVO && this._iColorTransformMethodVO.useMethod)\n\t\t\tcode += this._iColorTransformMethodVO.method.iGetFragmentCode(shaderObject, this._iColorTransformMethodVO, sharedReg.shadedTarget, regCache, sharedReg);\n\n\t\treturn code;\n\t}\n\t/**\n\t * Indicates whether the shader uses any shadows.\n\t */\n\tpublic _iUsesShadows():boolean\n\t{\n\t\treturn Boolean(this._iShadowMethodVO || this.lightPicker.castingDirectionalLights.length > 0 || this.lightPicker.castingPointLights.length > 0);\n\t}\n\n\t/**\n\t * Indicates whether the shader uses any specular component.\n\t */\n\tpublic _iUsesSpecular():boolean\n\t{\n\t\treturn Boolean(this._iSpecularMethodVO);\n\t}\n}\n\nexport = TriangleMethodPass;", "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport AssetType\t\t\t\t\t= require(\"awayjs-core/lib/library/AssetType\");\nimport BitmapTexture\t\t\t\t= require(\"awayjs-core/lib/textures/BitmapTexture\");\n\nimport IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport LineBasicMaterial\t\t\t= require(\"awayjs-stagegl/lib/materials/LineBasicMaterial\");\nimport TriangleBasicMaterial\t\t= require(\"awayjs-stagegl/lib/materials/TriangleBasicMaterial\");\n\nclass DefaultMaterialManager\n{\n\tprivate static _defaultBitmapData:BitmapData;\n\tprivate static _defaultTriangleMaterial:TriangleBasicMaterial;\n\tprivate static _defaultLineMaterial:LineBasicMaterial;\n\tprivate static _defaultTexture:BitmapTexture;\n\n\tpublic static getDefaultMaterial(materialOwner:IMaterialOwner = null):MaterialBase\n\t{\n\t\tif (materialOwner != null && materialOwner.assetType == AssetType.LINE_SUB_MESH) {\n\t\t\tif (!DefaultMaterialManager._defaultLineMaterial)\n\t\t\t\tDefaultMaterialManager.createDefaultLineMaterial();\n\n\t\t\treturn DefaultMaterialManager._defaultLineMaterial;\n\t\t} else {\n\t\t\tif (!DefaultMaterialManager._defaultTriangleMaterial)\n\t\t\t\tDefaultMaterialManager.createDefaultTriangleMaterial();\n\n\t\t\treturn DefaultMaterialManager._defaultTriangleMaterial;\n\t\t}\n\t}\n\n\tpublic static getDefaultTexture(materialOwner:IMaterialOwner = null):BitmapTexture\n\t{\n\t\tif (!DefaultMaterialManager._defaultTexture)\n\t\t\tDefaultMaterialManager.createDefaultTexture();\n\n\t\treturn DefaultMaterialManager._defaultTexture;\n\t}\n\n\tprivate static createDefaultTexture()\n\t{\n\t\tDefaultMaterialManager._defaultBitmapData = DefaultMaterialManager.createCheckeredBitmapData();\n\t\tDefaultMaterialManager._defaultTexture = new BitmapTexture(DefaultMaterialManager._defaultBitmapData, true);\n\t\tDefaultMaterialManager._defaultTexture.name = \"defaultTexture\";\n\t}\n\n\tpublic static createCheckeredBitmapData():BitmapData\n\t{\n\t\tvar b:BitmapData = new BitmapData(8, 8, false, 0x000000);\n\n\t\t//create chekerboard\n\t\tvar i:number, j:number;\n\t\tfor (i = 0; i < 8; i++) {\n\t\t\tfor (j = 0; j < 8; j++) {\n\t\t\t\tif ((j & 1) ^ (i & 1)) {\n\t\t\t\t\tb.setPixel(i, j, 0XFFFFFF);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn b;\n\t}\n\n\tprivate static createDefaultTriangleMaterial()\n\t{\n\t\tif (!DefaultMaterialManager._defaultTexture)\n\t\t\tDefaultMaterialManager.createDefaultTexture();\n\n\t\tDefaultMaterialManager._defaultTriangleMaterial = new TriangleBasicMaterial(DefaultMaterialManager._defaultTexture);\n\t\tDefaultMaterialManager._defaultTriangleMaterial.mipmap = false;\n\t\tDefaultMaterialManager._defaultTriangleMaterial.smooth = false;\n\t\tDefaultMaterialManager._defaultTriangleMaterial.name = \"defaultTriangleMaterial\";\n\t}\n\n\tprivate static createDefaultLineMaterial()\n\t{\n\t\tDefaultMaterialManager._defaultLineMaterial = new LineBasicMaterial();\n\t\tDefaultMaterialManager._defaultLineMaterial.name = \"defaultSegmentMaterial\";\n\t}\n}\n\nexport = DefaultMaterialManager;", - "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\nclass ShaderCompilerHelper\n{\n\t/**\n\t * A helper method that generates standard code for sampling from a texture using the normal uv coordinates.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param sharedReg The shared register object for the shader.\n\t * @param inputReg The texture stream register.\n\t * @param texture The texture which will be assigned to the given slot.\n\t * @param uvReg An optional uv register if coordinates different from the primary uv coordinates are to be used.\n\t * @param forceWrap If true, texture wrapping is enabled regardless of the material setting.\n\t * @return The fragment code that performs the sampling.\n\t *\n\t * @protected\n\t */\n\tpublic static getTex2DSampleCode(targetReg:ShaderRegisterElement, sharedReg:ShaderRegisterData, inputReg:ShaderRegisterElement, texture:TextureProxyBase, smooth:boolean, repeat:boolean, mipmaps:boolean, uvReg:ShaderRegisterElement = null, forceWrap:string = null):string\n\t{\n\t\tvar wrap:string = forceWrap || (repeat? \"wrap\":\"clamp\");\n\t\tvar format:string = ShaderCompilerHelper.getFormatStringForTexture(texture);\n\t\tvar enableMipMaps:boolean = mipmaps && texture.hasMipmaps;\n\t\tvar filter:string = (smooth)? (enableMipMaps? \"linear,miplinear\" : \"linear\") : (enableMipMaps? \"nearest,mipnearest\" : \"nearest\");\n\n\t\tif (uvReg == null)\n\t\t\tuvReg = sharedReg.uvVarying;\n\n\t\treturn \"tex \" + targetReg + \", \" + uvReg + \", \" + inputReg + \" <2d,\" + filter + \",\" + format + wrap + \">\\n\";\n\n\t}\n\n\n\t/**\n\t * A helper method that generates standard code for sampling from a cube texture.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param targetReg The register in which to store the sampled colour.\n\t * @param inputReg The texture stream register.\n\t * @param texture The cube map which will be assigned to the given slot.\n\t * @param uvReg The direction vector with which to sample the cube map.\n\t *\n\t * @protected\n\t */\n\tpublic static getTexCubeSampleCode(targetReg:ShaderRegisterElement, inputReg:ShaderRegisterElement, texture:TextureProxyBase, smooth:boolean, mipmaps:boolean, uvReg:ShaderRegisterElement):string\n\t{\n\t\tvar filter:string;\n\t\tvar format:string = ShaderCompilerHelper.getFormatStringForTexture(texture);\n\t\tvar enableMipMaps:boolean = mipmaps && texture.hasMipmaps;\n\t\tvar filter:string = (smooth)? (enableMipMaps? \"linear,miplinear\" : \"linear\") : (enableMipMaps? \"nearest,mipnearest\" : \"nearest\");\n\n\t\treturn \"tex \" + targetReg + \", \" + uvReg + \", \" + inputReg + \" \\n\";\n\t}\n\n\t/**\n\t * Generates a texture format string for the sample instruction.\n\t * @param texture The texture for which to get the format string.\n\t * @return\n\t *\n\t * @protected\n\t */\n\tpublic static getFormatStringForTexture(texture:TextureProxyBase):string\n\t{\n\t\tswitch (texture.format) {\n\t\t\tcase ContextGLTextureFormat.COMPRESSED:\n\t\t\t\treturn \"dxt1,\";\n\t\t\t\tbreak;\n\t\t\tcase ContextGLTextureFormat.COMPRESSED_ALPHA:\n\t\t\t\treturn \"dxt5,\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"\";\n\t\t}\n\t}\n}\n\nexport = ShaderCompilerHelper;", + "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport ContextGLTextureFormat\t\t= require(\"awayjs-stagegl/lib/base/ContextGLTextureFormat\");\nimport ShaderRegisterData\t\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterData\");\nimport ShaderRegisterElement\t\t= require(\"awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement\");\n\nclass ShaderCompilerHelper\n{\n\t/**\n\t * A helper method that generates standard code for sampling from a texture using the normal uv coordinates.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param sharedReg The shared register object for the shader.\n\t * @param inputReg The texture stream register.\n\t * @param texture The texture which will be assigned to the given slot.\n\t * @param uvReg An optional uv register if coordinates different from the primary uv coordinates are to be used.\n\t * @param forceWrap If true, texture wrapping is enabled regardless of the material setting.\n\t * @return The fragment code that performs the sampling.\n\t *\n\t * @protected\n\t */\n\tpublic static getTex2DSampleCode(targetReg:ShaderRegisterElement, sharedReg:ShaderRegisterData, inputReg:ShaderRegisterElement, texture:TextureProxyBase, smooth:boolean, repeat:boolean, mipmaps:boolean, uvReg:ShaderRegisterElement = null, forceWrap:string = null):string\n\t{\n\t\tvar wrap:string = forceWrap || (repeat? \"wrap\":\"clamp\");\n\t\tvar format:string = ShaderCompilerHelper.getFormatStringForTexture(texture);\n\t\tvar enableMipMaps:boolean = mipmaps && texture.hasMipmaps;\n\t\tvar filter:string = (smooth)? (enableMipMaps? \"linear,miplinear\" : \"linear\") : (enableMipMaps? \"nearest,mipnearest\" : \"nearest\");\n\n\t\tif (uvReg == null)\n\t\t\tuvReg = sharedReg.uvVarying;\n\n\t\treturn \"tex \" + targetReg + \", \" + uvReg + \", \" + inputReg + \" <2d,\" + filter + \",\" + format + wrap + \">\\n\";\n\n\t}\n\n\n\t/**\n\t * A helper method that generates standard code for sampling from a cube texture.\n\t * @param vo The MethodVO object linking this method with the pass currently being compiled.\n\t * @param targetReg The register in which to store the sampled colour.\n\t * @param inputReg The texture stream register.\n\t * @param texture The cube map which will be assigned to the given slot.\n\t * @param uvReg The direction vector with which to sample the cube map.\n\t *\n\t * @protected\n\t */\n\tpublic static getTexCubeSampleCode(targetReg:ShaderRegisterElement, inputReg:ShaderRegisterElement, texture:TextureProxyBase, smooth:boolean, mipmaps:boolean, uvReg:ShaderRegisterElement):string\n\t{\n\t\tvar filter:string;\n\t\tvar format:string = ShaderCompilerHelper.getFormatStringForTexture(texture);\n\t\tvar enableMipMaps:boolean = mipmaps && texture.hasMipmaps;\n\t\tvar filter:string = (smooth)? (enableMipMaps? \"linear,miplinear\" : \"linear\") : (enableMipMaps? \"nearest,mipnearest\" : \"nearest\");\n\n\t\treturn \"tex \" + targetReg + \", \" + uvReg + \", \" + inputReg + \" \\n\";\n\t}\n\n\t/**\n\t * Generates a texture format string for the sample instruction.\n\t * @param texture The texture for which to get the format string.\n\t * @return\n\t *\n\t * @protected\n\t */\n\tpublic static getFormatStringForTexture(texture:TextureProxyBase):string\n\t{\n\t\tswitch (texture.format) {\n\t\t\tcase ContextGLTextureFormat.COMPRESSED:\n\t\t\t\treturn \"dxt1,\";\n\t\t\t\tbreak;\n\t\t\tcase ContextGLTextureFormat.COMPRESSED_ALPHA:\n\t\t\t\treturn \"dxt5,\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"\";\n\t\t}\n\t}\n}\n\nexport = ShaderCompilerHelper;", + "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport Billboard\t\t\t\t\t= require(\"awayjs-display/lib/entities/Billboard\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\n\n/**\n * @class away.pool.RenderableListItem\n */\nclass BillboardRenderable extends RenderableBase\n{\n\tprivate static _materialGeometry:Object = new Object();\n\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"billboard\";\n\n\t/**\n\t *\n\t */\n\tprivate _billboard:Billboard;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param billboard\n\t */\n\tconstructor(pool:RenderablePool, billboard:Billboard)\n\t{\n\t\tsuper(pool, billboard, billboard);\n\n\t\tthis._billboard = billboard;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {away.base.TriangleSubGeometry}\n\t */\n\tpublic _pGetSubGeometry():SubGeometryBase\n\t{\n\t\tvar material:MaterialBase = this._billboard.material;\n\n\t\tvar geometry:TriangleSubGeometry = BillboardRenderable._materialGeometry[material.id];\n\n\t\tif (!geometry) {\n\t\t\tgeometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true);\n\t\t\tgeometry.autoDeriveNormals = false;\n\t\t\tgeometry.autoDeriveTangents = false;\n\t\t\tgeometry.updateIndices(Array(0, 1, 2, 0, 2, 3));\n\t\t\tgeometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0));\n\t\t\tgeometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0));\n\t\t\tgeometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1));\n\t\t\tgeometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1));\n\t\t} else {\n\t\t\tgeometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0));\n\t\t}\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true;\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true;\n\n\t\treturn geometry;\n\t}\n}\n\nexport = BillboardRenderable;", + "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexData\");\n\n/**\n *\n */\nclass IndexDataPool\n{\n\tprivate static _pool:Object = new Object();\n\n\tconstructor()\n\t{\n\t}\n\n\tpublic static getItem(subGeometry:SubGeometryBase, level:number, indexOffset:number):IndexData\n\t{\n\t\tvar subGeometryData:Array = > (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array()));\n\n\t\tvar indexData:IndexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level));\n\t\tindexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices);\n\n\t\treturn indexData;\n\t}\n\n\tpublic static disposeItem(id:number, level:number)\n\t{\n\t\tvar subGeometryData:Array = > this._pool[id];\n\n\t\tsubGeometryData[level].dispose();\n\t\tsubGeometryData[level] = null;\n\t}\n\n\tpublic disposeData(id:number)\n\t{\n\t\tvar subGeometryData:Array = > IndexDataPool._pool[id];\n\n\t\tvar len:number = subGeometryData.length;\n\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\tsubGeometryData[i].dispose();\n\t\t\tsubGeometryData[i] = null;\n\t\t}\n\n\t\tIndexDataPool._pool[id] = null;\n\t}\n}\n\nexport = IndexDataPool;", + "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\n\n/**\n *\n */\nclass IndexData\n{\n\tprivate static LIMIT_VERTS:number = 0xffff;\n\n\tprivate static LIMIT_INDICES:number = 0xffffff;\n\n\tprivate _dataDirty = true;\n\n\tpublic invalid:Array = new Array(8);\n\n\tpublic contexts:Array = new Array(8);\n\n\tpublic buffers:Array = new Array(8);\n\n\tpublic data:Array;\n\n\tpublic indexMappings:Array;\n\n\tpublic originalIndices:Array;\n\n\tpublic offset:number;\n\n\tpublic level:number;\n\n\tconstructor(level:number)\n\t{\n\t\tthis.level = level;\n\t}\n\n\tpublic updateData(offset:number, indices:Array, numVertices:number)\n\t{\n\t\tif (this._dataDirty) {\n\t\t\tthis._dataDirty = false;\n\n\t\t\tif (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) {\n\t\t\t\t//shortcut for those buffers that fit into the maximum buffer sizes\n\t\t\t\tthis.indexMappings = null;\n\t\t\t\tthis.originalIndices = null;\n\t\t\t\tthis.setData(indices);\n\t\t\t\tthis.offset = indices.length;\n\t\t\t} else {\n\t\t\t\tvar i:number;\n\t\t\t\tvar len:number;\n\t\t\t\tvar outIndex:number;\n\t\t\t\tvar j:number;\n\t\t\t\tvar k:number;\n\t\t\t\tvar splitIndices:Array = new Array();\n\n\t\t\t\tthis.indexMappings = new Array(indices.length);\n\t\t\t\tthis.originalIndices = new Array();\n\n\t\t\t\ti = this.indexMappings.length;\n\n\t\t\t\twhile (i--)\n\t\t\t\t\tthis.indexMappings[i] = -1;\n\n\t\t\t\tvar originalIndex:number;\n\t\t\t\tvar splitIndex:number;\n\n\t\t\t\t// Loop over all triangles\n\t\t\t\toutIndex = 0;\n\t\t\t\tlen = indices.length;\n\t\t\t\ti = offset;\n\t\t\t\tk = 0;\n\t\t\t\twhile (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) {\n\t\t\t\t\t// Loop over all vertices in a triangle //TODO ensure this works for segments or any grouping\n\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\n\t\t\t\t\t\toriginalIndex = indices[i + j];\n\n\t\t\t\t\t\tif (this.indexMappings[originalIndex] >= 0) {\n\t\t\t\t\t\t\tsplitIndex = this.indexMappings[originalIndex];\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// This vertex does not yet exist in the split list and\n\t\t\t\t\t\t\t// needs to be copied from the long list.\n\t\t\t\t\t\t\tsplitIndex = k++;\n\t\t\t\t\t\t\tthis.indexMappings[originalIndex] = splitIndex;\n\t\t\t\t\t\t\tthis.originalIndices.push(originalIndex);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Store new index, which may have come from the mapping look-up,\n\t\t\t\t\t\t// or from copying a new set of vertex data from the original vector\n\t\t\t\t\t\tsplitIndices[outIndex + j] = splitIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\toutIndex += 3;\n\t\t\t\t\ti += 3\n\t\t\t\t}\n\n\t\t\t\tthis.setData(splitIndices);\n\t\t\t\tthis.offset = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic invalidateData()\n\t{\n\t\tthis._dataDirty = true;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.contexts[i]) {\n\t\t\t\tthis.contexts[i].disposeIndexData(this);\n\t\t\t\tthis.contexts[i] = null\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate disposeBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.buffers[i]) {\n\t\t\t\tthis.buffers[i].dispose();\n\t\t\t\tthis.buffers[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate invalidateBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i)\n\t\t\tthis.invalid[i] = true;\n\t}\n\n\t/**\n\t *\n\t * @param data\n\t * @private\n\t */\n\tprivate setData(data:Array)\n\t{\n\t\tif (this.data && this.data.length != data.length)\n\t\t\tthis.disposeBuffers();\n\t\telse\n\t\t\tthis.invalidateBuffers();\n\n\t\tthis.data = data;\n\t}\n}\n\nexport = IndexData;", + "import IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport LineSubMesh\t\t\t\t\t= require(\"awayjs-display/lib/base/LineSubMesh\");\nimport LineSubGeometry\t\t\t\t= require(\"awayjs-display/lib/base/LineSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\n\n/**\n * @class away.pool.LineSubMeshRenderable\n */\nclass LineSubMeshRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"linesubmesh\";\n\n\t/**\n\t *\n\t */\n\tpublic subMesh:LineSubMesh;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param subMesh\n\t * @param level\n\t * @param dataOffset\n\t */\n\tconstructor(pool:RenderablePool, subMesh:LineSubMesh, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tsuper(pool, subMesh.parentMesh, subMesh, level, indexOffset);\n\n\t\tthis.subMesh = subMesh;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {base.LineSubGeometry}\n\t * @protected\n\t */\n\tpublic _pGetSubGeometry():LineSubGeometry\n\t{\n\t\tvar subGeometry:LineSubGeometry = this.subMesh.subGeometry;\n\n\t\tthis._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true;\n\t\tthis._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true;\n\n\t\tif (subGeometry.thickness)\n\t\t\tthis._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true;\n\n\t\tif (subGeometry.startColors)\n\t\t\tthis._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true;\n\n\t\treturn subGeometry;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param materialOwner\n\t * @param level\n\t * @param indexOffset\n\t * @returns {away.pool.LineSubMeshRenderable}\n\t * @private\n\t */\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\treturn new LineSubMeshRenderable(pool, materialOwner, level, indexOffset);\n\t}\n}\n\nexport = LineSubMeshRenderable;", + "import MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"materials/StageGLMaterialBase\");\n\n/**\n * @class away.pool.MaterialDataPool\n */\nclass MaterialDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(material:StageGLMaterialBase):MaterialData\n\t{\n\t\treturn (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material))))\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(material:StageGLMaterialBase)\n\t{\n\t\tmaterial._iRemoveMaterialData(this._pool[material.id]);\n\n\t\tthis._pool[material.id] = null;\n\t}\n}\n\nexport = MaterialDataPool;", + "import IMaterialData\t\t\t\t= require(\"awayjs-display/lib/pool/IMaterialData\");\n\nimport MaterialDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialDataPool\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"materials/passes/MaterialPassBase\");\nimport ShaderCompilerBase\t\t\t= require(\"materials/compilation/ShaderCompilerBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"materials/compilation/ShaderObjectBase\");\n\n/**\n *\n * @class away.pool.MaterialData\n */\nclass MaterialData implements IMaterialData\n{\n\tprivate _pool:MaterialDataPool;\n\n\tprivate _materialPassDataPool:MaterialPassDataPool;\n\n\tprivate _passes:Array;\n\n\tpublic context:ContextGLBase;\n\n\tpublic material:StageGLMaterialBase;\n\n\tpublic renderOrderId:number;\n\n\tpublic invalidAnimation:boolean = true;\n\n\tconstructor(pool:MaterialDataPool, context:ContextGLBase, material:StageGLMaterialBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis.material = material;\n\n\t\tthis._materialPassDataPool = new MaterialPassDataPool(material);\n\t}\n\n\tpublic getMaterialPass(materialPass:MaterialPassBase, profile:string):MaterialPassData\n\t{\n\t\tvar materialPassData:MaterialPassData = this._materialPassDataPool.getItem(materialPass);\n\n\t\tif (!materialPassData.shaderObject) {\n\t\t\tmaterialPassData.shaderObject = materialPass.createShaderObject(profile);\n\t\t\tmaterialPassData.invalid = true;\n\t\t}\n\n\t\tif (materialPassData.invalid) {\n\t\t\tmaterialPassData.invalid = false;\n\t\t\tvar compiler:ShaderCompilerBase = materialPassData.shaderObject.createCompiler(this.material, materialPass);\n\t\t\tcompiler.compile();\n\n\t\t\tmaterialPassData.shadedTarget = compiler.shadedTarget;\n\t\t\tmaterialPassData.vertexCode = compiler.vertexCode;\n\t\t\tmaterialPassData.fragmentCode = compiler.fragmentCode;\n\t\t\tmaterialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode;\n\t\t\tmaterialPassData.key = \"\";\n\t\t}\n\n\t\treturn materialPassData;\n\t}\n\n\tpublic getMaterialPasses(profile:string):Array\n\t{\n\t\tif (this._passes == null) {\n\t\t\tvar passes:Array = > this.material._iScreenPasses;\n\t\t\tvar numPasses:number = passes.length;\n\n\t\t\t//reset the material passes in MaterialData\n\t\t\tthis._passes = new Array(numPasses);\n\n\t\t\t//get the shader object for each screen pass and store\n\t\t\tfor (var i:number = 0; i < numPasses; i++)\n\t\t\t\tthis._passes[i] = this.getMaterialPass(passes[i], profile);\n\t\t}\n\n\t\treturn this._passes;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._materialPassDataPool.disposePool();\n\n\t\tthis._materialPassDataPool = null;\n\n\t\tthis._pool.disposeItem(this.material);\n\n\t\tthis._passes = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateMaterial()\n\t{\n\t\tthis._passes = null;\n\n\t\tthis.invalidateAnimation();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateAnimation()\n\t{\n\t\tthis.invalidAnimation = true;\n\t}\n}\n\nexport = MaterialData;", + "import MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport StageGLMaterialBase\t\t\t= require(\"materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"materials/passes/MaterialPassBase\");\n\n/**\n * @class away.pool.MaterialPassDataPool\n */\nclass MaterialPassDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _material:StageGLMaterialBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(material:StageGLMaterialBase)\n\t{\n\t\tthis._material = material;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(materialPass:MaterialPassBase):MaterialPassData\n\t{\n\t\treturn (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass)))));\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(materialPass:MaterialPassBase)\n\t{\n\t\tmaterialPass._iRemoveMaterialPassData(this._pool[materialPass.id]);\n\n\t\tdelete this._pool[materialPass.id];\n\t}\n\n\tpublic disposePool()\n\t{\n\t\tfor (var id in this._pool)\n\t\t\t( this._pool[id]).materialPass._iRemoveMaterialPassData(this._pool[id]);\n\n\t\tdelete this._pool;\n\t}\n}\n\nexport = MaterialPassDataPool;", + "import IMaterialPassData\t\t\t= require(\"awayjs-display/lib/pool/IMaterialPassData\");\n\nimport MaterialPassDataPool\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassDataPool\");\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/ProgramData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport StageGLMaterialBase\t\t\t= require(\"materials/StageGLMaterialBase\");\nimport MaterialPassBase\t\t\t\t= require(\"materials/passes/MaterialPassBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"materials/compilation/ShaderObjectBase\");\n\n/**\n *\n * @class away.pool.MaterialPassData\n */\nclass MaterialPassData implements IMaterialPassData\n{\n\tprivate _pool:MaterialPassDataPool;\n\n\tpublic material:StageGLMaterialBase;\n\n\tpublic shaderObject:ShaderObjectBase;\n\n\tpublic materialPass:MaterialPassBase;\n\n\tpublic programData:ProgramData;\n\n\tpublic shadedTarget:string;\n\n\tpublic vertexCode:string;\n\n\tpublic postAnimationFragmentCode:string;\n\n\tpublic fragmentCode:string;\n\n\tpublic animationVertexCode:string = \"\";\n\n\tpublic animationFragmentCode:string = \"\";\n\n\tpublic key:string;\n\n\tpublic invalid:boolean;\n\n\tpublic usesAnimation:boolean;\n\n\tconstructor(pool:MaterialPassDataPool, material:StageGLMaterialBase, materialPass:MaterialPassBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.material = material;\n\t\tthis.materialPass = materialPass;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.materialPass);\n\n\t\tthis.shaderObject.dispose();\n\t\tthis.shaderObject = null;\n\n\t\tthis.programData.dispose();\n\t\tthis.programData = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidate()\n\t{\n\t\tthis.invalid = true;\n\t}\n}\n\nexport = MaterialPassData;", + "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport ProgramData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/ProgramData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport ShaderObjectBase\t\t\t\t= require(\"materials/compilation/ShaderObjectBase\");\n\n/**\n * @class away.pool.ProgramDataPool\n */\nclass ProgramDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(key:string):ProgramData\n\t{\n\t\treturn this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key));\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(key:string)\n\t{\n\t\tthis._pool[key] = null;\n\t}\n}\n\nexport = ProgramDataPool;", + "import ProgramDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/ProgramDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport IProgram\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IProgram\");\n\n/**\n *\n * @class away.pool.ProgramDataBase\n */\nclass ProgramData\n{\n\tpublic static PROGRAMDATA_ID_COUNT:number = 0;\n\n\tprivate _pool:ProgramDataPool;\n\tprivate _key:string;\n\n\tpublic context:ContextGLBase;\n\n\tpublic usages:number = 0;\n\n\tpublic program:IProgram;\n\n\tpublic id:number;\n\n\tconstructor(pool:ProgramDataPool, context:ContextGLBase, key:string)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis._key = key;\n\t\tthis.context.registerProgram(this);\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis.usages--;\n\n\t\tif (!this.usages) {\n\t\t\tthis._pool.disposeItem(this._key);\n\n\t\t\tthis.context.unRegisterProgram(this);\n\n\t\t\tif (this.program)\n\t\t\t\tthis.program.dispose();\n\t\t}\n\n\t\tthis.program = null;\n\t}\n}\n\nexport = ProgramData;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\n\nimport IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport IRenderable\t\t\t\t\t= require(\"awayjs-display/lib/pool/IRenderable\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexData\");\nimport IndexDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexDataPool\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/VertexData\");\nimport VertexDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/VertexDataPool\");\n\n/**\n * @class RenderableListItem\n */\nclass RenderableBase implements IRenderable\n{\n\tprivate _onIndicesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\tprivate _onVerticesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\n\tprivate _subGeometry:SubGeometryBase;\n\tprivate _geometryDirty:boolean = true;\n\tprivate _indexData:IndexData;\n\tprivate _indexDataDirty:boolean = true;\n\tprivate _vertexData:Object = new Object();\n\tpublic _pVertexDataDirty:Object = new Object();\n\tprivate _vertexOffset:Object = new Object();\n\n\tprivate _level:number;\n\tprivate _indexOffset:number;\n\tprivate _overflow:RenderableBase;\n\tprivate _numTriangles:number;\n\tprivate _concatenateArrays:boolean;\n\n\n\tpublic JOINT_INDEX_FORMAT:string;\n\tpublic JOINT_WEIGHT_FORMAT:string;\n\n\t/**\n\t *\n\t */\n\tpublic _pool:RenderablePool;\n\n\t/**\n\t *\n\t */\n\tpublic get overflow():RenderableBase\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\treturn this._overflow;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get numTriangles():number\n\t{\n\t\treturn this._numTriangles;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic next:RenderableBase;\n\n\t/**\n\t *\n\t */\n\tpublic materialId:number;\n\n\t/**\n\t *\n\t */\n\tpublic renderOrderId:number;\n\n\t/**\n\t *\n\t */\n\tpublic zIndex:number;\n\n\t/**\n\t *\n\t */\n\tpublic cascaded:boolean;\n\n\t/**\n\t *\n\t */\n\tpublic renderSceneTransform:Matrix3D;\n\n\t/**\n\t *\n\t */\n\tpublic sourceEntity:IEntity;\n\n\t/**\n\t *\n\t */\n\tpublic materialOwner:IMaterialOwner;\n\n\t/**\n\t *\n\t */\n\tpublic material:MaterialBase;\n\n\t/**\n\t *\n\t */\n\tpublic getIndexData():IndexData\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\treturn this._indexData;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic getVertexData(dataType:string):VertexData\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\tif (this._pVertexDataDirty[dataType])\n\t\t\tthis._updateVertexData(dataType);\n\n\t\treturn this._vertexData[this._concatenateArrays? TriangleSubGeometry.VERTEX_DATA : dataType]\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic getVertexOffset(dataType:string):number\n\t{\n\t\tif (this._indexDataDirty)\n\t\t\tthis._updateIndexData();\n\n\t\tif (this._pVertexDataDirty[dataType])\n\t\t\tthis._updateVertexData(dataType);\n\n\t\treturn this._vertexOffset[dataType];\n\t}\n\n\t/**\n\t *\n\t * @param sourceEntity\n\t * @param materialOwner\n\t * @param subGeometry\n\t * @param animationSubGeometry\n\t */\n\tconstructor(pool:RenderablePool, sourceEntity:IEntity, materialOwner:IMaterialOwner, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tthis._onIndicesUpdatedDelegate = (event:SubGeometryEvent) => this._onIndicesUpdated(event);\n\t\tthis._onVerticesUpdatedDelegate = (event:SubGeometryEvent) => this._onVerticesUpdated(event);\n\n\t\t//store a reference to the pool for later disposal\n\t\tthis._pool = pool;\n\n\t\t//reference to level of overflow\n\t\tthis._level = level;\n\n\t\t//reference to the offset on indices (if this is an overflow renderable)\n\t\tthis._indexOffset = indexOffset;\n\n\t\tthis.sourceEntity = sourceEntity;\n\t\tthis.materialOwner = materialOwner;\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.materialOwner);\n\n\t\tthis._indexData.dispose();\n\t\tthis._indexData = null;\n\n\t\tfor (var dataType in this._vertexData) {\n\t\t\t( this._vertexData[dataType]).dispose();\n\t\t\tthis._vertexData[dataType] = null;\n\t\t}\n\n\t\tif (this._overflow) {\n\t\t\tthis._overflow.dispose();\n\t\t\tthis._overflow = null;\n\t\t}\n\t}\n\n\tpublic invalidateGeometry()\n\t{\n\t\tthis._geometryDirty = true;\n\n\t\t//invalidate indices\n\t\tif (this._level == 0)\n\t\t\tthis._indexDataDirty = true;\n\n\t\tif (this._overflow)\n\t\t\tthis._overflow.invalidateGeometry();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidateIndexData()\n\t{\n\t\tthis._indexDataDirty = true;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param dataType\n\t */\n\tpublic invalidateVertexData(dataType:string)\n\t{\n\t\tthis._pVertexDataDirty[dataType] = true;\n\t}\n\n\tpublic _pGetSubGeometry():SubGeometryBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param subGeometry\n\t * @param offset\n\t * @internal\n\t */\n\tpublic _iFillIndexData(indexOffset:number)\n\t{\n\t\tif (this._geometryDirty)\n\t\t\tthis._updateGeometry();\n\n\t\tthis._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset);\n\n\t\tthis._numTriangles = this._indexData.data.length/3;\n\n\t\tindexOffset = this._indexData.offset;\n\n\t\t//check if there is more to split\n\t\tif (indexOffset < this._subGeometry.indices.length) {\n\t\t\tif (!this._overflow)\n\t\t\t\tthis._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1);\n\n\t\t\tthis._overflow._iFillIndexData(indexOffset);\n\t\t} else if (this._overflow) {\n\t\t\tthis._overflow.dispose();\n\t\t\tthis._overflow = null;\n\t\t}\n\t}\n\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @private\n\t */\n\tprivate _updateGeometry()\n\t{\n\t\tif (this._subGeometry) {\n\t\t\tif (this._level == 0)\n\t\t\t\tthis._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate);\n\t\t\tthis._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t\t}\n\n\t\tthis._subGeometry = this._pGetSubGeometry();\n\n\t\tthis._concatenateArrays = this._subGeometry.concatenateArrays;\n\n\t\tif (this._subGeometry) {\n\t\t\tif (this._level == 0)\n\t\t\t\tthis._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate);\n\t\t\tthis._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t\t}\n\n\t\t//dispose\n//\t\t\tif (this._indexData) {\n//\t\t\t\tthis._indexData.dispose(); //TODO where is a good place to dispose?\n//\t\t\t\tthis._indexData = null;\n//\t\t\t}\n\n//\t\t\tfor (var dataType in this._vertexData) {\n//\t\t\t\t( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose?\n//\t\t\t\tthis._vertexData[dataType] = null;\n//\t\t\t}\n\n\t\tthis._geometryDirty = false;\n\n\t\t//specific vertex data types have to be invalidated in the specific renderable\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @private\n\t */\n\tprivate _updateIndexData()\n\t{\n\t\tthis._iFillIndexData(this._indexOffset);\n\n\t\tthis._indexDataDirty = false;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param dataType\n\t * @private\n\t */\n\tprivate _updateVertexData(dataType:string)\n\t{\n\t\tthis._vertexOffset[dataType] = this._subGeometry.getOffset(dataType);\n\n\t\tif (this._subGeometry.concatenateArrays)\n\t\t\tdataType = SubGeometryBase.VERTEX_DATA;\n\n\t\tthis._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType);\n\n\t\tthis._pVertexDataDirty[dataType] = false;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onIndicesUpdated(event:SubGeometryEvent)\n\t{\n\t\tthis.invalidateIndexData();\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onVerticesUpdated(event:SubGeometryEvent)\n\t{\n\t\tthis._concatenateArrays = ( event.target).concatenateArrays;\n\n\t\tthis.invalidateVertexData(event.dataType);\n\t}\n}\n\nexport = RenderableBase;", + "import TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport Skybox\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Skybox\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\n\n/**\n * @class away.pool.SkyboxRenderable\n */\nclass SkyboxRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"skybox\";\n\n\t/**\n\t *\n\t */\n\tprivate static _geometry:TriangleSubGeometry;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param skybox\n\t */\n\tconstructor(pool:RenderablePool, skybox:Skybox)\n\t{\n\t\tsuper(pool, skybox, skybox);\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @returns {away.base.TriangleSubGeometry}\n\t * @private\n\t */\n\tpublic _pGetSubGeometry():TriangleSubGeometry\n\t{\n\t\tvar geometry:TriangleSubGeometry = SkyboxRenderable._geometry;\n\n\t\tif (!geometry) {\n\t\t\tgeometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true);\n\t\t\tgeometry.autoDeriveNormals = false;\n\t\t\tgeometry.autoDeriveTangents = false;\n\t\t\tgeometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2));\n\t\t\tgeometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1));\n\t\t}\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\n\t\treturn geometry;\n\t}\n}\n\nexport = SkyboxRenderable;", + "import TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport TextureData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/TextureData\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\n\n/**\n * @class away.pool.TextureDataPool\n */\nclass TextureDataPool\n{\n\tprivate _pool:Object = new Object();\n\tprivate _context:ContextGLBase;\n\n\t/**\n\t * //TODO\n\t *\n\t * @param textureDataClass\n\t */\n\tconstructor(context:ContextGLBase)\n\t{\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t * @returns ITexture\n\t */\n\tpublic getItem(textureProxy:TextureProxyBase):TextureData\n\t{\n\t\treturn (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy))))\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param materialOwner\n\t */\n\tpublic disposeItem(textureProxy:TextureProxyBase)\n\t{\n\t\ttextureProxy._iRemoveTextureData(this._pool[textureProxy.id]);\n\n\t\tthis._pool[textureProxy.id] = null;\n\t}\n}\n\nexport = TextureDataPool;", + "import ITextureData\t\t\t\t\t= require(\"awayjs-core/lib/pool/ITextureData\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport TextureDataPool\t\t\t\t= require(\"awayjs-stagegl/lib/pool/TextureDataPool\");\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport ITextureBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITextureBase\");\n\n/**\n *\n * @class away.pool.TextureDataBase\n */\nclass TextureData implements ITextureData\n{\n\tprivate _pool:TextureDataPool;\n\n\tpublic context:ContextGLBase;\n\n\tpublic texture:ITextureBase;\n\n\tpublic textureProxy:TextureProxyBase;\n\n\tpublic invalid:boolean;\n\n\tconstructor(pool:TextureDataPool, context:ContextGLBase, textureProxy:TextureProxyBase)\n\t{\n\t\tthis._pool = pool;\n\t\tthis.context = context;\n\t\tthis.textureProxy = textureProxy;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic dispose()\n\t{\n\t\tthis._pool.disposeItem(this.textureProxy);\n\n\t\tthis.texture.dispose();\n\t\tthis.texture = null;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic invalidate()\n\t{\n\t\tthis.invalid = true;\n\t}\n}\n\nexport = TextureData;", + "import IMaterialOwner\t\t\t\t= require(\"awayjs-display/lib/base/IMaterialOwner\");\nimport TriangleSubMesh\t\t\t\t= require(\"awayjs-display/lib/base/TriangleSubMesh\");\nimport TriangleSubGeometry\t\t\t= require(\"awayjs-display/lib/base/TriangleSubGeometry\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\n\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat\");\n\n/**\n * @class away.pool.TriangleSubMeshRenderable\n */\nclass TriangleSubMeshRenderable extends RenderableBase\n{\n\t/**\n\t *\n\t */\n\tpublic static id:string = \"trianglesubmesh\";\n\n\t/**\n\t *\n\t */\n\tpublic subMesh:TriangleSubMesh;\n\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param subMesh\n\t * @param level\n\t * @param indexOffset\n\t */\n\tconstructor(pool:RenderablePool, subMesh:TriangleSubMesh, level:number = 0, indexOffset:number = 0)\n\t{\n\t\tsuper(pool, subMesh.parentMesh, subMesh, level, indexOffset);\n\n\t\tthis.subMesh = subMesh;\n\t}\n\n\t/**\n\t *\n\t * @returns {SubGeometryBase}\n\t * @protected\n\t */\n\tpublic _pGetSubGeometry():TriangleSubGeometry\n\t{\n\t\tvar subGeometry:TriangleSubGeometry;\n\n\t\tif (this.subMesh.animator)\n\t\t\tsubGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry);\n\t\telse\n\t\t\tsubGeometry = this.subMesh.subGeometry;\n\n\t\tthis._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true;\n\n\t\tif (subGeometry.vertexNormals)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true;\n\n\t\tif (subGeometry.vertexTangents)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true;\n\n\t\tif (subGeometry.uvs)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true;\n\n\t\tif (subGeometry.secondaryUVs)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true;\n\n\t\tif (subGeometry.jointIndices)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true;\n\n\t\tif (subGeometry.jointWeights)\n\t\t\tthis._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true;\n\n\t\tswitch(subGeometry.jointsPerVertex) {\n\t\t\tcase 1:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tthis.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\n\t\treturn subGeometry;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param pool\n\t * @param materialOwner\n\t * @param level\n\t * @param indexOffset\n\t * @returns {away.pool.TriangleSubMeshRenderable}\n\t * @protected\n\t */\n\tpublic _pGetOverflowRenderable(pool:RenderablePool, materialOwner:IMaterialOwner, level:number, indexOffset:number):RenderableBase\n\t{\n\t\treturn new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset);\n\t}\n}\n\nexport = TriangleSubMeshRenderable;", + "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\n\nimport IndexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/IndexData\");\nimport VertexData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/VertexData\");\n\n/**\n *\n */\nclass VertexDataPool\n{\n\tprivate static _pool:Object = new Object();\n\n\tconstructor()\n\t{\n\t}\n\n\tpublic static getItem(subGeometry:SubGeometryBase, indexData:IndexData, dataType:string):VertexData\n\t{\n\t\tif (subGeometry.concatenateArrays)\n\t\t\tdataType = SubGeometryBase.VERTEX_DATA;\n\n\t\tvar subGeometryDictionary:Object = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object()));\n\t\tvar subGeometryData:Array = > (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array()));\n\n\t\tvar vertexData:VertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType));\n\t\tvertexData.updateData(indexData.originalIndices, indexData.indexMappings);\n\n\t\treturn vertexData;\n\t}\n\n\tpublic static disposeItem(subGeometry:SubGeometryBase, level:number, dataType:string)\n\t{\n\t\tvar subGeometryDictionary:Object = VertexDataPool._pool[subGeometry.id];\n\t\tvar subGeometryData:Array = > subGeometryDictionary[dataType];\n\n\t\tsubGeometryData[level].dispose();\n\t\tsubGeometryData[level] = null;\n\t}\n\n\tpublic disposeData(subGeometry:SubGeometryBase)\n\t{\n\t\tvar subGeometryDictionary:Object = VertexDataPool._pool[subGeometry.id];\n\n\t\tfor (var key in subGeometryDictionary) {\n\t\t\tvar subGeometryData:Array = > subGeometryDictionary[key];\n\n\t\t\tvar len:number = subGeometryData.length;\n\t\t\tfor (var i:number = 0; i < len; i++) {\n\t\t\t\tsubGeometryData[i].dispose();\n\t\t\t\tsubGeometryData[i] = null;\n\t\t\t}\n\t\t}\n\n\t\tVertexDataPool._pool[subGeometry.id] = null;\n\t}\n}\n\nexport = VertexDataPool;", + "import SubGeometryBase\t\t\t\t= require(\"awayjs-display/lib/base/SubGeometryBase\");\nimport SubGeometryEvent\t\t\t\t= require(\"awayjs-display/lib/events/SubGeometryEvent\");\n\nimport ContextGLBase\t\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBase\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\n\n/**\n *\n */\nclass VertexData\n{\n\tprivate _onVerticesUpdatedDelegate:(event:SubGeometryEvent) => void;\n\tprivate _subGeometry:SubGeometryBase;\n\tprivate _dataType:string;\n\tprivate _dataDirty = true;\n\n\tpublic invalid:Array = new Array(8);\n\n\tpublic buffers:Array = new Array(8);\n\n\tpublic contexts:Array = new Array(8);\n\n\tpublic data:Array;\n\n\tpublic dataPerVertex:number;\n\n\tconstructor(subGeometry:SubGeometryBase, dataType:string)\n\t{\n\t\tthis._subGeometry = subGeometry;\n\t\tthis._dataType = dataType;\n\n\t\tthis._onVerticesUpdatedDelegate = (event:SubGeometryEvent) => this._onVerticesUpdated(event);\n\t\tthis._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate);\n\t}\n\n\tpublic updateData(originalIndices:Array = null, indexMappings:Array = null)\n\t{\n\t\tif (this._dataDirty) {\n\t\t\tthis._dataDirty = false;\n\n\t\t\tthis.dataPerVertex = this._subGeometry.getStride(this._dataType);\n\n\t\t\tvar vertices:Array = this._subGeometry[this._dataType];\n\n\t\t\tif (indexMappings == null) {\n\t\t\t\tthis.setData(vertices);\n\t\t\t} else {\n\t\t\t\tvar splitVerts:Array = new Array(originalIndices.length*this.dataPerVertex);\n\t\t\t\tvar originalIndex:number;\n\t\t\t\tvar splitIndex:number;\n\t\t\t\tvar i:number = 0;\n\t\t\t\tvar j:number = 0;\n\t\t\t\twhile(i < originalIndices.length) {\n\t\t\t\t\toriginalIndex = originalIndices[i];\n\n\t\t\t\t\tsplitIndex = indexMappings[originalIndex]*this.dataPerVertex;\n\t\t\t\t\toriginalIndex *= this.dataPerVertex;\n\n\t\t\t\t\tfor (j = 0; j < this.dataPerVertex; j++)\n\t\t\t\t\t\tsplitVerts[splitIndex + j] = vertices[originalIndex + j];\n\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tthis.setData(splitVerts);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.contexts[i]) {\n\t\t\t\tthis.contexts[i].disposeVertexData(this);\n\t\t\t\tthis.contexts[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate disposeBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tif (this.buffers[i]) {\n\t\t\t\tthis.buffers[i].dispose();\n\t\t\t\tthis.buffers[i] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tprivate invalidateBuffers()\n\t{\n\t\tfor (var i:number = 0; i < 8; ++i)\n\t\t\tthis.invalid[i] = true;\n\t}\n\n\t/**\n\t *\n\t * @param data\n\t * @param dataPerVertex\n\t * @private\n\t */\n\tprivate setData(data:Array)\n\t{\n\t\tif (this.data && this.data.length != data.length)\n\t\t\tthis.disposeBuffers();\n\t\telse\n\t\t\tthis.invalidateBuffers();\n\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * //TODO\n\t *\n\t * @param event\n\t * @private\n\t */\n\tprivate _onVerticesUpdated(event:SubGeometryEvent)\n\t{\n\t\tvar dataType:string = this._subGeometry.concatenateArrays? SubGeometryBase.VERTEX_DATA : event.dataType;\n\n\t\tif (dataType == this._dataType)\n\t\t\tthis._dataDirty = true;\n\t}\n}\n\nexport = VertexData;", + "import Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport RenderTexture\t\t\t\t= require(\"awayjs-core/lib/textures/RenderTexture\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport LightBase\t\t\t\t\t= require(\"awayjs-display/lib/base/LightBase\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IRenderer\t\t\t\t\t= require(\"awayjs-display/lib/render/IRenderer\");\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ICollector\t\t\t\t\t= require(\"awayjs-display/lib/traverse/ICollector\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport DirectionalLight\t\t\t\t= require(\"awayjs-display/lib/entities/DirectionalLight\");\nimport PointLight\t\t\t\t\t= require(\"awayjs-display/lib/entities/PointLight\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\nimport IMaterialPass\t\t\t\t= require(\"awayjs-display/lib/materials/passes/IMaterialPass\");\nimport ShadowMapperBase\t\t\t\t= require(\"awayjs-display/lib/materials/shadowmappers/ShadowMapperBase\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport SkyboxRenderable\t\t\t\t= require(\"awayjs-stagegl/lib/pool/SkyboxRenderable\");\nimport DepthRenderer\t\t\t\t= require(\"awayjs-stagegl/lib/render/DepthRenderer\");\nimport Filter3DRenderer\t\t\t\t= require(\"awayjs-stagegl/lib/render/Filter3DRenderer\");\nimport RendererBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/render/RendererBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport ContextGLClearMask\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLClearMask\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport Filter3DBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/filters/Filter3DBase\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\nimport StageManager\t\t\t\t\t= require(\"awayjs-stagegl/lib/managers/StageManager\");\nimport DepthMapPass\t\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/DepthMapPass\");\nimport DistanceMapPass\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/DistanceMapPass\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n/**\n * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the\n * materials assigned to them.\n *\n * @class away.render.DefaultRenderer\n */\nclass DefaultRenderer extends RendererBase implements IRenderer\n{\n\tpublic _pRequireDepthRender:boolean;\n\tprivate _skyboxRenderablePool:RenderablePool;\n\n//\t\tprivate _activeMaterial:MaterialBase;\n\tprivate _pDistanceRenderer:DepthRenderer;\n\tprivate _pDepthRenderer:DepthRenderer;\n\tprivate _skyboxProjection:Matrix3D = new Matrix3D();\n\tpublic _pFilter3DRenderer:Filter3DRenderer;\n\n\tpublic _pDepthRender:TextureProxyBase;\n\n\tprivate _antiAlias:number;\n\n\tpublic get antiAlias():number\n\t{\n\t\treturn this._antiAlias;\n\t}\n\n\tpublic set antiAlias(value:number)\n\t{\n\t\tif (this._antiAlias == value)\n\t\t\treturn;\n\n\t\tthis._antiAlias = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get depthPrepass():boolean\n\t{\n\t\treturn this._depthPrepass;\n\t}\n\n\tpublic set depthPrepass(value:boolean)\n\t{\n\t\tthis._depthPrepass = value;\n\t}\n\n\t/**\n\t *\n\t * @returns {*}\n\t */\n\tpublic get filters3d():Array\n\t{\n\t\treturn this._pFilter3DRenderer? this._pFilter3DRenderer.filters : null;\n\t}\n\tpublic set filters3d(value:Array)\n\t{\n\t\tif (value && value.length == 0)\n\t\t\tvalue = null;\n\n\t\tif (this._pFilter3DRenderer && !value) {\n\t\t\tthis._pFilter3DRenderer.dispose();\n\t\t\tthis._pFilter3DRenderer = null;\n\t\t} else if (!this._pFilter3DRenderer && value) {\n\t\t\tthis._pFilter3DRenderer = new Filter3DRenderer(this._pStage);\n\t\t\tthis._pFilter3DRenderer.filters = value;\n\t\t}\n\n\t\tif (this._pFilter3DRenderer) {\n\t\t\tthis._pFilter3DRenderer.filters = value;\n\t\t\tthis._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender;\n\t\t} else {\n\t\t\tthis._pRequireDepthRender = false;\n\n\t\t\tif (this._pDepthRender) {\n\t\t\t\tthis._pDepthRender.dispose();\n\t\t\t\tthis._pDepthRender = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Creates a new DefaultRenderer object.\n\t *\n\t * @param antiAlias The amount of anti-aliasing to use.\n\t * @param renderMode The render mode to use.\n\t */\n\tconstructor(forceSoftware:boolean = false, profile:string = \"baseline\", mode = \"auto\")\n\t{\n\t\tsuper();\n\n\t\tthis._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable);\n\n\t\tthis._pDepthRenderer = new DepthRenderer(new DepthMapPass());\n\t\tthis._pDistanceRenderer = new DepthRenderer(new DistanceMapPass());\n\n\t\tif (this._pStage == null)\n\t\t\tthis.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode);\n\n\t\tthis._pRttBufferManager = RTTBufferManager.getInstance(this._pStage);\n\n\t\tif (this._width == 0)\n\t\t\tthis.width = window.innerWidth;\n\t\telse\n\t\t\tthis._pRttBufferManager.viewWidth = this._width;\n\n\t\tif (this._height == 0)\n\t\t\tthis.height = window.innerHeight;\n\t\telse\n\t\t\tthis._pRttBufferManager.viewHeight = this._height;\n\t}\n\n\tpublic render(entityCollector:ICollector)\n\t{\n\t\tsuper.render(entityCollector);\n\n\t\tif (!this._pStage.recoverFromDisposal()) {//if context has Disposed by the OS,don't render at this frame\n\t\t\tthis._pBackBufferInvalid = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._pBackBufferInvalid)// reset or update render settings\n\t\t\tthis.pUpdateBackBuffer();\n\n\t\tif (this._shareContext && this._pContext)\n\t\t\tthis._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH);\n\n\t\tif (this._pFilter3DRenderer) {\n\t\t\tthis.textureRatioX = this._pRttBufferManager.textureRatioX;\n\t\t\tthis.textureRatioY = this._pRttBufferManager.textureRatioY;\n\t\t} else {\n\t\t\tthis.textureRatioX = 1;\n\t\t\tthis.textureRatioY = 1;\n\t\t}\n\n\t\tif (this._pRequireDepthRender)\n\t\t\tthis.pRenderSceneDepthToTexture( entityCollector);\n\n\t\tif (this._depthPrepass)\n\t\t\tthis.pRenderDepthPrepass( entityCollector);\n\n\t\tif (this._pFilter3DRenderer && this._pContext) { //TODO\n\t\t\t//this._iRender(entityCollector, this._pFilter3DRenderer.getMainInputTexture(this._pStage), this._pRttBufferManager.renderToTextureRect);\n\t\t\t//this._pFilter3DRenderer.render(this._pStage, entityCollector.camera, this._pDepthRender);\n\n\t\t} else {\n\n\t\t\tif (this._shareContext)\n\t\t\t\tthis._iRender(entityCollector, null, this._pScissorRect);\n\t\t\telse\n\t\t\t\tthis._iRender(entityCollector);\n\t\t}\n\n\t\tsuper.render(entityCollector);\n\n\t\tif (!this._shareContext && this._pContext)\n\t\t\tthis._pContext.present();\n\n\t\t// register that a view has been rendered\n\t\tthis._pStage.bufferClear = false;\n\t}\n\n\tpublic pExecuteRender(entityCollector:EntityCollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\tthis.updateLights(entityCollector);\n\n\t\t// otherwise RTT will interfere with other RTTs\n\t\tif (target) {\n\t\t\tthis.pCollectRenderables(entityCollector);\n\n\t\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\t\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\t\t}\n\n\t\tsuper.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector);\n\t}\n\n\tprivate updateLights(entityCollector:EntityCollector)\n\t{\n\t\tvar dirLights:Array = entityCollector.directionalLights;\n\t\tvar pointLights:Array = entityCollector.pointLights;\n\t\tvar len:number, i:number;\n\t\tvar light:LightBase;\n\t\tvar shadowMapper:ShadowMapperBase;\n\n\t\tlen = dirLights.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tlight = dirLights[i];\n\n\t\t\tshadowMapper = light.shadowMapper;\n\n\t\t\tif (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid ))\n\t\t\t\tshadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer);\n\t\t}\n\n\t\tlen = pointLights.length;\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tlight = pointLights[i];\n\n\t\t\tshadowMapper = light.shadowMapper;\n\n\t\t\tif (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid))\n\t\t\t\tshadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer);\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic pDraw(entityCollector:EntityCollector, target:TextureProxyBase)\n\t{\n\t\tif (!target)\n\t\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\n\t\tif (entityCollector.skyBox) {\n\t\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS);\n\n\t\t\tthis.drawSkybox(entityCollector);\n\t\t}\n\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL);\n\n\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\t}\n\n\t/**\n\t * Draw the skybox if present.\n\t *\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawSkybox(entityCollector:EntityCollector)\n\t{\n\t\tvar skyBox:SkyboxRenderable = this._skyboxRenderablePool.getItem(entityCollector.skyBox);\n\n\t\tvar material:MaterialBase = entityCollector.skyBox.material;\n\n\t\tvar camera:Camera = entityCollector.camera;\n\n\t\tthis.updateSkyboxProjection(camera);\n\n\t\tvar activePass:MaterialPassData = ( this._pStage.context).getMaterial(material, this._pStage.profile).getMaterialPass( material._iScreenPasses[0], this._pStage.profile);\n\n\t\tmaterial._iActivatePass(activePass, this._pStage, camera);\n\t\tmaterial._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection);\n\t\tmaterial._iDeactivatePass(activePass, this._pStage);\n\t}\n\n\tprivate updateSkyboxProjection(camera:Camera)\n\t{\n\t\tvar near:Vector3D = new Vector3D();\n\n\t\tthis._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix);\n\t\tthis._skyboxProjection.copyRowTo(2, near);\n\n\t\tvar camPos:Vector3D = camera.scenePosition;\n\n\t\tvar cx:number = near.x;\n\t\tvar cy:number = near.y;\n\t\tvar cz:number = near.z;\n\t\tvar cw:number = -(near.x*camPos.x + near.y*camPos.y + near.z*camPos.z + Math.sqrt(cx*cx + cy*cy + cz*cz));\n\n\t\tvar signX:number = cx >= 0? 1 : -1;\n\t\tvar signY:number = cy >= 0? 1 : -1;\n\n\t\tvar p:Vector3D = new Vector3D(signX, signY, 1, 1);\n\n\t\tvar inverse:Matrix3D = this._skyboxProjection.clone();\n\t\tinverse.invert();\n\n\t\tvar q:Vector3D = inverse.transformVector(p);\n\n\t\tthis._skyboxProjection.copyRowTo(3, p);\n\n\t\tvar a:number = (q.x*p.x + q.y*p.y + q.z*p.z + q.w*p.w)/(cx*q.x + cy*q.y + cz*q.z + cw*q.w);\n\n\t\tthis._skyboxProjection.copyRowFrom(2, new Vector3D(cx*a, cy*a, cz*a, cw*a));\n\t}\n\n\t/**\n\t * Draw a list of renderables.\n\t *\n\t * @param renderables The renderables to draw.\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawRenderables(renderable:RenderableBase, entityCollector:ICollector)\n\t{\n\t\tvar i:number;\n\t\tvar len:number;\n\t\tvar passes:Array;\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar camera:Camera = entityCollector.camera;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\t//iterate through each screen pass\n\t\t\tpasses = renderable.material._iScreenPasses;\n\t\t\tlen = renderable.material._iNumScreenPasses();\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\trenderable2 = renderable;\n\n\t\t\t\tactivePass = activeMaterial.getMaterialPass( passes[i], this._pStage.profile);\n\n\t\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\t\tdo {\n\t\t\t\t\trenderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\n\t\t\t\tactiveMaterial.material._iDeactivatePass(activePass, this._pStage);\n\t\t\t}\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n\n\tpublic dispose()\n\t{\n\t\tif (!this._shareContext)\n\t\t\tthis._pStage.dispose();\n\n\t\tthis._pDepthRenderer.dispose();\n\t\tthis._pDistanceRenderer.dispose();\n\t\tthis._pDepthRenderer = null;\n\t\tthis._pDistanceRenderer = null;\n\n\t\tthis._pDepthRender = null;\n\n\t\tsuper.dispose();\n\t}\n\n\n\t/**\n\t *\n\t */\n\tpublic pRenderDepthPrepass(entityCollector:EntityCollector)\n\t{\n\t\tthis._pDepthRenderer.disableColor = true;\n\n\t\tif (this._pFilter3DRenderer) { //TODO\n//\t\t\t\tthis._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX;\n//\t\t\t\tthis._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY;\n//\t\t\t\tthis._pDepthRenderer._iRender(entityCollector, this._pFilter3DRenderer.getMainInputTexture(this._pStage), this._pRttBufferManager.renderToTextureRect);\n\t\t} else {\n\t\t\tthis._pDepthRenderer.textureRatioX = 1;\n\t\t\tthis._pDepthRenderer.textureRatioY = 1;\n\t\t\tthis._pDepthRenderer._iRender(entityCollector);\n\t\t}\n\n\t\tthis._pDepthRenderer.disableColor = false;\n\t}\n\n\n\t/**\n\t *\n\t */\n\tpublic pRenderSceneDepthToTexture(entityCollector:EntityCollector)\n\t{\n\t\tif (this._pDepthTextureInvalid || !this._pDepthRender)\n\t\t\tthis.initDepthTexture( this._pStage.context);\n\n\t\tthis._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX;\n\t\tthis._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY;\n\t\tthis._pDepthRenderer._iRender(entityCollector, this._pDepthRender);\n\t}\n\n\n\t/**\n\t * Updates the backbuffer dimensions.\n\t */\n\tpublic pUpdateBackBuffer()\n\t{\n\t\t// No reason trying to configure back buffer if there is no context available.\n\t\t// Doing this anyway (and relying on _stage to cache width/height for\n\t\t// context does get available) means usesSoftwareRendering won't be reliable.\n\t\tif (this._pStage.context && !this._shareContext) {\n\t\t\tif (this._width && this._height) {\n\t\t\t\tthis._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true);\n\t\t\t\tthis._pBackBufferInvalid = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic iSetStage(value:Stage)\n\t{\n\t\tsuper.iSetStage(value);\n\n\t\tthis._pDistanceRenderer.iSetStage(value);\n\t\tthis._pDepthRenderer.iSetStage(value);\n\t}\n\n\t/**\n\t *\n\t */\n\tprivate initDepthTexture(context:IContextStageGL):void\n\t{\n\t\tthis._pDepthTextureInvalid = false;\n\n\t\tif (this._pDepthRender)\n\t\t\tthis._pDepthRender.dispose();\n\n\t\tthis._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight);\n\t}\n}\n\nexport = DefaultRenderer;", + "import Plane3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Plane3D\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ShadowCasterCollector\t\t= require(\"awayjs-display/lib/traverse/ShadowCasterCollector\");\n\nimport MaterialData\t\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialData\");\nimport MaterialPassData\t\t\t\t= require(\"awayjs-stagegl/lib/pool/MaterialPassData\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport RendererBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/render/RendererBase\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBlendFactor\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport MaterialPassBase\t\t\t\t= require(\"awayjs-stagegl/lib/materials/passes/MaterialPassBase\");\n\n\n/**\n * The DepthRenderer class renders 32-bit depth information encoded as RGBA\n *\n * @class away.render.DepthRenderer\n */\nclass DepthRenderer extends RendererBase\n{\n\tprivate _pass:MaterialPassBase;\n\tprivate _renderBlended:boolean;\n\tprivate _disableColor:boolean;\n\n\t/**\n\t * Creates a new DepthRenderer object.\n\t * @param renderBlended Indicates whether semi-transparent objects should be rendered.\n\t * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based\n\t */\n\tconstructor(pass:MaterialPassBase, renderBlended:boolean = false)\n\t{\n\t\tsuper();\n\n\t\tthis._pass = pass;\n\n\t\tthis._renderBlended = renderBlended;\n\t\tthis._iBackgroundR = 1;\n\t\tthis._iBackgroundG = 1;\n\t\tthis._iBackgroundB = 1;\n\n\t}\n\n\tpublic get disableColor():boolean\n\t{\n\t\treturn this._disableColor;\n\t}\n\n\tpublic set disableColor(value:boolean)\n\t{\n\t\tthis._disableColor = value;\n\t}\n\n\tpublic _iRenderCascades(entityCollector:ShadowCasterCollector, target:TextureProxyBase, numCascades:number, scissorRects:Array, cameras:Array)\n\t{\n\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setRenderTarget(target, true, 0);\n\t\tthis._pContext.clear(1, 1, 1, 1, 1, 0);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS);\n\n\t\tvar head:RenderableBase = this._pOpaqueRenderableHead;\n\n\t\tvar first:boolean = true;\n\n\t\tfor (var i:number = numCascades - 1; i >= 0; --i) {\n\t\t\tthis._pStage.scissorRect = scissorRects[i];\n\t\t\tthis.drawCascadeRenderables(head, cameras[i], first? null : cameras[i].frustumPlanes);\n\t\t\tfirst = false;\n\t\t}\n\n\t\t//line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED!\n\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL);\n\n\t\tthis._pStage.scissorRect = null;\n\n\t}\n\n\tprivate drawCascadeRenderables(renderable:RenderableBase, camera:Camera, cullPlanes:Array)\n\t{\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\trenderable2 = renderable;\n\n\t\t\tactivePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile);\n\n\t\t\t//TODO: generalise this test\n\t\t\tif (activePass.key == \"\")\n\t\t\t\tthis._pContext.calcAnimationCode(renderable.material, activePass);\n\n\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\tdo {\n\t\t\t\t// if completely in front, it will fall in a different cascade\n\t\t\t\t// do not use near and far planes\n\t\t\t\tif (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) {\n\t\t\t\t\trenderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\t\t\t\t} else {\n\t\t\t\t\trenderable2.cascaded = true;\n\t\t\t\t}\n\n\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t} while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded);\n\n\t\t\trenderable.material._iDeactivatePass(activePass, this._pStage);\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic pDraw(entityCollector:EntityCollector, target:TextureProxyBase)\n\t{\n\t\tthis.pCollectRenderables(entityCollector);\n\n\t\tthis._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\n\t\tthis._pContext.setDepthTest(true, ContextGLCompareMode.LESS);\n\n\t\tthis.drawRenderables(this._pOpaqueRenderableHead, entityCollector);\n\n\t\tif (this._disableColor)\n\t\t\tthis._pContext.setColorMask(false, false, false, false);\n\n\t\tif (this._renderBlended)\n\t\t\tthis.drawRenderables(this._pBlendedRenderableHead, entityCollector);\n\n\t\tif (this._disableColor)\n\t\t\tthis._pContext.setColorMask(true, true, true, true);\n\t}\n\n\t/**\n\t * Draw a list of renderables.\n\t * @param renderables The renderables to draw.\n\t * @param entityCollector The EntityCollector containing all potentially visible information.\n\t */\n\tprivate drawRenderables(renderable:RenderableBase, entityCollector:EntityCollector)\n\t{\n\t\tvar activePass:MaterialPassData;\n\t\tvar activeMaterial:MaterialData;\n\t\tvar context:IContextStageGL = this._pStage.context;\n\t\tvar camera:Camera = entityCollector.camera;\n\t\tvar renderable2:RenderableBase;\n\n\t\twhile (renderable) {\n\t\t\tactiveMaterial = context.getMaterial(renderable.material, this._pStage.profile);\n\n\t\t\t// otherwise this would result in depth rendered anyway because fragment shader kil is ignored\n\t\t\tif (this._disableColor && renderable.material.alphaThreshold != 0) {\n\t\t\t\trenderable2 = renderable;\n\t\t\t\t// fast forward\n\t\t\t\tdo {\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\t\t\t} else {\n\t\t\t\trenderable2 = renderable;\n\n\t\t\t\tactivePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile);\n\n\t\t\t\t//TODO: generalise this test\n\t\t\t\tif (activePass.key == \"\")\n\t\t\t\t\tthis._pContext.calcAnimationCode(renderable.material, activePass);\n\n\t\t\t\trenderable.material._iActivatePass(activePass, this._pStage, camera);\n\n\t\t\t\tdo {\n\t\t\t\t\trenderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix);\n\n\t\t\t\t\trenderable2 = renderable2.next;\n\n\t\t\t\t} while (renderable2 && renderable2.material == renderable.material);\n\n\t\t\t\trenderable.material._iDeactivatePass(activePass, this._pStage);\n\t\t\t}\n\n\t\t\trenderable = renderable2;\n\t\t}\n\t}\n}\n\nexport = DepthRenderer;", + "import Event\t\t\t\t\t\t= require(\"awayjs-core/lib/events/Event\");\n\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\n\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport ContextGLBlendFactor\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLBlendFactor\");\nimport ContextGLVertexBufferFormat\t= require(\"awayjs-stagegl/lib/base/ContextGLVertexBufferFormat\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport IIndexBuffer\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/IIndexBuffer\");\nimport ITexture\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/ITexture\");\nimport IVertexBuffer\t\t\t\t= require(\"awayjs-stagegl/lib/base/IVertexBuffer\");\nimport Filter3DBase\t\t\t\t\t= require(\"awayjs-stagegl/lib/filters/Filter3DBase\");\nimport Filter3DTaskBase\t\t\t\t= require(\"awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\n\n/**\n * @class away.render.Filter3DRenderer\n */\nclass Filter3DRenderer\n{\n\tprivate _filters:Array;\n\tprivate _tasks:Array;\n\tprivate _filterTasksInvalid:boolean;\n\tprivate _mainInputTexture:ITexture;\n\tprivate _requireDepthRender:boolean;\n\tprivate _rttManager:RTTBufferManager;\n\tprivate _stage:Stage;\n\tprivate _filterSizesInvalid:boolean = true;\n\tprivate _onRTTResizeDelegate:(event:Event) => void;\n\n\tconstructor(stage:Stage)\n\t{\n\t\tthis._onRTTResizeDelegate = (event:Event) => this.onRTTResize(event);\n\n\t\tthis._stage = stage;\n\t\tthis._rttManager = RTTBufferManager.getInstance(stage);\n\t\tthis._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate);\n\n\t}\n\n\tprivate onRTTResize(event:Event)\n\t{\n\t\tthis._filterSizesInvalid = true;\n\t}\n\n\tpublic get requireDepthRender():boolean\n\t{\n\t\treturn this._requireDepthRender;\n\t}\n\n\tpublic getMainInputTexture(stage:Stage):ITexture\n\t{\n\t\tif (this._filterTasksInvalid) {\n\n\t\t\tthis.updateFilterTasks(stage);\n\n\t\t}\n\n\t\treturn this._mainInputTexture;\n\t}\n\n\tpublic get filters():Filter3DBase[]\n\t{\n\t\treturn this._filters;\n\t}\n\n\tpublic set filters(value:Filter3DBase[])\n\t{\n\t\tthis._filters = value;\n\n\t\tthis._filterTasksInvalid = true;\n\n\t\tthis._requireDepthRender = false;\n\n\t\tif (!this._filters) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tfor (var i:number = 0; i < this._filters.length; ++i) {\n\n\t\t\t// TODO: check logic:\n\t\t\t// this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender )\n\n\t\t\tvar s:any = this._filters[i];\n\t\t\tvar b:boolean = ( s.requireDepthRender == null )? false : s.requireDepthRender;\n\n\t\t\tthis._requireDepthRender = this._requireDepthRender || b;\n\n\t\t}\n\n\t\tthis._filterSizesInvalid = true;\n\n\t}\n\n\tprivate updateFilterTasks(stage:Stage)\n\t{\n\t\tvar len:number;\n\n\t\tif (this._filterSizesInvalid) {\n\n\t\t\tthis.updateFilterSizes();\n\n\t\t}\n\n\t\tif (!this._filters) {\n\t\t\tthis._tasks = null;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tasks = new Array();\n\n\t\tlen = this._filters.length - 1;\n\n\t\tvar filter:Filter3DBase;\n\n\t\tfor (var i:number = 0; i <= len; ++i) {\n\n\t\t\t// make sure all internal tasks are linked together\n\t\t\tfilter = this._filters[i];\n\n\t\t\t// TODO: check logic\n\t\t\t// filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage);\n\n\t\t\tfilter.setRenderTargets(i == len? null : this._filters[i + 1].getMainInputTexture(stage), stage);\n\n\t\t\tthis._tasks = this._tasks.concat(filter.tasks);\n\n\t\t}\n\n\t\tthis._mainInputTexture = this._filters[0].getMainInputTexture(stage);\n\n\t}\n\n\tpublic render(stage:Stage, camera:Camera, depthTexture:ITexture)\n\t{\n\t\tvar len:number;\n\t\tvar i:number;\n\t\tvar task:Filter3DTaskBase;\n\t\tvar context:IContextStageGL = stage.context;\n\n\t\tvar indexBuffer:IIndexBuffer = this._rttManager.indexBuffer;\n\n\t\tvar vertexBuffer:IVertexBuffer = this._rttManager.renderToTextureVertexBuffer;\n\n\t\tif (!this._filters) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._filterSizesInvalid) {\n\t\t\tthis.updateFilterSizes();\n\t\t}\n\n\t\tif (this._filterTasksInvalid) {\n\t\t\tthis.updateFilterTasks(stage);\n\t\t}\n\n\t\tlen = this._filters.length;\n\n\t\tfor (i = 0; i < len; ++i) {\n\t\t\tthis._filters[i].update(stage, camera);\n\t\t}\n\n\t\tlen = this._tasks.length;\n\n\t\tif (len > 1) {\n\t\t\tcontext.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t\tcontext.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t}\n\n\t\tfor (i = 0; i < len; ++i) {\n\n\t\t\ttask = this._tasks[i];\n\n\t\t\t//stage.setRenderTarget(task.target); //TODO\n\n\t\t\tif (!task.target) {\n\n\t\t\t\tstage.scissorRect = null;\n\t\t\t\tvertexBuffer = this._rttManager.renderToScreenVertexBuffer;\n\t\t\t\tcontext.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2);\n\t\t\t\tcontext.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2);\n\n\t\t\t}\n\n\t\t\tcontext.setTextureAt(0, task.getMainInputTexture(stage));\n\t\t\tcontext.setProgram(task.getProgram(stage));\n\t\t\tcontext.clear(0.0, 0.0, 0.0, 0.0);\n\n\t\t\ttask.activate(stage, camera, depthTexture);\n\n\t\t\tcontext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO);\n\t\t\tcontext.drawTriangles(indexBuffer, 0, 2);\n\n\t\t\ttask.deactivate(stage);\n\t\t}\n\n\t\tcontext.setTextureAt(0, null);\n\t\tcontext.setVertexBufferAt(0, null);\n\t\tcontext.setVertexBufferAt(1, null);\n\t}\n\n\tprivate updateFilterSizes()\n\t{\n\t\tfor (var i:number = 0; i < this._filters.length; ++i) {\n\t\t\tthis._filters[i].textureWidth = this._rttManager.textureWidth;\n\t\t\tthis._filters[i].textureHeight = this._rttManager.textureHeight;\n\t\t}\n\n\t\tthis._filterSizesInvalid = true;\n\n\t}\n\n\tpublic dispose()\n\t{\n\t\tthis._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate);\n\t\tthis._rttManager = null;\n\t\tthis._stage = null;\n\t}\n}\n\nexport = Filter3DRenderer;", + "import BitmapData\t\t\t\t\t= require(\"awayjs-core/lib/base/BitmapData\");\nimport Matrix3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Matrix3D\");\nimport Point\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Point\");\nimport Rectangle\t\t\t\t\t= require(\"awayjs-core/lib/geom/Rectangle\");\nimport Vector3D\t\t\t\t\t\t= require(\"awayjs-core/lib/geom/Vector3D\");\nimport AbstractMethodError\t\t\t= require(\"awayjs-core/lib/errors/AbstractMethodError\");\nimport EventDispatcher\t\t\t\t= require(\"awayjs-core/lib/events/EventDispatcher\");\nimport TextureProxyBase\t\t\t\t= require(\"awayjs-core/lib/textures/TextureProxyBase\");\n\nimport LineSubMesh\t\t\t\t\t= require(\"awayjs-display/lib/base/LineSubMesh\");\nimport TriangleSubMesh\t\t\t\t= require(\"awayjs-display/lib/base/TriangleSubMesh\");\nimport Stage\t\t\t\t\t\t= require(\"awayjs-stagegl/lib/base/Stage\");\nimport EntityListItem\t\t\t\t= require(\"awayjs-display/lib/pool/EntityListItem\");\nimport RenderablePool\t\t\t\t= require(\"awayjs-display/lib/pool/RenderablePool\");\nimport IEntitySorter\t\t\t\t= require(\"awayjs-display/lib/sort/IEntitySorter\");\nimport RenderableMergeSort\t\t\t= require(\"awayjs-display/lib/sort/RenderableMergeSort\");\nimport IRenderer\t\t\t\t\t= require(\"awayjs-display/lib/render/IRenderer\");\nimport Billboard\t\t\t\t\t= require(\"awayjs-display/lib/entities/Billboard\");\nimport Camera\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Camera\");\nimport IEntity\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/IEntity\");\nimport Skybox\t\t\t\t\t\t= require(\"awayjs-display/lib/entities/Skybox\");\n\nimport RendererEvent\t\t\t\t= require(\"awayjs-display/lib/events/RendererEvent\");\nimport StageEvent\t\t\t\t\t= require(\"awayjs-display/lib/events/StageEvent\");\nimport MaterialBase\t\t\t\t\t= require(\"awayjs-display/lib/materials/MaterialBase\");\n\nimport EntityCollector\t\t\t\t= require(\"awayjs-display/lib/traverse/EntityCollector\");\nimport ICollector\t\t\t\t\t= require(\"awayjs-display/lib/traverse/ICollector\");\nimport ShadowCasterCollector\t\t= require(\"awayjs-display/lib/traverse/ShadowCasterCollector\");\n\nimport BillboardRenderable\t\t\t= require(\"awayjs-stagegl/lib/pool/BillboardRenderable\");\nimport LineSubMeshRenderable\t\t= require(\"awayjs-stagegl/lib/pool/LineSubMeshRenderable\");\nimport RenderableBase\t\t\t\t= require(\"awayjs-stagegl/lib/pool/RenderableBase\");\nimport TriangleSubMeshRenderable\t= require(\"awayjs-stagegl/lib/pool/TriangleSubMeshRenderable\");\nimport ContextGLCompareMode\t\t\t= require(\"awayjs-stagegl/lib/base/ContextGLCompareMode\");\nimport IContextStageGL\t\t\t\t= require(\"awayjs-stagegl/lib/base/IContextStageGL\");\nimport RTTBufferManager\t\t\t\t= require(\"awayjs-stagegl/lib/managers/RTTBufferManager\");\nimport DefaultMaterialManager\t\t= require(\"awayjs-stagegl/lib/materials/utils/DefaultMaterialManager\");\n\n/**\n * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the\n * contents of a partition\n *\n * @class away.render.RendererBase\n */\nclass RendererBase extends EventDispatcher\n{\n\tprivate _billboardRenderablePool:RenderablePool;\n\tprivate _triangleSubMeshRenderablePool:RenderablePool;\n\tprivate _lineSubMeshRenderablePool:RenderablePool;\n\n\tpublic _pContext:IContextStageGL;\n\tpublic _pStage:Stage;\n\n\tpublic _pCamera:Camera;\n\tpublic _iEntryPoint:Vector3D;\n\tpublic _pCameraForward:Vector3D;\n\n\tpublic _pRttBufferManager:RTTBufferManager;\n\tprivate _viewPort:Rectangle = new Rectangle();\n\tprivate _viewportDirty:boolean;\n\tprivate _scissorDirty:boolean;\n\n\tpublic _pBackBufferInvalid:boolean = true;\n\tpublic _pDepthTextureInvalid:boolean = true;\n\tpublic _depthPrepass:boolean = false;\n\tprivate _backgroundR:number = 0;\n\tprivate _backgroundG:number = 0;\n\tprivate _backgroundB:number = 0;\n\tprivate _backgroundAlpha:number = 1;\n\tpublic _shareContext:boolean = false;\n\n\t// only used by renderers that need to render geometry to textures\n\tpublic _width:number;\n\tpublic _height:number;\n\n\tpublic textureRatioX:number = 1;\n\tpublic textureRatioY:number = 1;\n\n\tprivate _snapshotBitmapData:BitmapData;\n\tprivate _snapshotRequired:boolean;\n\n\tpublic _pRttViewProjectionMatrix:Matrix3D = new Matrix3D();\n\n\tprivate _localPos:Point = new Point();\n\tprivate _globalPos:Point = new Point();\n\tpublic _pScissorRect:Rectangle = new Rectangle();\n\n\tprivate _scissorUpdated:RendererEvent;\n\tprivate _viewPortUpdated:RendererEvent;\n\n\tprivate _onContextUpdateDelegate:Function;\n\tprivate _onViewportUpdatedDelegate;\n\n\tpublic _pNumTriangles:number = 0;\n\n\tpublic _pOpaqueRenderableHead:RenderableBase;\n\tpublic _pBlendedRenderableHead:RenderableBase;\n\n\t/**\n\t *\n\t */\n\tpublic get numTriangles():number\n\t{\n\t\treturn this._pNumTriangles;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic renderableSorter:IEntitySorter;\n\n\n\t/**\n\t * A viewPort rectangle equivalent of the Stage size and position.\n\t */\n\tpublic get viewPort():Rectangle\n\t{\n\t\treturn this._viewPort;\n\t}\n\n\t/**\n\t * A scissor rectangle equivalent of the view size and position.\n\t */\n\tpublic get scissorRect():Rectangle\n\t{\n\t\treturn this._pScissorRect;\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get x():number\n\t{\n\t\treturn this._localPos.x;\n\t}\n\n\tpublic set x(value:number)\n\t{\n\t\tif (this.x == value)\n\t\t\treturn;\n\n\t\tthis._globalPos.x = this._localPos.x = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get y():number\n\t{\n\t\treturn this._localPos.y;\n\t}\n\n\tpublic set y(value:number)\n\t{\n\t\tif (this.y == value)\n\t\t\treturn;\n\n\t\tthis._globalPos.y = this._localPos.y = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get width():number\n\t{\n\t\treturn this._width;\n\t}\n\n\tpublic set width(value:number)\n\t{\n\t\tif (this._width == value)\n\t\t\treturn;\n\n\t\tthis._width = value;\n\t\tthis._pScissorRect.width = value;\n\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.viewWidth = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t\tthis._pDepthTextureInvalid = true;\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic get height():number\n\t{\n\t\treturn this._height;\n\t}\n\n\tpublic set height(value:number)\n\t{\n\t\tif (this._height == value)\n\t\t\treturn;\n\n\t\tthis._height = value;\n\t\tthis._pScissorRect.height = value;\n\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.viewHeight = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t\tthis._pDepthTextureInvalid = true;\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\t/**\n\t * Creates a new RendererBase object.\n\t */\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\tthis._onViewportUpdatedDelegate = (event:StageEvent) => this.onViewportUpdated(event);\n\n\t\tthis._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable);\n\t\tthis._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable);\n\t\tthis._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable);\n\n\t\tthis._onContextUpdateDelegate = (event:Event) => this.onContextUpdate(event);\n\n\t\t//default sorting algorithm\n\t\tthis.renderableSorter = new RenderableMergeSort();\n\t}\n\n\tpublic _iCreateEntityCollector():ICollector\n\t{\n\t\treturn new EntityCollector();\n\t}\n\n\t/**\n\t * The background color's red component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundR():number\n\t{\n\t\treturn this._backgroundR;\n\t}\n\n\tpublic set _iBackgroundR(value:number)\n\t{\n\t\tif (this._backgroundR == value)\n\t\t\treturn;\n\n\t\tthis._backgroundR = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The background color's green component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundG():number\n\t{\n\t\treturn this._backgroundG;\n\t}\n\n\tpublic set _iBackgroundG(value:number)\n\t{\n\t\tif (this._backgroundG == value)\n\t\t\treturn;\n\n\t\tthis._backgroundG = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The background color's blue component, used when clearing.\n\t *\n\t * @private\n\t */\n\tpublic get _iBackgroundB():number\n\t{\n\t\treturn this._backgroundB;\n\t}\n\n\tpublic set _iBackgroundB(value:number)\n\t{\n\t\tif (this._backgroundB == value)\n\t\t\treturn;\n\n\t\tthis._backgroundB = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/**\n\t * The Stage that will provide the ContextGL used for rendering.\n\t */\n\tpublic get stage():Stage\n\t{\n\t\treturn this._pStage;\n\t}\n\n\tpublic set stage(value:Stage)\n\t{\n\t\tif (value == this._pStage)\n\t\t\treturn;\n\n\t\tthis.iSetStage(value);\n\t}\n\n\tpublic iSetStage(value:Stage)\n\t{\n\t\tif (this._pStage) {\n\t\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\t\t}\n\n\t\tif (!value) {\n\t\t\tthis._pStage = null;\n\t\t\tthis._pContext = null;\n\t\t} else {\n\t\t\tthis._pStage = value;\n\t\t\tthis._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\t\tthis._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\n\t\t\t/*\n\t\t\t if (_backgroundImageRenderer)\n\t\t\t _backgroundImageRenderer.stage = value;\n\t\t\t */\n\t\t\tif (this._pStage.context)\n\t\t\t\tthis._pContext = this._pStage.context;\n\t\t}\n\n\t\tthis._pBackBufferInvalid = true;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks\n\t * to share the same ContextGL object.\n\t */\n\tpublic get shareContext():boolean\n\t{\n\t\treturn this._shareContext;\n\t}\n\n\tpublic set shareContext(value:boolean)\n\t{\n\t\tif (this._shareContext == value)\n\t\t\treturn;\n\n\t\tthis._shareContext = value;\n\n\t\tthis.updateGlobalPos();\n\t}\n\n\t/**\n\t * Disposes the resources used by the RendererBase.\n\t */\n\tpublic dispose()\n\t{\n\t\tif (this._pRttBufferManager)\n\t\t\tthis._pRttBufferManager.dispose();\n\n\t\tthis._pRttBufferManager = null;\n\n\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate);\n\t\tthis._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate);\n\t\tthis._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate);\n\n\t\tthis._pStage = null;\n\n\t\t/*\n\t\t if (_backgroundImageRenderer) {\n\t\t _backgroundImageRenderer.dispose();\n\t\t _backgroundImageRenderer = null;\n\t\t }\n\t\t */\n\t}\n\n\tpublic render(entityCollector:ICollector)\n\t{\n\t\tthis._viewportDirty = false;\n\t\tthis._scissorDirty = false;\n\t}\n\n\t/**\n\t * Renders the potentially visible geometry to the back buffer or texture.\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t * @param target An option target texture to render to.\n\t * @param surfaceSelector The index of a CubeTexture's face to render to.\n\t * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted.\n\t */\n\tpublic _iRender(entityCollector:ICollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\t//TODO refactor setTarget so that rendertextures are created before this check\n\t\tif (!this._pStage || !this._pContext)\n\t\t\treturn;\n\n\t\tthis._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection);\n\t\tthis._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1);\n\n\t\tthis.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector);\n\n\t\t// generate mip maps on target (if target exists) //TODO\n\t\t//if (target)\n\t\t//\t(target).generateMipmaps();\n\n\t\t// clear buffers\n\t\tfor (var i:number = 0; i < 8; ++i) {\n\t\t\tthis._pContext.setVertexBufferAt(i, null);\n\t\t\tthis._pContext.setTextureAt(i, null);\n\t\t}\n\t}\n\n\tpublic _iRenderCascades(entityCollector:ShadowCasterCollector, target:TextureProxyBase, numCascades:number, scissorRects:Array, cameras:Array)\n\t{\n\n\t}\n\n\tpublic pCollectRenderables(entityCollector:ICollector)\n\t{\n\t\t//reset head values\n\t\tthis._pBlendedRenderableHead = null;\n\t\tthis._pOpaqueRenderableHead = null;\n\t\tthis._pNumTriangles = 0;\n\n\t\t//grab entity head\n\t\tvar item:EntityListItem = entityCollector.entityHead;\n\n\t\t//set temp values for entry point and camera forward vector\n\t\tthis._pCamera = entityCollector.camera;\n\t\tthis._iEntryPoint = this._pCamera.scenePosition;\n\t\tthis._pCameraForward = this._pCamera.transform.forwardVector;\n\n\t\t//iterate through all entities\n\t\twhile (item) {\n\t\t\titem.entity._iCollectRenderables(this);\n\t\t\titem = item.next;\n\t\t}\n\n\t\t//sort the resulting renderables\n\t\tthis._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead);\n\t\tthis._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead);\n\t}\n\n\t/**\n\t * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up.\n\t *\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t * @param target An option target texture to render to.\n\t * @param surfaceSelector The index of a CubeTexture's face to render to.\n\t * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted.\n\t */\n\tpublic pExecuteRender(entityCollector:ICollector, target:TextureProxyBase = null, scissorRect:Rectangle = null, surfaceSelector:number = 0)\n\t{\n\t\tthis._pContext.setRenderTarget(target, true, surfaceSelector);\n\n\t\tif ((target || !this._shareContext) && !this._depthPrepass)\n\t\t\tthis._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0);\n\n\t\tthis._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS);\n\n\t\tthis._pStage.scissorRect = scissorRect;\n\n\t\t/*\n\t\t if (_backgroundImageRenderer)\n\t\t _backgroundImageRenderer.render();\n\t\t */\n\n\t\tthis.pDraw(entityCollector, target);\n\n\t\t//line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED!\n\t\t//this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie\n\n\t\tif (!this._shareContext) {\n\t\t\tif (this._snapshotRequired && this._snapshotBitmapData) {\n\t\t\t\tthis._pContext.drawToBitmapData(this._snapshotBitmapData);\n\t\t\t\tthis._snapshotRequired = false;\n\t\t\t}\n\t\t}\n\n\t\tthis._pStage.scissorRect = null;\n\t}\n\n\t/*\n\t * Will draw the renderer's output on next render to the provided bitmap data.\n\t * */\n\tpublic queueSnapshot(bmd:BitmapData)\n\t{\n\t\tthis._snapshotRequired = true;\n\t\tthis._snapshotBitmapData = bmd;\n\t}\n\n\t/**\n\t * Performs the actual drawing of geometry to the target.\n\t * @param entityCollector The EntityCollector object containing the potentially visible geometry.\n\t */\n\tpublic pDraw(entityCollector:ICollector, target:TextureProxyBase)\n\t{\n\t\tthrow new AbstractMethodError();\n\t}\n\n\t/**\n\t * Assign the context once retrieved\n\t */\n\tprivate onContextUpdate(event:Event)\n\t{\n\t\tthis._pContext = this._pStage.context;\n\t}\n\n\tpublic get _iBackgroundAlpha():number\n\t{\n\t\treturn this._backgroundAlpha;\n\t}\n\n\tpublic set _iBackgroundAlpha(value:number)\n\t{\n\t\tif (this._backgroundAlpha == value)\n\t\t\treturn;\n\n\t\tthis._backgroundAlpha = value;\n\n\t\tthis._pBackBufferInvalid = true;\n\t}\n\n\t/*\n\t public get iBackground():Texture2DBase\n\t {\n\t return this._background;\n\t }\n\t */\n\n\t/*\n\t public set iBackground(value:Texture2DBase)\n\t {\n\t if (this._backgroundImageRenderer && !value) {\n\t this._backgroundImageRenderer.dispose();\n\t this._backgroundImageRenderer = null;\n\t }\n\n\t if (!this._backgroundImageRenderer && value)\n\t {\n\n\t this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage);\n\n\t }\n\n\n\t this._background = value;\n\n\t if (this._backgroundImageRenderer)\n\t this._backgroundImageRenderer.texture = value;\n\t }\n\t */\n\t/*\n\t public get backgroundImageRenderer():BackgroundImageRenderer\n\t {\n\t return _backgroundImageRenderer;\n\t }\n\t */\n\n\n\t/**\n\t * @private\n\t */\n\tprivate notifyScissorUpdate()\n\t{\n\t\tif (this._scissorDirty)\n\t\t\treturn;\n\n\t\tthis._scissorDirty = true;\n\n\t\tif (!this._scissorUpdated)\n\t\t\tthis._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED);\n\n\t\tthis.dispatchEvent(this._scissorUpdated);\n\t}\n\n\n\t/**\n\t * @private\n\t */\n\tprivate notifyViewportUpdate()\n\t{\n\t\tif (this._viewportDirty)\n\t\t\treturn;\n\n\t\tthis._viewportDirty = true;\n\n\t\tif (!this._viewPortUpdated)\n\t\t\tthis._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED);\n\n\t\tthis.dispatchEvent(this._viewPortUpdated);\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic onViewportUpdated(event:StageEvent)\n\t{\n\t\tthis._viewPort = this._pStage.viewPort;\n\t\t//TODO stop firing viewport updated for every stagegl viewport change\n\n\t\tif (this._shareContext) {\n\t\t\tthis._pScissorRect.x = this._globalPos.x - this._pStage.x;\n\t\t\tthis._pScissorRect.y = this._globalPos.y - this._pStage.y;\n\t\t\tthis.notifyScissorUpdate();\n\t\t}\n\n\t\tthis.notifyViewportUpdate();\n\t}\n\n\t/**\n\t *\n\t */\n\tpublic updateGlobalPos()\n\t{\n\t\tif (this._shareContext) {\n\t\t\tthis._pScissorRect.x = this._globalPos.x - this._viewPort.x;\n\t\t\tthis._pScissorRect.y = this._globalPos.y - this._viewPort.y;\n\t\t} else {\n\t\t\tthis._pScissorRect.x = 0;\n\t\t\tthis._pScissorRect.y = 0;\n\t\t\tthis._viewPort.x = this._globalPos.x;\n\t\t\tthis._viewPort.y = this._globalPos.y;\n\t\t}\n\n\t\tthis.notifyScissorUpdate();\n\t}\n\n\n\t/**\n\t *\n\t * @param billboard\n\t * @protected\n\t */\n\tpublic applyBillboard(billboard:Billboard)\n\t{\n\t\tthis._applyRenderable( this._billboardRenderablePool.getItem(billboard));\n\t}\n\n\t/**\n\t *\n\t * @param triangleSubMesh\n\t */\n\tpublic applyTriangleSubMesh(triangleSubMesh:TriangleSubMesh)\n\t{\n\t\tthis._applyRenderable( this._triangleSubMeshRenderablePool.getItem(triangleSubMesh));\n\t}\n\n\t/**\n\t *\n\t * @param lineSubMesh\n\t */\n\tpublic applyLineSubMesh(lineSubMesh:LineSubMesh)\n\t{\n\t\tthis._applyRenderable( this._lineSubMeshRenderablePool.getItem(lineSubMesh));\n\t}\n\n\t/**\n\t *\n\t * @param renderable\n\t * @protected\n\t */\n\tprivate _applyRenderable(renderable:RenderableBase)\n\t{\n\t\tvar material:MaterialBase = renderable.materialOwner.material;\n\t\tvar entity:IEntity = renderable.sourceEntity;\n\t\tvar position:Vector3D = entity.scenePosition;\n\n\t\tif (!material)\n\t\t\tmaterial = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner);\n\n\t\t//update material if invalidated\n\t\tmaterial._iUpdateMaterial();\n\n\t\t//set ids for faster referencing\n\t\trenderable.material = material;\n\t\trenderable.materialId = material._iMaterialId;\n\t\trenderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId;\n\t\trenderable.cascaded = false;\n\n\t\t// project onto camera's z-axis\n\t\tposition = this._iEntryPoint.subtract(position);\n\t\trenderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward);\n\n\t\t//store reference to scene transform\n\t\trenderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera);\n\n\t\tif (material.requiresBlending) {\n\t\t\trenderable.next = this._pBlendedRenderableHead;\n\t\t\tthis._pBlendedRenderableHead = renderable;\n\t\t} else {\n\t\t\trenderable.next = this._pOpaqueRenderableHead;\n\t\t\tthis._pOpaqueRenderableHead = renderable;\n\t\t}\n\n\t\tthis._pNumTriangles += renderable.numTriangles;\n\n\t\t//handle any overflow for renderables with data that exceeds GPU limitations\n\t\tif (renderable.overflow)\n\t\t\tthis._applyRenderable(renderable.overflow);\n\t}\n}\n\nexport = RendererBase;", "/*!\tSWFObject v2.2 \n\tis released under the MIT License \n*/\n\nvar swfobject = function() {\n\t\n\tvar UNDEF = \"undefined\",\n\t\tOBJECT = \"object\",\n\t\tSHOCKWAVE_FLASH = \"Shockwave Flash\",\n\t\tSHOCKWAVE_FLASH_AX = \"ShockwaveFlash.ShockwaveFlash\",\n\t\tFLASH_MIME_TYPE = \"application/x-shockwave-flash\",\n\t\tEXPRESS_INSTALL_ID = \"SWFObjectExprInst\",\n\t\tON_READY_STATE_CHANGE = \"onreadystatechange\",\n\t\t\n\t\twin = window,\n\t\tdoc = document,\n\t\tnav = navigator,\n\t\t\n\t\tplugin = false,\n\t\tdomLoadFnArr = [main],\n\t\tregObjArr = [],\n\t\tobjIdArr = [],\n\t\tlistenersArr = [],\n\t\tstoredAltContent,\n\t\tstoredAltContentId,\n\t\tstoredCallbackFn,\n\t\tstoredCallbackObj,\n\t\tisDomLoaded = false,\n\t\tisExpressInstallActive = false,\n\t\tdynamicStylesheet,\n\t\tdynamicStylesheetMedia,\n\t\tautoHideShow = true,\n\t\n\t/* Centralized function for browser feature detection\n\t\t- User agent string detection is only used when no good alternative is possible\n\t\t- Is executed directly for optimal performance\n\t*/\t\n\tua = function() {\n\t\tvar w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,\n\t\t\tu = nav.userAgent.toLowerCase(),\n\t\t\tp = nav.platform.toLowerCase(),\n\t\t\twindows = p ? /win/.test(p) : /win/.test(u),\n\t\t\tmac = p ? /mac/.test(p) : /mac/.test(u),\n\t\t\twebkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/, \"$1\")) : false, // returns either the webkit version or false if not webkit\n\t\t\tie = !+\"\\v1\", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html\n\t\t\tplayerVersion = [0,0,0],\n\t\t\td = null;\n\t\tif (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {\n\t\t\td = nav.plugins[SHOCKWAVE_FLASH].description;\n\t\t\tif (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+\n\t\t\t\tplugin = true;\n\t\t\t\tie = false; // cascaded feature detection for Internet Explorer\n\t\t\t\td = d.replace(/^.*\\s+(\\S+\\s+\\S+$)/, \"$1\");\n\t\t\t\tplayerVersion[0] = parseInt(d.replace(/^(.*)\\..*$/, \"$1\"), 10);\n\t\t\t\tplayerVersion[1] = parseInt(d.replace(/^.*\\.(.*)\\s.*$/, \"$1\"), 10);\n\t\t\t\tplayerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, \"$1\"), 10) : 0;\n\t\t\t}\n\t\t}\n\t\telse if (typeof win.ActiveXObject != UNDEF) {\n\t\t\ttry {\n\t\t\t\tvar a = new ActiveXObject(SHOCKWAVE_FLASH_AX);\n\t\t\t\tif (a) { // a will return null when ActiveX is disabled\n\t\t\t\t\td = a.GetVariable(\"$version\");\n\t\t\t\t\tif (d) {\n\t\t\t\t\t\tie = true; // cascaded feature detection for Internet Explorer\n\t\t\t\t\t\td = d.split(\" \")[1].split(\",\");\n\t\t\t\t\t\tplayerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(e) {}\n\t\t}\n\t\treturn { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };\n\t}(),\n\t\n\t/* Cross-browser onDomLoad\n\t\t- Will fire an event as soon as the DOM of a web page is loaded\n\t\t- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/\n\t\t- Regular onload serves as fallback\n\t*/ \n\tonDomLoad = function() {\n\t\tif (!ua.w3) { return; }\n\t\tif ((typeof doc.readyState != UNDEF && doc.readyState == \"complete\") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName(\"body\")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically \n\t\t\tcallDomLoadFunctions();\n\t\t}\n\t\tif (!isDomLoaded) {\n\t\t\tif (typeof doc.addEventListener != UNDEF) {\n\t\t\t\tdoc.addEventListener(\"DOMContentLoaded\", callDomLoadFunctions, false);\n\t\t\t}\t\t\n\t\t\tif (ua.ie && ua.win) {\n\t\t\t\tdoc.attachEvent(ON_READY_STATE_CHANGE, function() {\n\t\t\t\t\tif (doc.readyState == \"complete\") {\n\t\t\t\t\t\tdoc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);\n\t\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (win == top) { // if not inside an iframe\n\t\t\t\t\t(function(){\n\t\t\t\t\t\tif (isDomLoaded) { return; }\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tdoc.documentElement.doScroll(\"left\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\tsetTimeout(arguments.callee, 0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t\t})();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ua.wk) {\n\t\t\t\t(function(){\n\t\t\t\t\tif (isDomLoaded) { return; }\n\t\t\t\t\tif (!/loaded|complete/.test(doc.readyState)) {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t})();\n\t\t\t}\n\t\t\taddLoadEvent(callDomLoadFunctions);\n\t\t}\n\t}();\n\t\n\tfunction callDomLoadFunctions() {\n\t\tif (isDomLoaded) { return; }\n\t\ttry { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early\n\t\t\tvar t = doc.getElementsByTagName(\"body\")[0].appendChild(createElement(\"span\"));\n\t\t\tt.parentNode.removeChild(t);\n\t\t}\n\t\tcatch (e) { return; }\n\t\tisDomLoaded = true;\n\t\tvar dl = domLoadFnArr.length;\n\t\tfor (var i = 0; i < dl; i++) {\n\t\t\tdomLoadFnArr[i]();\n\t\t}\n\t}\n\t\n\tfunction addDomLoadEvent(fn) {\n\t\tif (isDomLoaded) {\n\t\t\tfn();\n\t\t}\n\t\telse { \n\t\t\tdomLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+\n\t\t}\n\t}\n\t\n\t/* Cross-browser onload\n\t\t- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/\n\t\t- Will fire an event as soon as a web page including all of its assets are loaded \n\t */\n\tfunction addLoadEvent(fn) {\n\t\tif (typeof win.addEventListener != UNDEF) {\n\t\t\twin.addEventListener(\"load\", fn, false);\n\t\t}\n\t\telse if (typeof doc.addEventListener != UNDEF) {\n\t\t\tdoc.addEventListener(\"load\", fn, false);\n\t\t}\n\t\telse if (typeof win.attachEvent != UNDEF) {\n\t\t\taddListener(win, \"onload\", fn);\n\t\t}\n\t\telse if (typeof win.onload == \"function\") {\n\t\t\tvar fnOld = win.onload;\n\t\t\twin.onload = function() {\n\t\t\t\tfnOld();\n\t\t\t\tfn();\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\twin.onload = fn;\n\t\t}\n\t}\n\t\n\t/* Main function\n\t\t- Will preferably execute onDomLoad, otherwise onload (as a fallback)\n\t*/\n\tfunction main() { \n\t\tif (plugin) {\n\t\t\ttestPlayerVersion();\n\t\t}\n\t\telse {\n\t\t\tmatchVersions();\n\t\t}\n\t}\n\t\n\t/* Detect the Flash Player version for non-Internet Explorer browsers\n\t\t- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:\n\t\t a. Both release and build numbers can be detected\n\t\t b. Avoid wrong descriptions by corrupt installers provided by Adobe\n\t\t c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports\n\t\t- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available\n\t*/\n\tfunction testPlayerVersion() {\n\t\tvar b = doc.getElementsByTagName(\"body\")[0];\n\t\tvar o = createElement(OBJECT);\n\t\to.setAttribute(\"type\", FLASH_MIME_TYPE);\n\t\tvar t = b.appendChild(o);\n\t\tif (t) {\n\t\t\tvar counter = 0;\n\t\t\t(function(){\n\t\t\t\tif (typeof t.GetVariable != UNDEF) {\n\t\t\t\t\tvar d = t.GetVariable(\"$version\");\n\t\t\t\t\tif (d) {\n\t\t\t\t\t\td = d.split(\" \")[1].split(\",\");\n\t\t\t\t\t\tua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (counter < 10) {\n\t\t\t\t\tcounter++;\n\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tb.removeChild(o);\n\t\t\t\tt = null;\n\t\t\t\tmatchVersions();\n\t\t\t})();\n\t\t}\n\t\telse {\n\t\t\tmatchVersions();\n\t\t}\n\t}\n\t\n\t/* Perform Flash Player and SWF version matching; static publishing only\n\t*/\n\tfunction matchVersions() {\n\t\tvar rl = regObjArr.length;\n\t\tif (rl > 0) {\n\t\t\tfor (var i = 0; i < rl; i++) { // for each registered object element\n\t\t\t\tvar id = regObjArr[i].id;\n\t\t\t\tvar cb = regObjArr[i].callbackFn;\n\t\t\t\tvar cbObj = {success:false, id:id};\n\t\t\t\tif (ua.pv[0] > 0) {\n\t\t\t\t\tvar obj = getElementById(id);\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!\n\t\t\t\t\t\t\tsetVisibility(id, true);\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tcbObj.success = true;\n\t\t\t\t\t\t\t\tcbObj.ref = getObjectById(id);\n\t\t\t\t\t\t\t\tcb(cbObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported\n\t\t\t\t\t\t\tvar att = {};\n\t\t\t\t\t\t\tatt.data = regObjArr[i].expressInstall;\n\t\t\t\t\t\t\tatt.width = obj.getAttribute(\"width\") || \"0\";\n\t\t\t\t\t\t\tatt.height = obj.getAttribute(\"height\") || \"0\";\n\t\t\t\t\t\t\tif (obj.getAttribute(\"class\")) { att.styleclass = obj.getAttribute(\"class\"); }\n\t\t\t\t\t\t\tif (obj.getAttribute(\"align\")) { att.align = obj.getAttribute(\"align\"); }\n\t\t\t\t\t\t\t// parse HTML object param element's name-value pairs\n\t\t\t\t\t\t\tvar par = {};\n\t\t\t\t\t\t\tvar p = obj.getElementsByTagName(\"param\");\n\t\t\t\t\t\t\tvar pl = p.length;\n\t\t\t\t\t\t\tfor (var j = 0; j < pl; j++) {\n\t\t\t\t\t\t\t\tif (p[j].getAttribute(\"name\").toLowerCase() != \"movie\") {\n\t\t\t\t\t\t\t\t\tpar[p[j].getAttribute(\"name\")] = p[j].getAttribute(\"value\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tshowExpressInstall(att, par, id, cb);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF\n\t\t\t\t\t\t\tdisplayAltContent(obj);\n\t\t\t\t\t\t\tif (cb) { cb(cbObj); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\t// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)\n\t\t\t\t\tsetVisibility(id, true);\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tvar o = getObjectById(id); // test whether there is an HTML object element or not\n\t\t\t\t\t\tif (o && typeof o.SetVariable != UNDEF) { \n\t\t\t\t\t\t\tcbObj.success = true;\n\t\t\t\t\t\t\tcbObj.ref = o;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(cbObj);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction getObjectById(objectIdStr) {\n\t\tvar r = null;\n\t\tvar o = getElementById(objectIdStr);\n\t\tif (o && o.nodeName == \"OBJECT\") {\n\t\t\tif (typeof o.SetVariable != UNDEF) {\n\t\t\t\tr = o;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar n = o.getElementsByTagName(OBJECT)[0];\n\t\t\t\tif (n) {\n\t\t\t\t\tr = n;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\t\n\t/* Requirements for Adobe Express Install\n\t\t- only one instance can be active at a time\n\t\t- fp 6.0.65 or higher\n\t\t- Win/Mac OS only\n\t\t- no Webkit engines older than version 312\n\t*/\n\tfunction canExpressInstall() {\n\t\treturn !isExpressInstallActive && hasPlayerVersion(\"6.0.65\") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);\n\t}\n\t\n\t/* Show the Adobe Express Install dialog\n\t\t- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75\n\t*/\n\tfunction showExpressInstall(att, par, replaceElemIdStr, callbackFn) {\n\t\tisExpressInstallActive = true;\n\t\tstoredCallbackFn = callbackFn || null;\n\t\tstoredCallbackObj = {success:false, id:replaceElemIdStr};\n\t\tvar obj = getElementById(replaceElemIdStr);\n\t\tif (obj) {\n\t\t\tif (obj.nodeName == \"OBJECT\") { // static publishing\n\t\t\t\tstoredAltContent = abstractAltContent(obj);\n\t\t\t\tstoredAltContentId = null;\n\t\t\t}\n\t\t\telse { // dynamic publishing\n\t\t\t\tstoredAltContent = obj;\n\t\t\t\tstoredAltContentId = replaceElemIdStr;\n\t\t\t}\n\t\t\tatt.id = EXPRESS_INSTALL_ID;\n\t\t\tif (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = \"310\"; }\n\t\t\tif (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = \"137\"; }\n\t\t\tdoc.title = doc.title.slice(0, 47) + \" - Flash Player Installation\";\n\t\t\tvar pt = ua.ie && ua.win ? \"ActiveX\" : \"PlugIn\",\n\t\t\t\tfv = \"MMredirectURL=\" + encodeURI(window.location).toString().replace(/&/g,\"%26\") + \"&MMplayerType=\" + pt + \"&MMdoctitle=\" + doc.title;\n\t\t\tif (typeof par.flashvars != UNDEF) {\n\t\t\t\tpar.flashvars += \"&\" + fv;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpar.flashvars = fv;\n\t\t\t}\n\t\t\t// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n\t\t\t// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n\t\t\tif (ua.ie && ua.win && obj.readyState != 4) {\n\t\t\t\tvar newObj = createElement(\"div\");\n\t\t\t\treplaceElemIdStr += \"SWFObjectNew\";\n\t\t\t\tnewObj.setAttribute(\"id\", replaceElemIdStr);\n\t\t\t\tobj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf\n\t\t\t\tobj.style.display = \"none\";\n\t\t\t\t(function(){\n\t\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t\tcreateSWF(att, par, replaceElemIdStr);\n\t\t}\n\t}\n\t\n\t/* Functions to abstract and display alternative content\n\t*/\n\tfunction displayAltContent(obj) {\n\t\tif (ua.ie && ua.win && obj.readyState != 4) {\n\t\t\t// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n\t\t\t// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n\t\t\tvar el = createElement(\"div\");\n\t\t\tobj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content\n\t\t\tel.parentNode.replaceChild(abstractAltContent(obj), el);\n\t\t\tobj.style.display = \"none\";\n\t\t\t(function(){\n\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t}\n\t\t\t})();\n\t\t}\n\t\telse {\n\t\t\tobj.parentNode.replaceChild(abstractAltContent(obj), obj);\n\t\t}\n\t} \n\n\tfunction abstractAltContent(obj) {\n\t\tvar ac = createElement(\"div\");\n\t\tif (ua.win && ua.ie) {\n\t\t\tac.innerHTML = obj.innerHTML;\n\t\t}\n\t\telse {\n\t\t\tvar nestedObj = obj.getElementsByTagName(OBJECT)[0];\n\t\t\tif (nestedObj) {\n\t\t\t\tvar c = nestedObj.childNodes;\n\t\t\t\tif (c) {\n\t\t\t\t\tvar cl = c.length;\n\t\t\t\t\tfor (var i = 0; i < cl; i++) {\n\t\t\t\t\t\tif (!(c[i].nodeType == 1 && c[i].nodeName == \"PARAM\") && !(c[i].nodeType == 8)) {\n\t\t\t\t\t\t\tac.appendChild(c[i].cloneNode(true));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ac;\n\t}\n\t\n\t/* Cross-browser dynamic SWF creation\n\t*/\n\tfunction createSWF(attObj, parObj, id) {\n\t\tvar r, el = getElementById(id);\n\t\tif (ua.wk && ua.wk < 312) { return r; }\n\t\tif (el) {\n\t\t\tif (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content\n\t\t\t\tattObj.id = id;\n\t\t\t}\n\t\t\tif (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML\n\t\t\t\tvar att = \"\";\n\t\t\t\tfor (var i in attObj) {\n\t\t\t\t\tif (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tif (i.toLowerCase() == \"data\") {\n\t\t\t\t\t\t\tparObj.movie = attObj[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (i.toLowerCase() == \"styleclass\") { // 'class' is an ECMA4 reserved keyword\n\t\t\t\t\t\t\tatt += ' class=\"' + attObj[i] + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (i.toLowerCase() != \"classid\") {\n\t\t\t\t\t\t\tatt += ' ' + i + '=\"' + attObj[i] + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar par = \"\";\n\t\t\t\tfor (var j in parObj) {\n\t\t\t\t\tif (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tpar += '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tel.outerHTML = '' + par + '';\n\t\t\t\tobjIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)\n\t\t\t\tr = getElementById(attObj.id);\t\n\t\t\t}\n\t\t\telse { // well-behaving browsers\n\t\t\t\tvar o = createElement(OBJECT);\n\t\t\t\to.setAttribute(\"type\", FLASH_MIME_TYPE);\n\t\t\t\tfor (var m in attObj) {\n\t\t\t\t\tif (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tif (m.toLowerCase() == \"styleclass\") { // 'class' is an ECMA4 reserved keyword\n\t\t\t\t\t\t\to.setAttribute(\"class\", attObj[m]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m.toLowerCase() != \"classid\") { // filter out IE specific attribute\n\t\t\t\t\t\t\to.setAttribute(m, attObj[m]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var n in parObj) {\n\t\t\t\t\tif (parObj[n] != Object.prototype[n] && n.toLowerCase() != \"movie\") { // filter out prototype additions from other potential libraries and IE specific param element\n\t\t\t\t\t\tcreateObjParam(o, n, parObj[n]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tel.parentNode.replaceChild(o, el);\n\t\t\t\tr = o;\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\t\n\tfunction createObjParam(el, pName, pValue) {\n\t\tvar p = createElement(\"param\");\n\t\tp.setAttribute(\"name\", pName);\t\n\t\tp.setAttribute(\"value\", pValue);\n\t\tel.appendChild(p);\n\t}\n\t\n\t/* Cross-browser SWF removal\n\t\t- Especially needed to safely and completely remove a SWF in Internet Explorer\n\t*/\n\tfunction removeSWF(id) {\n\t\tvar obj = getElementById(id);\n\t\tif (obj && obj.nodeName == \"OBJECT\") {\n\t\t\tif (ua.ie && ua.win) {\n\t\t\t\tobj.style.display = \"none\";\n\t\t\t\t(function(){\n\t\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\t\tremoveObjectInIE(id);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction removeObjectInIE(id) {\n\t\tvar obj = getElementById(id);\n\t\tif (obj) {\n\t\t\tfor (var i in obj) {\n\t\t\t\tif (typeof obj[i] == \"function\") {\n\t\t\t\t\tobj[i] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.parentNode.removeChild(obj);\n\t\t}\n\t}\n\t\n\t/* Functions to optimize JavaScript compression\n\t*/\n\tfunction getElementById(id) {\n\t\tvar el = null;\n\t\ttry {\n\t\t\tel = doc.getElementById(id);\n\t\t}\n\t\tcatch (e) {}\n\t\treturn el;\n\t}\n\t\n\tfunction createElement(el) {\n\t\treturn doc.createElement(el);\n\t}\n\t\n\t/* Updated attachEvent function for Internet Explorer\n\t\t- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks\n\t*/\t\n\tfunction addListener(target, eventType, fn) {\n\t\ttarget.attachEvent(eventType, fn);\n\t\tlistenersArr[listenersArr.length] = [target, eventType, fn];\n\t}\n\t\n\t/* Flash Player and SWF content version matching\n\t*/\n\tfunction hasPlayerVersion(rv) {\n\t\tvar pv = ua.pv, v = rv.split(\".\");\n\t\tv[0] = parseInt(v[0], 10);\n\t\tv[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. \"9\" instead of \"9.0.0\"\n\t\tv[2] = parseInt(v[2], 10) || 0;\n\t\treturn (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;\n\t}\n\t\n\t/* Cross-browser dynamic CSS creation\n\t\t- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php\n\t*/\t\n\tfunction createCSS(sel, decl, media, newStyle) {\n\t\tif (ua.ie && ua.mac) { return; }\n\t\tvar h = doc.getElementsByTagName(\"head\")[0];\n\t\tif (!h) { return; } // to also support badly authored HTML pages that lack a head element\n\t\tvar m = (media && typeof media == \"string\") ? media : \"screen\";\n\t\tif (newStyle) {\n\t\t\tdynamicStylesheet = null;\n\t\t\tdynamicStylesheetMedia = null;\n\t\t}\n\t\tif (!dynamicStylesheet || dynamicStylesheetMedia != m) { \n\t\t\t// create dynamic stylesheet + get a global reference to it\n\t\t\tvar s = createElement(\"style\");\n\t\t\ts.setAttribute(\"type\", \"text/css\");\n\t\t\ts.setAttribute(\"media\", m);\n\t\t\tdynamicStylesheet = h.appendChild(s);\n\t\t\tif (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {\n\t\t\t\tdynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];\n\t\t\t}\n\t\t\tdynamicStylesheetMedia = m;\n\t\t}\n\t\t// add style rule\n\t\tif (ua.ie && ua.win) {\n\t\t\tif (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {\n\t\t\t\tdynamicStylesheet.addRule(sel, decl);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {\n\t\t\t\tdynamicStylesheet.appendChild(doc.createTextNode(sel + \" {\" + decl + \"}\"));\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setVisibility(id, isVisible) {\n\t\tif (!autoHideShow) { return; }\n\t\tvar v = isVisible ? \"visible\" : \"hidden\";\n\t\tif (isDomLoaded && getElementById(id)) {\n\t\t\tgetElementById(id).style.visibility = v;\n\t\t}\n\t\telse {\n\t\t\tcreateCSS(\"#\" + id, \"visibility:\" + v);\n\t\t}\n\t}\n\n\t/* Filter to avoid XSS attacks\n\t*/\n\tfunction urlEncodeIfNecessary(s) {\n\t\tvar regex = /[\\\\\\\"<>\\.;]/;\n\t\tvar hasBadChars = regex.exec(s) != null;\n\t\treturn hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;\n\t}\n\t\n\t/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)\n\t*/\n\tvar cleanup = function() {\n\t\tif (ua.ie && ua.win) {\n\t\t\twindow.attachEvent(\"onunload\", function() {\n\t\t\t\t// remove listeners to avoid memory leaks\n\t\t\t\tvar ll = listenersArr.length;\n\t\t\t\tfor (var i = 0; i < ll; i++) {\n\t\t\t\t\tlistenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);\n\t\t\t\t}\n\t\t\t\t// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect\n\t\t\t\tvar il = objIdArr.length;\n\t\t\t\tfor (var j = 0; j < il; j++) {\n\t\t\t\t\tremoveSWF(objIdArr[j]);\n\t\t\t\t}\n\t\t\t\t// cleanup library's main closures to avoid memory leaks\n\t\t\t\tfor (var k in ua) {\n\t\t\t\t\tua[k] = null;\n\t\t\t\t}\n\t\t\t\tua = null;\n\t\t\t\tfor (var l in swfobject) {\n\t\t\t\t\tswfobject[l] = null;\n\t\t\t\t}\n\t\t\t\tswfobject = null;\n\t\t\t});\n\t\t}\n\t}();\n\t\n\treturn {\n\t\t/* Public API\n\t\t\t- Reference: http://code.google.com/p/swfobject/wiki/documentation\n\t\t*/ \n\t\tregisterObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {\n\t\t\tif (ua.w3 && objectIdStr && swfVersionStr) {\n\t\t\t\tvar regObj = {};\n\t\t\t\tregObj.id = objectIdStr;\n\t\t\t\tregObj.swfVersion = swfVersionStr;\n\t\t\t\tregObj.expressInstall = xiSwfUrlStr;\n\t\t\t\tregObj.callbackFn = callbackFn;\n\t\t\t\tregObjArr[regObjArr.length] = regObj;\n\t\t\t\tsetVisibility(objectIdStr, false);\n\t\t\t}\n\t\t\telse if (callbackFn) {\n\t\t\t\tcallbackFn({success:false, id:objectIdStr});\n\t\t\t}\n\t\t},\n\t\t\n\t\tgetObjectById: function(objectIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\treturn getObjectById(objectIdStr);\n\t\t\t}\n\t\t},\n\t\t\n\t\tembedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {\n\t\t\tvar callbackObj = {success:false, id:replaceElemIdStr};\n\t\t\tif (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {\n\t\t\t\tsetVisibility(replaceElemIdStr, false);\n\t\t\t\taddDomLoadEvent(function() {\n\t\t\t\t\twidthStr += \"\"; // auto-convert to string\n\t\t\t\t\theightStr += \"\";\n\t\t\t\t\tvar att = {};\n\t\t\t\t\tif (attObj && typeof attObj === OBJECT) {\n\t\t\t\t\t\tfor (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs\n\t\t\t\t\t\t\tatt[i] = attObj[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tatt.data = swfUrlStr;\n\t\t\t\t\tatt.width = widthStr;\n\t\t\t\t\tatt.height = heightStr;\n\t\t\t\t\tvar par = {}; \n\t\t\t\t\tif (parObj && typeof parObj === OBJECT) {\n\t\t\t\t\t\tfor (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs\n\t\t\t\t\t\t\tpar[j] = parObj[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (flashvarsObj && typeof flashvarsObj === OBJECT) {\n\t\t\t\t\t\tfor (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs\n\t\t\t\t\t\t\tif (typeof par.flashvars != UNDEF) {\n\t\t\t\t\t\t\t\tpar.flashvars += \"&\" + k + \"=\" + flashvarsObj[k];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tpar.flashvars = k + \"=\" + flashvarsObj[k];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (hasPlayerVersion(swfVersionStr)) { // create SWF\n\t\t\t\t\t\tvar obj = createSWF(att, par, replaceElemIdStr);\n\t\t\t\t\t\tif (att.id == replaceElemIdStr) {\n\t\t\t\t\t\t\tsetVisibility(replaceElemIdStr, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallbackObj.success = true;\n\t\t\t\t\t\tcallbackObj.ref = obj;\n\t\t\t\t\t}\n\t\t\t\t\telse if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install\n\t\t\t\t\t\tatt.data = xiSwfUrlStr;\n\t\t\t\t\t\tshowExpressInstall(att, par, replaceElemIdStr, callbackFn);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse { // show alternative content\n\t\t\t\t\t\tsetVisibility(replaceElemIdStr, true);\n\t\t\t\t\t}\n\t\t\t\t\tif (callbackFn) { callbackFn(callbackObj); }\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (callbackFn) { callbackFn(callbackObj);\t}\n\t\t},\n\t\t\n\t\tswitchOffAutoHideShow: function() {\n\t\t\tautoHideShow = false;\n\t\t},\n\t\t\n\t\tua: ua,\n\t\t\n\t\tgetFlashPlayerVersion: function() {\n\t\t\treturn { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };\n\t\t},\n\t\t\n\t\thasFlashPlayerVersion: hasPlayerVersion,\n\t\t\n\t\tcreateSWF: function(attObj, parObj, replaceElemIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\treturn createSWF(attObj, parObj, replaceElemIdStr);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t\t\n\t\tshowExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {\n\t\t\tif (ua.w3 && canExpressInstall()) {\n\t\t\t\tshowExpressInstall(att, par, replaceElemIdStr, callbackFn);\n\t\t\t}\n\t\t},\n\t\t\n\t\tremoveSWF: function(objElemIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\tremoveSWF(objElemIdStr);\n\t\t\t}\n\t\t},\n\t\t\n\t\tcreateCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {\n\t\t\tif (ua.w3) {\n\t\t\t\tcreateCSS(selStr, declStr, mediaStr, newStyleBoolean);\n\t\t\t}\n\t\t},\n\t\t\n\t\taddDomLoadEvent: addDomLoadEvent,\n\t\t\n\t\taddLoadEvent: addLoadEvent,\n\t\t\n\t\tgetQueryParamValue: function(param) {\n\t\t\tvar q = doc.location.search || doc.location.hash;\n\t\t\tif (q) {\n\t\t\t\tif (/\\?/.test(q)) { q = q.split(\"?\")[1]; } // strip question mark\n\t\t\t\tif (param == null) {\n\t\t\t\t\treturn urlEncodeIfNecessary(q);\n\t\t\t\t}\n\t\t\t\tvar pairs = q.split(\"&\");\n\t\t\t\tfor (var i = 0; i < pairs.length; i++) {\n\t\t\t\t\tif (pairs[i].substring(0, pairs[i].indexOf(\"=\")) == param) {\n\t\t\t\t\t\treturn urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf(\"=\") + 1)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\t\t\n\t\t// For internal usage only\n\t\texpressInstallCallback: function() {\n\t\t\tif (isExpressInstallActive) {\n\t\t\t\tvar obj = getElementById(EXPRESS_INSTALL_ID);\n\t\t\t\tif (obj && storedAltContent) {\n\t\t\t\t\tobj.parentNode.replaceChild(storedAltContent, obj);\n\t\t\t\t\tif (storedAltContentId) {\n\t\t\t\t\t\tsetVisibility(storedAltContentId, true);\n\t\t\t\t\t\tif (ua.ie && ua.win) { storedAltContent.style.display = \"block\"; }\n\t\t\t\t\t}\n\t\t\t\t\tif (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }\n\t\t\t\t}\n\t\t\t\tisExpressInstallActive = false;\n\t\t\t} \n\t\t}\n\t};\n}();\n\nmodule.exports = swfobject;" ] } \ No newline at end of file diff --git a/lib/aglsl/AGLSLParser.js b/lib/aglsl/AGLSLParser.js index ed1f5c71..569b87af 100755 --- a/lib/aglsl/AGLSLParser.js +++ b/lib/aglsl/AGLSLParser.js @@ -1,5 +1,5 @@ var Mapping = require("awayjs-stagegl/lib/aglsl/Mapping"); -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); var AGLSLParser = (function () { function AGLSLParser() { } @@ -222,4 +222,4 @@ var AGLSLParser = (function () { })(); module.exports = AGLSLParser; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hZ2xzbC9hZ2xzbHBhcnNlci50cyJdLCJuYW1lcyI6WyJBR0xTTFBhcnNlciIsIkFHTFNMUGFyc2VyLmNvbnN0cnVjdG9yIiwiQUdMU0xQYXJzZXIucGFyc2UiLCJBR0xTTFBhcnNlci5yZWd0b3N0cmluZyIsIkFHTFNMUGFyc2VyLnNvdXJjZXRvc3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFDQSxJQUFPLE9BQU8sV0FBZSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ2pFLElBQU8sY0FBYyxXQUFhLGdEQUFnRCxDQUFDLENBQUM7QUFFcEYsSUFBTSxXQUFXO0lBQWpCQSxTQUFNQSxXQUFXQTtJQTJPakJDLENBQUNBO0lBek9PRCwyQkFBS0EsR0FBWkEsVUFBYUEsSUFBZ0JBO1FBRTVCRSxJQUFJQSxNQUFNQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUN2QkEsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLE1BQU1BLElBQUlBLDBCQUEwQkEsQ0FBQ0E7UUFDckNBLElBQUlBLEdBQUdBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLEVBQUVBLE1BQU1BO1FBRXJDQSxBQUNBQSxtQkFEbUJBO1FBQ25CQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsQ0EsTUFBTUEsSUFBSUEsd0JBQXdCQSxDQUFDQTtRQUNwQ0EsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO2dCQUMxREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzFCQSxNQUFNQSxJQUFJQSxlQUFlQSxHQUFHQSxHQUFHQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxHQUFHQSxLQUFLQSxDQUFDQTtnQkFDbkRBLENBQUNBO1lBQ0ZBLENBQUNBO1FBQ0ZBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLE1BQU1BLElBQUlBLGVBQWVBLEdBQUdBLEdBQUdBLEdBQUdBLFFBQVFBLEdBQUdBLGNBQWNBLENBQUNBLGtCQUFrQkEsR0FBR0EsTUFBTUEsRUFBaUJBLDhCQUE4QkE7UUFDdklBLENBQUNBLEdBRHdGQTtRQUl6RkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDcEZBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQ2xEQSxDQUFDQTtnQkFDQUEsTUFBTUEsSUFBSUEsT0FBT0EsR0FBR0EsR0FBR0EsR0FBR0EsR0FBR0EsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDM0NBLENBQUNBO1FBQ0ZBLENBQUNBO1FBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQzFEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDMUJBLE1BQU1BLElBQUlBLG1CQUFtQkEsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDM0NBLENBQUNBO1FBQ0ZBLENBQUNBO1FBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQzNGQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDbkRBLE1BQU1BLElBQUlBLGlCQUFpQkEsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDekNBLENBQUNBO1FBQ0ZBLENBQUNBO1FBRURBLEFBQ0FBLG1CQURtQkE7WUFDZkEsUUFBUUEsR0FBaUJBLENBQUNBLElBQUlBLEVBQUVBLE1BQU1BLEVBQUVBLElBQUlBLEVBQUVBLEVBQUVBLENBQUNBLENBQUNBO1FBQ3REQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUN0REEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3RCQSxNQUFNQSxJQUFJQSxpQkFBaUJBLEdBQUdBLFFBQVFBLENBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUVBLEdBQUdBLEtBQUtBLEdBQUdBLENBQUNBLEdBQUdBLEtBQUtBLENBQUNBO1lBQ3hGQSxDQUFDQTtRQUNGQSxDQUFDQTtRQUVEQSxBQUNBQSx3REFEd0RBO1FBQ3hEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsQ0EsTUFBTUEsSUFBSUEsZ0JBQWdCQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckJBLE1BQU1BLElBQUlBLHVCQUF1QkEsQ0FBQ0E7UUFDbkNBLENBQUNBO1FBQ0RBLEFBSUFBLHdCQUp3QkE7UUFDeEJBLHFDQUFxQ0E7UUFFckNBLHFCQUFxQkE7UUFDckJBLElBQUlBLElBQUlBLGlCQUFpQkEsQ0FBQ0E7UUFFMUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ3BEQSxJQUFJQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFD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QUFJQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDdEdBLENBQUNBO2dCQUNEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDdEJBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUdBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLEVBQUVBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO29CQUN0R0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7d0JBQ3JDQSxBQUNBQSxjQURjQTs0QkFDVkEsTUFBTUEsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7d0JBQ3hEQSxJQUFJQSxPQUFPQSxHQUFHQSxDQUFDQSxNQUFNQSxFQUFFQSxNQUFNQSxFQUFFQSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTt3QkFDN0RBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLFNBQVNBLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO3dCQUN2Q0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsVUFB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QUFDQSxDQUFDQSxPQUFPQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM3Q0EsQ0FBQ0E7UUFFREEsQUFDQUEsV0FEV0E7UUFDWEEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsSUFBSUEsSUFBSUEsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1FBQ1ZBLENBQUNBO1FBRURBLEFBQ0FBLHdDQUR3Q0E7UUFDeENBLENBQUNBLElBQUlBLEdBQUdBLENBQUNBO1FBQ1RBLEVBQUVBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1lBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBQzdDQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUFDQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM3Q0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFBQ0EsQ0FBQ0EsSUFBSUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDN0NBLEVBQUVBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1lBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBQzdDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNWQSxDQUFDQTtJQUNGSixrQkFBQ0E7QUFBREEsQ0EzT0EsQUEyT0NBLElBQUE7QUFFRCxBQUFxQixpQkFBWixXQUFXLENBQUMiLCJmaWxlIjoiYWdsc2wvQUdMU0xQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlc2NyaXB0aW9uXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvRGVzY3JpcHRpb25cIik7XG5pbXBvcnQgTWFwcGluZ1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvTWFwcGluZ1wiKTtcbmltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dFN0YWdlM0RcIik7XG5cbmNsYXNzIEFHTFNMUGFyc2VyXG57XG5cdHB1YmxpYyBwYXJzZShkZXNjOkRlc2NyaXB0aW9uKVxuXHR7XG5cdFx0dmFyIGhlYWRlcjpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBib2R5OnN0cmluZyA9IFwiXCI7XG5cblx0XHRoZWFkZXIgKz0gXCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XFxuXCI7XG5cdFx0dmFyIHRhZyA9IGRlc2MuaGVhZGVyLnR5cGVbMF07IC8vVE9ET1xuXG5cdFx0Ly8gZGVjbGFyZSB1bmlmb3Jtc1xuXHRcdGlmIChkZXNjLmhlYWRlci50eXBlID09IFwidmVydGV4XCIpIHtcblx0XHRcdGhlYWRlciArPSBcInVuaWZvcm0gZmxvYXQgeWZsaXA7XFxuXCI7XG5cdFx0fVxuXHRcdGlmICghZGVzYy5oYXNpbmRpcmVjdCkge1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgZGVzYy5yZWdyZWFkWzB4MV0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGRlc2MucmVncmVhZFsweDFdW2ldKSB7XG5cdFx0XHRcdFx0aGVhZGVyICs9IFwidW5pZm9ybSB2ZWM0IFwiICsgdGFnICsgXCJjXCIgKyBpICsgXCI7XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVhZGVyICs9IFwidW5pZm9ybSB2ZWM0IFwiICsgdGFnICsgXCJjYXJycltcIiArIENvbnRleHRTdGFnZTNELm1heHZlcnRleGNvbnN0YW50cyArIFwiXTtcXG5cIjsgICAgICAgICAgICAgICAgLy8gdXNlIG1heCBjb25zdCBjb3VudCBpbnN0ZWFkXG5cdFx0fVxuXG5cdFx0Ly8gZGVjbGFyZSB0ZW1wc1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVzYy5yZWdyZWFkWzB4Ml0ubGVuZ3RoIHx8IGkgPCBkZXNjLnJlZ3dyaXRlWzB4Ml0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChkZXNjLnJlZ3JlYWRbMHgyXVtpXSB8fCBkZXNjLnJlZ3dyaXRlWzB4Ml1baV0pIC8vIGR1aCwgaGF2ZSB0byBjaGVjayB3cml0ZSBvbmx5IGFsc28uLi5cblx0XHRcdHtcblx0XHRcdFx0aGVhZGVyICs9IFwidmVjNCBcIiArIHRhZyArIFwidFwiICsgaSArIFwiO1xcblwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGRlY2xhcmUgc3RyZWFtc1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGRlc2MucmVncmVhZFsweDBdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVzYy5yZWdyZWFkWzB4MF1baV0pIHtcblx0XHRcdFx0aGVhZGVyICs9IFwiYXR0cmlidXRlIHZlYzQgdmFcIiArIGkgKyBcIjtcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBkZWNsYXJlIGludGVycG9sYXRlZFxuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGRlc2MucmVncmVhZFsweDRdLmxlbmd0aCB8fCBpIDwgZGVzYy5yZWd3cml0ZVsweDRdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVzYy5yZWdyZWFkWzB4NF1baV0gfHwgZGVzYy5yZWd3cml0ZVsweDRdW2ldKSB7XG5cdFx0XHRcdGhlYWRlciArPSBcInZhcnlpbmcgdmVjNCB2aVwiICsgaSArIFwiO1xcblwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGRlY2xhcmUgc2FtcGxlcnNcblx0XHR2YXIgc2FtcHR5cGU6QXJyYXk8c3RyaW5nPiA9IFtcIjJEXCIsIFwiQ3ViZVwiLCBcIjNEXCIsIFwiXCJdO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGRlc2Muc2FtcGxlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChkZXNjLnNhbXBsZXJzW2ldKSB7XG5cdFx0XHRcdGhlYWRlciArPSBcInVuaWZvcm0gc2FtcGxlclwiICsgc2FtcHR5cGVbIGRlc2Muc2FtcGxlcnNbaV0uZGltICYgMyBdICsgXCIgZnNcIiArIGkgKyBcIjtcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBleHRyYSBnbCBmbHVmZjogc2V0dXAgcG9zaXRpb24gYW5kIGRlcHRoIGFkanVzdCB0ZW1wc1xuXHRcdGlmIChkZXNjLmhlYWRlci50eXBlID09IFwidmVydGV4XCIpIHtcblx0XHRcdGhlYWRlciArPSBcInZlYzQgb3V0cG9zO1xcblwiO1xuXHRcdH1cblx0XHRpZiAoZGVzYy53cml0ZWRlcHRoKSB7XG5cdFx0XHRoZWFkZXIgKz0gXCJ2ZWM0IHRtcF9GcmFnRGVwdGg7XFxuXCI7XG5cdFx0fVxuXHRcdC8vaWYgKCBkZXNjLmhhc21hdHJpeCApIFxuXHRcdC8vICAgIGhlYWRlciArPSBcInZlYzQgdG1wX21hdHJpeDtcXG5cIjtcblxuXHRcdC8vIHN0YXJ0IGJvZHkgb2YgY29kZVxuXHRcdGJvZHkgKz0gXCJ2b2lkIG1haW4oKSB7XFxuXCI7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBkZXNjLnRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGx1dGVudHJ5ID0gTWFwcGluZy5hZ2FsMmdsc2xsdXRbZGVzYy50b2tlbnNbaV0ub3Bjb2RlXTtcblx0XHRcdGlmICghbHV0ZW50cnkpIHtcblx0XHRcdFx0dGhyb3cgXCJPcGNvZGUgbm90IHZhbGlkIG9yIG5vdCBpbXBsZW1lbnRlZCB5ZXQ6IFwiXG5cdFx0XHRcdC8qK3Rva2VuLm9wY29kZTsqL1xuXHRcdFx0fVxuXHRcdFx0dmFyIHN1YmxpbmVzID0gbHV0ZW50cnkubWF0cml4aGVpZ2h0IHx8IDE7XG5cblx0XHRcdGZvciAodmFyIHNsOm51bWJlciA9IDA7IHNsIDwgc3VibGluZXM7IHNsKyspIHtcblx0XHRcdFx0dmFyIGxpbmU6c3RyaW5nID0gXCIgIFwiICsgbHV0ZW50cnkucztcblx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmRlc3QpIHtcblx0XHRcdFx0XHRpZiAobHV0ZW50cnkubWF0cml4aGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRpZiAoKChkZXNjLnRva2Vuc1tpXS5kZXN0Lm1hc2sgPj4gc2wpICYgMSkgIT0gMSkge1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBkZXN0cmVnc3RyaW5nOnN0cmluZyA9IHRoaXMucmVndG9zdHJpbmcoZGVzYy50b2tlbnNbaV0uZGVzdC5yZWd0eXBlLCBkZXNjLnRva2Vuc1tpXS5kZXN0LnJlZ251bSwgZGVzYywgdGFnKTtcblx0XHRcdFx0XHRcdHZhciBkZXN0Y2FzdHN0cmluZzpzdHJpbmcgPSBcImZsb2F0XCI7XG5cdFx0XHRcdFx0XHR2YXIgZGVzdG1hc2tzdHJpbmcgPSBbXCJ4XCIsIFwieVwiLCBcInpcIiwgXCJ3XCJdW3NsXTtcblx0XHRcdFx0XHRcdGRlc3RyZWdzdHJpbmcgKz0gXCIuXCIgKyBkZXN0bWFza3N0cmluZztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIGRlc3RyZWdzdHJpbmc6c3RyaW5nID0gdGhpcy5yZWd0b3N0cmluZyhkZXNjLnRva2Vuc1tpXS5kZXN0LnJlZ3R5cGUsIGRlc2MudG9rZW5zW2ldLmRlc3QucmVnbnVtLCBkZXNjLCB0YWcpO1xuXHRcdFx0XHRcdFx0dmFyIGRlc3RjYXN0c3RyaW5nOnN0cmluZztcblx0XHRcdFx0XHRcdHZhciBkZXN0bWFza3N0cmluZzpzdHJpbmc7XG5cdFx0XHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uZGVzdC5tYXNrICE9IDB4Zikge1xuXHRcdFx0XHRcdFx0XHR2YXIgbmRlc3Q6bnVtYmVyID0gMDtcblx0XHRcdFx0XHRcdFx0ZGVzdG1hc2tzdHJpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uZGVzdC5tYXNrICYgMSkge1xuXHRcdFx0XHRcdFx0XHRcdG5kZXN0Kys7XG5cdFx0XHRcdFx0XHRcdFx0ZGVzdG1hc2tzdHJpbmcgKz0gXCJ4XCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmRlc3QubWFzayAmIDIpIHtcblx0XHRcdFx0XHRcdFx0XHRuZGVzdCsrO1xuXHRcdFx0XHRcdFx0XHRcdGRlc3RtYXNrc3RyaW5nICs9IFwieVwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChkZXNjLnRva2Vuc1tpXS5kZXN0Lm1hc2sgJiA0KSB7XG5cdFx0XHRcdFx0XHRcdFx0bmRlc3QrKztcblx0XHRcdFx0XHRcdFx0XHRkZXN0bWFza3N0cmluZyArPSBcInpcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uZGVzdC5tYXNrICYgOCkge1xuXHRcdFx0XHRcdFx0XHRcdG5kZXN0Kys7XG5cdFx0XHRcdFx0XHRcdFx0ZGVzdG1hc2tzdHJpbmcgKz0gXCJ3XCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZGVzdHJlZ3N0cmluZyArPSBcIi5cIiArIGRlc3RtYXNrc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG5kZXN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzdGNhc3RzdHJpbmcgPSBcImZsb2F0XCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXN0Y2FzdHN0cmluZyA9IFwidmVjMlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzdGNhc3RzdHJpbmcgPSBcInZlYzNcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBcIlVuZXhwZWN0ZWQgZGVzdGluYXRpb24gbWFza1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRkZXN0Y2FzdHN0cmluZyA9IFwidmVjNFwiO1xuXHRcdFx0XHRcdFx0XHRkZXN0bWFza3N0cmluZyA9IFwieHl6d1wiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJWRlc3RcIiwgZGVzdHJlZ3N0cmluZyk7XG5cdFx0XHRcdFx0bGluZSA9IGxpbmUucmVwbGFjZShcIiVjYXN0XCIsIGRlc3RjYXN0c3RyaW5nKTtcblx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJWRtXCIsIGRlc3RtYXNrc3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZHdtOm51bWJlciA9IDB4Zjtcblx0XHRcdFx0aWYgKCFsdXRlbnRyeS5uZHdtICYmIGx1dGVudHJ5LmRlc3QgJiYgZGVzYy50b2tlbnNbaV0uZGVzdCkge1xuXHRcdFx0XHRcdGR3bSA9IGRlc2MudG9rZW5zW2ldLmRlc3QubWFzaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uYSkge1xuXHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIlYVwiLCB0aGlzLnNvdXJjZXRvc3RyaW5nKGRlc2MudG9rZW5zW2ldLmEsIDAsIGR3bSwgbHV0ZW50cnkuc2NhbGFyLCBkZXNjLCB0YWcpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uYikge1xuXHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIlYlwiLCB0aGlzLnNvdXJjZXRvc3RyaW5nKGRlc2MudG9rZW5zW2ldLmIsIHNsLCBkd20sIGx1dGVudHJ5LnNjYWxhciwgZGVzYywgdGFnKSk7XG5cdFx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmIucmVndHlwZSA9PSAweDUpIHtcblx0XHRcdFx0XHRcdC8vIHNhbXBsZXIgZGltXG5cdFx0XHRcdFx0XHR2YXIgdGV4ZGltID0gW1wiMkRcIiwgXCJDdWJlXCIsIFwiM0RcIl1bZGVzYy50b2tlbnNbaV0uYi5kaW1dO1xuXHRcdFx0XHRcdFx0dmFyIHRleHNpemUgPSBbXCJ2ZWMyXCIsIFwidmVjM1wiLCBcInZlYzNcIl1bZGVzYy50b2tlbnNbaV0uYi5kaW1dO1xuXHRcdFx0XHRcdFx0bGluZSA9IGxpbmUucmVwbGFjZShcIiV0ZXhkaW1cIiwgdGV4ZGltKTtcblx0XHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIldGV4c2l6ZVwiLCB0ZXhzaXplKTtcblx0XHRcdFx0XHRcdHZhciB0ZXhsb2Q6c3RyaW5nID0gXCJcIjtcblx0XHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIlbG9kXCIsIHRleGxvZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJvZHkgKz0gbGluZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhZGp1c3QgeiBmcm9tIG9wZW5nbCByYW5nZSBvZiAtMS4uMSB0byAwLi4xIGFzIGluIGQzZCwgdGhpcyBhbHNvIGVuZm9yY2VzIGEgbGVmdCBoYW5kZWQgY29vcmRpbmF0ZSBzeXN0ZW1cblx0XHRpZiAoZGVzYy5oZWFkZXIudHlwZSA9PSBcInZlcnRleFwiKSB7XG5cdFx0XHRib2R5ICs9IFwiICBnbF9Qb3NpdGlvbiA9IHZlYzQob3V0cG9zLngsIG91dHBvcy55LCBvdXRwb3MueioyLjAgLSBvdXRwb3Mudywgb3V0cG9zLncpO1xcblwiO1xuXHRcdH1cblxuXHRcdC8vIGNsYW1wIGZyYWdtZW50IGRlcHRoXG5cdFx0aWYgKGRlc2Mud3JpdGVkZXB0aCkge1xuXHRcdFx0Ym9keSArPSBcIiAgZ2xfRnJhZ0RlcHRoID0gY2xhbXAodG1wX0ZyYWdEZXB0aCwwLjAsMS4wKTtcXG5cIjtcblx0XHR9XG5cblx0XHQvLyBjbG9zZSBtYWluXG5cdFx0Ym9keSArPSBcIn1cXG5cIjtcblxuXHRcdHJldHVybiBoZWFkZXIgKyBib2R5O1xuXHR9XG5cblx0cHVibGljIHJlZ3Rvc3RyaW5nKHJlZ3R5cGU6bnVtYmVyLCByZWdudW06bnVtYmVyLCBkZXNjOkRlc2NyaXB0aW9uLCB0YWcpXG5cdHtcblx0XHRzd2l0Y2ggKHJlZ3R5cGUpIHtcblx0XHRcdGNhc2UgMHgwOlxuXHRcdFx0XHRyZXR1cm4gXCJ2YVwiICsgcmVnbnVtO1xuXHRcdFx0Y2FzZSAweDE6XG5cdFx0XHRcdGlmIChkZXNjLmhhc2luZGlyZWN0ICYmIGRlc2MuaGVhZGVyLnR5cGUgPT0gXCJ2ZXJ0ZXhcIikge1xuXHRcdFx0XHRcdHJldHVybiBcInZjYXJycltcIiArIHJlZ251bSArIFwiXVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB0YWcgKyBcImNcIiArIHJlZ251bTtcblx0XHRcdFx0fVxuXHRcdFx0Y2FzZSAweDI6XG5cdFx0XHRcdHJldHVybiB0YWcgKyBcInRcIiArIHJlZ251bTtcblx0XHRcdGNhc2UgMHgzOlxuXHRcdFx0XHRyZXR1cm4gZGVzYy5oZWFkZXIudHlwZSA9PSBcInZlcnRleFwiPyBcIm91dHBvc1wiIDogXCJnbF9GcmFnQ29sb3JcIjtcblx0XHRcdGNhc2UgMHg0OlxuXHRcdFx0XHRyZXR1cm4gXCJ2aVwiICsgcmVnbnVtO1xuXHRcdFx0Y2FzZSAweDU6XG5cdFx0XHRcdHJldHVybiBcImZzXCIgKyByZWdudW07XG5cdFx0XHRjYXNlIDB4Njpcblx0XHRcdFx0cmV0dXJuIFwidG1wX0ZyYWdEZXB0aFwiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgXCJVbmtub3duIHJlZ2lzdGVyIHR5cGVcIjtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc291cmNldG9zdHJpbmcocywgc3VibGluZSwgZHdtLCBpc3NjYWxhciwgZGVzYywgdGFnKTpzdHJpbmdcblx0e1xuXHRcdHZhciBzd2l6ID0gWyBcInhcIiwgXCJ5XCIsIFwielwiLCBcIndcIiBdO1xuXHRcdHZhciByO1xuXG5cdFx0aWYgKHMuaW5kaXJlY3RmbGFnKSB7XG5cdFx0XHRyID0gXCJ2Y2FycnJbaW50KFwiICsgdGhpcy5yZWd0b3N0cmluZyhzLmluZGV4cmVndHlwZSwgcy5yZWdudW0sIGRlc2MsIHRhZykgKyBcIi5cIiArIHN3aXpbcy5pbmRleHNlbGVjdF0gKyBcIilcIjtcblx0XHRcdHZhciByZWFsb2ZzID0gc3VibGluZSArIHMuaW5kZXhvZmZzZXQ7XG5cdFx0XHRpZiAocmVhbG9mcyA8IDApIHIgKz0gcmVhbG9mcy50b1N0cmluZygpO1xuXHRcdFx0aWYgKHJlYWxvZnMgPiAwKSByICs9IFwiK1wiICsgcmVhbG9mcy50b1N0cmluZygpO1xuXHRcdFx0ciArPSBcIl1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ciA9IHRoaXMucmVndG9zdHJpbmcocy5yZWd0eXBlLCBzLnJlZ251bSArIHN1YmxpbmUsIGRlc2MsIHRhZyk7XG5cdFx0fVxuXG5cdFx0Ly8gc2FtcGxlcnMgbmV2ZXIgYWRkIHN3aXp6bGUgICAgICAgIFxuXHRcdGlmIChzLnJlZ3R5cGUgPT0gMHg1KSB7XG5cdFx0XHRyZXR1cm4gcjtcblx0XHR9XG5cblx0XHQvLyBzY2FsYXIsIGZpcnN0IGNvbXBvbmVudCBvbmx5XG5cdFx0aWYgKGlzc2NhbGFyKSB7XG5cdFx0XHRyZXR1cm4gciArIFwiLlwiICsgc3dpelsocy5zd2l6emxlID4+IDApICYgM107XG5cdFx0fVxuXG5cdFx0Ly8gaWRlbnRpdHlcblx0XHRpZiAocy5zd2l6emxlID09IDB4ZTQgJiYgZHdtID09IDB4Zikge1xuXHRcdFx0cmV0dXJuIHI7XG5cdFx0fVxuXG5cdFx0Ly8gd2l0aCBkZXN0aW5hdGlvbiB3cml0ZSBtYXNrIGZvbGRlZCBpblxuXHRcdHIgKz0gXCIuXCI7XG5cdFx0aWYgKGR3bSAmIDEpIHIgKz0gc3dpelsocy5zd2l6emxlID4+IDApICYgM107XG5cdFx0aWYgKGR3bSAmIDIpIHIgKz0gc3dpelsocy5zd2l6emxlID4+IDIpICYgM107XG5cdFx0aWYgKGR3bSAmIDQpIHIgKz0gc3dpelsocy5zd2l6emxlID4+IDQpICYgM107XG5cdFx0aWYgKGR3bSAmIDgpIHIgKz0gc3dpelsocy5zd2l6emxlID4+IDYpICYgM107XG5cdFx0cmV0dXJuIHI7XG5cdH1cbn1cblxuZXhwb3J0ID0gQUdMU0xQYXJzZXI7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hZ2xzbC9hZ2xzbHBhcnNlci50cyJdLCJuYW1lcyI6WyJBR0xTTFBhcnNlciIsIkFHTFNMUGFyc2VyLmNvbnN0cnVjdG9yIiwiQUdMU0xQYXJzZXIucGFyc2UiLCJBR0xTTFBhcnNlci5yZWd0b3N0cmluZyIsIkFHTFNMUGFyc2VyLnNvdXJjZXRvc3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFDQSxJQUFPLE9BQU8sV0FBZSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ2pFLElBQU8sY0FBYyxXQUFhLHdDQUF3QyxDQUFDLENBQUM7QUFFNUUsSUFBTSxXQUFXO0lBQWpCQSxTQUFNQSxXQUFXQTtJQTJPakJDLENBQUNBO0lBek9PRCwyQkFBS0EsR0FBWkEsVUFBYUEsSUFBZ0JBO1FBRTVCRSxJQUFJQSxNQUFNQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUN2QkEsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLE1BQU1BLElBQUlBLDBCQUEwQkEsQ0FBQ0E7UUFDckNBLElBQUlBLEdBQUdBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLEVBQUVBLE1BQU1BO1FBRXJDQSxBQUNBQSxtQkFEbUJBO1FBQ25CQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsQ0EsTUFBTUEsSUFBSUEsd0JBQXdCQSxDQUFDQTtRQUNwQ0EsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO2dCQUMxREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzFCQSxNQUFNQSxJQUFJQSxlQUFlQSxHQUFHQSxHQUFHQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxHQUFHQSxLQUFLQSxDQUFDQTtnQkFDbkRBLENBQUNBO1lBQ0ZBLENBQUNBO1FBQ0ZBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLE1BQU1BLElBQUlBLGVBQWVBLEdBQUdBLEdBQUdBLEdBQUdBLFFBQVFBLEdBQUdBLGNBQWNBLENBQUNBLGtCQUFrQkEsR0FBR0EsTUFBTUEsRUFBaUJBLDhCQUE4QkE7UUFDdklBLENBQUNBLEdBRHdGQTtRQUl6RkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDcEZBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQ2xEQSxDQUFDQTtnQkFDQUEsTUFBTUEsSUFBSUEsT0FBT0EsR0FBR0EsR0FBR0EsR0FBR0EsR0FBR0EsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDM0NBLENBQUNBO1FBQ0ZBLENBQUNBO1FBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQzFEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDMUJBLE1BQU1BLElBQUlBLG1CQUFtQkEsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDM0NBLENBQUNBO1FBQ0ZBLENBQUNBO1FBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQzNGQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDbkRBLE1BQU1BLElBQUlBLGlCQUFpQkEsR0FBR0EsQ0FBQ0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDekNBLENBQUNBO1FBQ0ZBLENBQUNBO1FBRURBLEFBQ0FBLG1CQURtQkE7WUFDZkEsUUFBUUEsR0FBaUJBLENBQUNBLElBQUlBLEVBQUVBLE1BQU1BLEVBQUVBLElBQUlBLEVBQUVBLEVBQUVBLENBQUNBLENBQUNBO1FBQ3REQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUN0REEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3RCQSxNQUFNQSxJQUFJQSxpQkFBaUJBLEdBQUdBLFFBQVFBLENBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUVBLEdBQUdBLEtBQUtBLEdBQUdBLENBQUNBLEdBQUdBLEtBQUtBLENBQUNBO1lBQ3hGQSxDQUFDQTtRQUNGQSxDQUFDQTtRQUVEQSxBQUNBQSx3REFEd0RBO1FBQ3hEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsQ0EsTUFBTUEsSUFBSUEsZ0JBQWdCQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckJBLE1BQU1BLElBQUlBLHVCQUF1QkEsQ0FBQ0E7UUFDbkNBLENBQUNBO1FBQ0RBLEFBSUFBLHdCQUp3QkE7UUFDeEJBLHFDQUFxQ0E7UUFFckNBLHFCQUFxQkE7UUFDckJBLElBQUlBLElBQUlBLGlCQUFpQkEsQ0FBQ0E7UUFFMUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ3BEQSxJQUFJQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFD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QUFJQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDdEdBLENBQUNBO2dCQUNEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDdEJBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUdBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLEVBQUVBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO29CQUN0R0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7d0JBQ3JDQSxBQUNBQSxjQURjQTs0QkFDVkEsTUFBTUEsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7d0JBQ3hEQSxJQUFJQSxPQUFPQSxHQUFHQSxDQUFDQSxNQUFNQSxFQUFFQSxNQUFNQSxFQUFFQSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTt3QkFDN0RBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLFNBQVNBLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO3dCQUN2Q0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsVUFB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QUFDQSxDQUFDQSxPQUFPQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM3Q0EsQ0FBQ0E7UUFFREEsQUFDQUEsV0FEV0E7UUFDWEEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsSUFBSUEsSUFBSUEsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1FBQ1ZBLENBQUNBO1FBRURBLEFBQ0FBLHdDQUR3Q0E7UUFDeENBLENBQUNBLElBQUlBLEdBQUdBLENBQUNBO1FBQ1RBLEVBQUVBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1lBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBQzdDQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUFDQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM3Q0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFBQ0EsQ0FBQ0EsSUFBSUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDN0NBLEVBQUVBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1lBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBQzdDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNWQSxDQUFDQTtJQUNGSixrQkFBQ0E7QUFBREEsQ0EzT0EsQUEyT0NBLElBQUE7QUFFRCxBQUFxQixpQkFBWixXQUFXLENBQUMiLCJmaWxlIjoiYWdsc2wvQUdMU0xQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlc2NyaXB0aW9uXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvRGVzY3JpcHRpb25cIik7XG5pbXBvcnQgTWFwcGluZ1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvTWFwcGluZ1wiKTtcbmltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRTdGFnZTNEXCIpO1xuXG5jbGFzcyBBR0xTTFBhcnNlclxue1xuXHRwdWJsaWMgcGFyc2UoZGVzYzpEZXNjcmlwdGlvbilcblx0e1xuXHRcdHZhciBoZWFkZXI6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgYm9keTpzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aGVhZGVyICs9IFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblwiO1xuXHRcdHZhciB0YWcgPSBkZXNjLmhlYWRlci50eXBlWzBdOyAvL1RPRE9cblxuXHRcdC8vIGRlY2xhcmUgdW5pZm9ybXNcblx0XHRpZiAoZGVzYy5oZWFkZXIudHlwZSA9PSBcInZlcnRleFwiKSB7XG5cdFx0XHRoZWFkZXIgKz0gXCJ1bmlmb3JtIGZsb2F0IHlmbGlwO1xcblwiO1xuXHRcdH1cblx0XHRpZiAoIWRlc2MuaGFzaW5kaXJlY3QpIHtcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGRlc2MucmVncmVhZFsweDFdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChkZXNjLnJlZ3JlYWRbMHgxXVtpXSkge1xuXHRcdFx0XHRcdGhlYWRlciArPSBcInVuaWZvcm0gdmVjNCBcIiArIHRhZyArIFwiY1wiICsgaSArIFwiO1xcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlYWRlciArPSBcInVuaWZvcm0gdmVjNCBcIiArIHRhZyArIFwiY2FycnJbXCIgKyBDb250ZXh0U3RhZ2UzRC5tYXh2ZXJ0ZXhjb25zdGFudHMgKyBcIl07XFxuXCI7ICAgICAgICAgICAgICAgIC8vIHVzZSBtYXggY29uc3QgY291bnQgaW5zdGVhZFxuXHRcdH1cblxuXHRcdC8vIGRlY2xhcmUgdGVtcHNcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlc2MucmVncmVhZFsweDJdLmxlbmd0aCB8fCBpIDwgZGVzYy5yZWd3cml0ZVsweDJdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVzYy5yZWdyZWFkWzB4Ml1baV0gfHwgZGVzYy5yZWd3cml0ZVsweDJdW2ldKSAvLyBkdWgsIGhhdmUgdG8gY2hlY2sgd3JpdGUgb25seSBhbHNvLi4uXG5cdFx0XHR7XG5cdFx0XHRcdGhlYWRlciArPSBcInZlYzQgXCIgKyB0YWcgKyBcInRcIiArIGkgKyBcIjtcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBkZWNsYXJlIHN0cmVhbXNcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBkZXNjLnJlZ3JlYWRbMHgwXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGRlc2MucmVncmVhZFsweDBdW2ldKSB7XG5cdFx0XHRcdGhlYWRlciArPSBcImF0dHJpYnV0ZSB2ZWM0IHZhXCIgKyBpICsgXCI7XFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gZGVjbGFyZSBpbnRlcnBvbGF0ZWRcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBkZXNjLnJlZ3JlYWRbMHg0XS5sZW5ndGggfHwgaSA8IGRlc2MucmVnd3JpdGVbMHg0XS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGRlc2MucmVncmVhZFsweDRdW2ldIHx8IGRlc2MucmVnd3JpdGVbMHg0XVtpXSkge1xuXHRcdFx0XHRoZWFkZXIgKz0gXCJ2YXJ5aW5nIHZlYzQgdmlcIiArIGkgKyBcIjtcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBkZWNsYXJlIHNhbXBsZXJzXG5cdFx0dmFyIHNhbXB0eXBlOkFycmF5PHN0cmluZz4gPSBbXCIyRFwiLCBcIkN1YmVcIiwgXCIzRFwiLCBcIlwiXTtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBkZXNjLnNhbXBsZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVzYy5zYW1wbGVyc1tpXSkge1xuXHRcdFx0XHRoZWFkZXIgKz0gXCJ1bmlmb3JtIHNhbXBsZXJcIiArIHNhbXB0eXBlWyBkZXNjLnNhbXBsZXJzW2ldLmRpbSAmIDMgXSArIFwiIGZzXCIgKyBpICsgXCI7XFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gZXh0cmEgZ2wgZmx1ZmY6IHNldHVwIHBvc2l0aW9uIGFuZCBkZXB0aCBhZGp1c3QgdGVtcHNcblx0XHRpZiAoZGVzYy5oZWFkZXIudHlwZSA9PSBcInZlcnRleFwiKSB7XG5cdFx0XHRoZWFkZXIgKz0gXCJ2ZWM0IG91dHBvcztcXG5cIjtcblx0XHR9XG5cdFx0aWYgKGRlc2Mud3JpdGVkZXB0aCkge1xuXHRcdFx0aGVhZGVyICs9IFwidmVjNCB0bXBfRnJhZ0RlcHRoO1xcblwiO1xuXHRcdH1cblx0XHQvL2lmICggZGVzYy5oYXNtYXRyaXggKSBcblx0XHQvLyAgICBoZWFkZXIgKz0gXCJ2ZWM0IHRtcF9tYXRyaXg7XFxuXCI7XG5cblx0XHQvLyBzdGFydCBib2R5IG9mIGNvZGVcblx0XHRib2R5ICs9IFwidm9pZCBtYWluKCkge1xcblwiO1xuXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgZGVzYy50b2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsdXRlbnRyeSA9IE1hcHBpbmcuYWdhbDJnbHNsbHV0W2Rlc2MudG9rZW5zW2ldLm9wY29kZV07XG5cdFx0XHRpZiAoIWx1dGVudHJ5KSB7XG5cdFx0XHRcdHRocm93IFwiT3Bjb2RlIG5vdCB2YWxpZCBvciBub3QgaW1wbGVtZW50ZWQgeWV0OiBcIlxuXHRcdFx0XHQvKit0b2tlbi5vcGNvZGU7Ki9cblx0XHRcdH1cblx0XHRcdHZhciBzdWJsaW5lcyA9IGx1dGVudHJ5Lm1hdHJpeGhlaWdodCB8fCAxO1xuXG5cdFx0XHRmb3IgKHZhciBzbDpudW1iZXIgPSAwOyBzbCA8IHN1YmxpbmVzOyBzbCsrKSB7XG5cdFx0XHRcdHZhciBsaW5lOnN0cmluZyA9IFwiICBcIiArIGx1dGVudHJ5LnM7XG5cdFx0XHRcdGlmIChkZXNjLnRva2Vuc1tpXS5kZXN0KSB7XG5cdFx0XHRcdFx0aWYgKGx1dGVudHJ5Lm1hdHJpeGhlaWdodCkge1xuXHRcdFx0XHRcdFx0aWYgKCgoZGVzYy50b2tlbnNbaV0uZGVzdC5tYXNrID4+IHNsKSAmIDEpICE9IDEpIHtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgZGVzdHJlZ3N0cmluZzpzdHJpbmcgPSB0aGlzLnJlZ3Rvc3RyaW5nKGRlc2MudG9rZW5zW2ldLmRlc3QucmVndHlwZSwgZGVzYy50b2tlbnNbaV0uZGVzdC5yZWdudW0sIGRlc2MsIHRhZyk7XG5cdFx0XHRcdFx0XHR2YXIgZGVzdGNhc3RzdHJpbmc6c3RyaW5nID0gXCJmbG9hdFwiO1xuXHRcdFx0XHRcdFx0dmFyIGRlc3RtYXNrc3RyaW5nID0gW1wieFwiLCBcInlcIiwgXCJ6XCIsIFwid1wiXVtzbF07XG5cdFx0XHRcdFx0XHRkZXN0cmVnc3RyaW5nICs9IFwiLlwiICsgZGVzdG1hc2tzdHJpbmc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhciBkZXN0cmVnc3RyaW5nOnN0cmluZyA9IHRoaXMucmVndG9zdHJpbmcoZGVzYy50b2tlbnNbaV0uZGVzdC5yZWd0eXBlLCBkZXNjLnRva2Vuc1tpXS5kZXN0LnJlZ251bSwgZGVzYywgdGFnKTtcblx0XHRcdFx0XHRcdHZhciBkZXN0Y2FzdHN0cmluZzpzdHJpbmc7XG5cdFx0XHRcdFx0XHR2YXIgZGVzdG1hc2tzdHJpbmc6c3RyaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmRlc3QubWFzayAhPSAweGYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG5kZXN0Om51bWJlciA9IDA7XG5cdFx0XHRcdFx0XHRcdGRlc3RtYXNrc3RyaW5nID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmRlc3QubWFzayAmIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRuZGVzdCsrO1xuXHRcdFx0XHRcdFx0XHRcdGRlc3RtYXNrc3RyaW5nICs9IFwieFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChkZXNjLnRva2Vuc1tpXS5kZXN0Lm1hc2sgJiAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmRlc3QrKztcblx0XHRcdFx0XHRcdFx0XHRkZXN0bWFza3N0cmluZyArPSBcInlcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoZGVzYy50b2tlbnNbaV0uZGVzdC5tYXNrICYgNCkge1xuXHRcdFx0XHRcdFx0XHRcdG5kZXN0Kys7XG5cdFx0XHRcdFx0XHRcdFx0ZGVzdG1hc2tzdHJpbmcgKz0gXCJ6XCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmRlc3QubWFzayAmIDgpIHtcblx0XHRcdFx0XHRcdFx0XHRuZGVzdCsrO1xuXHRcdFx0XHRcdFx0XHRcdGRlc3RtYXNrc3RyaW5nICs9IFwid1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGRlc3RyZWdzdHJpbmcgKz0gXCIuXCIgKyBkZXN0bWFza3N0cmluZztcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChuZGVzdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRcdFx0XHRcdGRlc3RjYXN0c3RyaW5nID0gXCJmbG9hdFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzdGNhc3RzdHJpbmcgPSBcInZlYzJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMzpcblx0XHRcdFx0XHRcdFx0XHRcdGRlc3RjYXN0c3RyaW5nID0gXCJ2ZWMzXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgXCJVbmV4cGVjdGVkIGRlc3RpbmF0aW9uIG1hc2tcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZGVzdGNhc3RzdHJpbmcgPSBcInZlYzRcIjtcblx0XHRcdFx0XHRcdFx0ZGVzdG1hc2tzdHJpbmcgPSBcInh5endcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bGluZSA9IGxpbmUucmVwbGFjZShcIiVkZXN0XCIsIGRlc3RyZWdzdHJpbmcpO1xuXHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIlY2FzdFwiLCBkZXN0Y2FzdHN0cmluZyk7XG5cdFx0XHRcdFx0bGluZSA9IGxpbmUucmVwbGFjZShcIiVkbVwiLCBkZXN0bWFza3N0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGR3bTpudW1iZXIgPSAweGY7XG5cdFx0XHRcdGlmICghbHV0ZW50cnkubmR3bSAmJiBsdXRlbnRyeS5kZXN0ICYmIGRlc2MudG9rZW5zW2ldLmRlc3QpIHtcblx0XHRcdFx0XHRkd20gPSBkZXNjLnRva2Vuc1tpXS5kZXN0Lm1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmEpIHtcblx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJWFcIiwgdGhpcy5zb3VyY2V0b3N0cmluZyhkZXNjLnRva2Vuc1tpXS5hLCAwLCBkd20sIGx1dGVudHJ5LnNjYWxhciwgZGVzYywgdGFnKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRlc2MudG9rZW5zW2ldLmIpIHtcblx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJWJcIiwgdGhpcy5zb3VyY2V0b3N0cmluZyhkZXNjLnRva2Vuc1tpXS5iLCBzbCwgZHdtLCBsdXRlbnRyeS5zY2FsYXIsIGRlc2MsIHRhZykpO1xuXHRcdFx0XHRcdGlmIChkZXNjLnRva2Vuc1tpXS5iLnJlZ3R5cGUgPT0gMHg1KSB7XG5cdFx0XHRcdFx0XHQvLyBzYW1wbGVyIGRpbVxuXHRcdFx0XHRcdFx0dmFyIHRleGRpbSA9IFtcIjJEXCIsIFwiQ3ViZVwiLCBcIjNEXCJdW2Rlc2MudG9rZW5zW2ldLmIuZGltXTtcblx0XHRcdFx0XHRcdHZhciB0ZXhzaXplID0gW1widmVjMlwiLCBcInZlYzNcIiwgXCJ2ZWMzXCJdW2Rlc2MudG9rZW5zW2ldLmIuZGltXTtcblx0XHRcdFx0XHRcdGxpbmUgPSBsaW5lLnJlcGxhY2UoXCIldGV4ZGltXCIsIHRleGRpbSk7XG5cdFx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJXRleHNpemVcIiwgdGV4c2l6ZSk7XG5cdFx0XHRcdFx0XHR2YXIgdGV4bG9kOnN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdFx0XHRsaW5lID0gbGluZS5yZXBsYWNlKFwiJWxvZFwiLCB0ZXhsb2QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRib2R5ICs9IGxpbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gYWRqdXN0IHogZnJvbSBvcGVuZ2wgcmFuZ2Ugb2YgLTEuLjEgdG8gMC4uMSBhcyBpbiBkM2QsIHRoaXMgYWxzbyBlbmZvcmNlcyBhIGxlZnQgaGFuZGVkIGNvb3JkaW5hdGUgc3lzdGVtXG5cdFx0aWYgKGRlc2MuaGVhZGVyLnR5cGUgPT0gXCJ2ZXJ0ZXhcIikge1xuXHRcdFx0Ym9keSArPSBcIiAgZ2xfUG9zaXRpb24gPSB2ZWM0KG91dHBvcy54LCBvdXRwb3MueSwgb3V0cG9zLnoqMi4wIC0gb3V0cG9zLncsIG91dHBvcy53KTtcXG5cIjtcblx0XHR9XG5cblx0XHQvLyBjbGFtcCBmcmFnbWVudCBkZXB0aFxuXHRcdGlmIChkZXNjLndyaXRlZGVwdGgpIHtcblx0XHRcdGJvZHkgKz0gXCIgIGdsX0ZyYWdEZXB0aCA9IGNsYW1wKHRtcF9GcmFnRGVwdGgsMC4wLDEuMCk7XFxuXCI7XG5cdFx0fVxuXG5cdFx0Ly8gY2xvc2UgbWFpblxuXHRcdGJvZHkgKz0gXCJ9XFxuXCI7XG5cblx0XHRyZXR1cm4gaGVhZGVyICsgYm9keTtcblx0fVxuXG5cdHB1YmxpYyByZWd0b3N0cmluZyhyZWd0eXBlOm51bWJlciwgcmVnbnVtOm51bWJlciwgZGVzYzpEZXNjcmlwdGlvbiwgdGFnKVxuXHR7XG5cdFx0c3dpdGNoIChyZWd0eXBlKSB7XG5cdFx0XHRjYXNlIDB4MDpcblx0XHRcdFx0cmV0dXJuIFwidmFcIiArIHJlZ251bTtcblx0XHRcdGNhc2UgMHgxOlxuXHRcdFx0XHRpZiAoZGVzYy5oYXNpbmRpcmVjdCAmJiBkZXNjLmhlYWRlci50eXBlID09IFwidmVydGV4XCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJ2Y2FycnJbXCIgKyByZWdudW0gKyBcIl1cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdGFnICsgXCJjXCIgKyByZWdudW07XG5cdFx0XHRcdH1cblx0XHRcdGNhc2UgMHgyOlxuXHRcdFx0XHRyZXR1cm4gdGFnICsgXCJ0XCIgKyByZWdudW07XG5cdFx0XHRjYXNlIDB4Mzpcblx0XHRcdFx0cmV0dXJuIGRlc2MuaGVhZGVyLnR5cGUgPT0gXCJ2ZXJ0ZXhcIj8gXCJvdXRwb3NcIiA6IFwiZ2xfRnJhZ0NvbG9yXCI7XG5cdFx0XHRjYXNlIDB4NDpcblx0XHRcdFx0cmV0dXJuIFwidmlcIiArIHJlZ251bTtcblx0XHRcdGNhc2UgMHg1OlxuXHRcdFx0XHRyZXR1cm4gXCJmc1wiICsgcmVnbnVtO1xuXHRcdFx0Y2FzZSAweDY6XG5cdFx0XHRcdHJldHVybiBcInRtcF9GcmFnRGVwdGhcIjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IFwiVW5rbm93biByZWdpc3RlciB0eXBlXCI7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNvdXJjZXRvc3RyaW5nKHMsIHN1YmxpbmUsIGR3bSwgaXNzY2FsYXIsIGRlc2MsIHRhZyk6c3RyaW5nXG5cdHtcblx0XHR2YXIgc3dpeiA9IFsgXCJ4XCIsIFwieVwiLCBcInpcIiwgXCJ3XCIgXTtcblx0XHR2YXIgcjtcblxuXHRcdGlmIChzLmluZGlyZWN0ZmxhZykge1xuXHRcdFx0ciA9IFwidmNhcnJyW2ludChcIiArIHRoaXMucmVndG9zdHJpbmcocy5pbmRleHJlZ3R5cGUsIHMucmVnbnVtLCBkZXNjLCB0YWcpICsgXCIuXCIgKyBzd2l6W3MuaW5kZXhzZWxlY3RdICsgXCIpXCI7XG5cdFx0XHR2YXIgcmVhbG9mcyA9IHN1YmxpbmUgKyBzLmluZGV4b2Zmc2V0O1xuXHRcdFx0aWYgKHJlYWxvZnMgPCAwKSByICs9IHJlYWxvZnMudG9TdHJpbmcoKTtcblx0XHRcdGlmIChyZWFsb2ZzID4gMCkgciArPSBcIitcIiArIHJlYWxvZnMudG9TdHJpbmcoKTtcblx0XHRcdHIgKz0gXCJdXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHIgPSB0aGlzLnJlZ3Rvc3RyaW5nKHMucmVndHlwZSwgcy5yZWdudW0gKyBzdWJsaW5lLCBkZXNjLCB0YWcpO1xuXHRcdH1cblxuXHRcdC8vIHNhbXBsZXJzIG5ldmVyIGFkZCBzd2l6emxlICAgICAgICBcblx0XHRpZiAocy5yZWd0eXBlID09IDB4NSkge1xuXHRcdFx0cmV0dXJuIHI7XG5cdFx0fVxuXG5cdFx0Ly8gc2NhbGFyLCBmaXJzdCBjb21wb25lbnQgb25seVxuXHRcdGlmIChpc3NjYWxhcikge1xuXHRcdFx0cmV0dXJuIHIgKyBcIi5cIiArIHN3aXpbKHMuc3dpenpsZSA+PiAwKSAmIDNdO1xuXHRcdH1cblxuXHRcdC8vIGlkZW50aXR5XG5cdFx0aWYgKHMuc3dpenpsZSA9PSAweGU0ICYmIGR3bSA9PSAweGYpIHtcblx0XHRcdHJldHVybiByO1xuXHRcdH1cblxuXHRcdC8vIHdpdGggZGVzdGluYXRpb24gd3JpdGUgbWFzayBmb2xkZWQgaW5cblx0XHRyICs9IFwiLlwiO1xuXHRcdGlmIChkd20gJiAxKSByICs9IHN3aXpbKHMuc3dpenpsZSA+PiAwKSAmIDNdO1xuXHRcdGlmIChkd20gJiAyKSByICs9IHN3aXpbKHMuc3dpenpsZSA+PiAyKSAmIDNdO1xuXHRcdGlmIChkd20gJiA0KSByICs9IHN3aXpbKHMuc3dpenpsZSA+PiA0KSAmIDNdO1xuXHRcdGlmIChkd20gJiA4KSByICs9IHN3aXpbKHMuc3dpenpsZSA+PiA2KSAmIDNdO1xuXHRcdHJldHVybiByO1xuXHR9XG59XG5cbmV4cG9ydCA9IEFHTFNMUGFyc2VyOyJdfQ== \ No newline at end of file diff --git a/lib/aglsl/AGLSLParser.ts b/lib/aglsl/AGLSLParser.ts index 68a8955c..d1638b7c 100644 --- a/lib/aglsl/AGLSLParser.ts +++ b/lib/aglsl/AGLSLParser.ts @@ -1,6 +1,6 @@ import Description = require("awayjs-stagegl/lib/aglsl/Description"); import Mapping = require("awayjs-stagegl/lib/aglsl/Mapping"); -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); class AGLSLParser { diff --git a/lib/animators/AnimationSetBase.js b/lib/animators/AnimationSetBase.js index fa7b26e8..46302403 100755 --- a/lib/animators/AnimationSetBase.js +++ b/lib/animators/AnimationSetBase.js @@ -169,4 +169,4 @@ var AnimationSetBase = (function (_super) { })(NamedAssetBase); module.exports = AnimationSetBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvYW5pbWF0aW9uc2V0YmFzZS50cyJdLCJuYW1lcyI6WyJBbmltYXRpb25TZXRCYXNlIiwiQW5pbWF0aW9uU2V0QmFzZS5jb25zdHJ1Y3RvciIsIkFuaW1hdGlvblNldEJhc2UuX3BGaW5kVGVtcFJlZyIsIkFuaW1hdGlvblNldEJhc2UudXNlc0NQVSIsIkFuaW1hdGlvblNldEJhc2UucmVzZXRHUFVDb21wYXRpYmlsaXR5IiwiQW5pbWF0aW9uU2V0QmFzZS5jYW5jZWxHUFVDb21wYXRpYmlsaXR5IiwiQW5pbWF0aW9uU2V0QmFzZS5nZXRBR0FMVmVydGV4Q29kZSIsIkFuaW1hdGlvblNldEJhc2UuYWN0aXZhdGUiLCJBbmltYXRpb25TZXRCYXNlLmRlYWN0aXZhdGUiLCJBbmltYXRpb25TZXRCYXNlLmdldEFHQUxGcmFnbWVudENvZGUiLCJBbmltYXRpb25TZXRCYXNlLmdldEFHQUxVVkNvZGUiLCJBbmltYXRpb25TZXRCYXNlLmRvbmVBR0FMQ29kZSIsIkFuaW1hdGlvblNldEJhc2UuYXNzZXRUeXBlIiwiQW5pbWF0aW9uU2V0QmFzZS5hbmltYXRpb25zIiwiQW5pbWF0aW9uU2V0QmFzZS5hbmltYXRpb25OYW1lcyIsIkFuaW1hdGlvblNldEJhc2UuaGFzQW5pbWF0aW9uIiwiQW5pbWF0aW9uU2V0QmFzZS5nZXRBbmltYXRpb24iLCJBbmltYXRpb25TZXRCYXNlLmFkZEFuaW1hdGlvbiIsIkFuaW1hdGlvblNldEJhc2UuZGlzcG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxTQUFTLFdBQWUsbUNBQW1DLENBQUMsQ0FBQztBQUVwRSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdFLElBQU8sbUJBQW1CLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQU9yRixJQUFPLGlCQUFpQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFFcEYsQUFLQTs7OztHQURHO0lBQ0csZ0JBQWdCO0lBQVNBLFVBQXpCQSxnQkFBZ0JBLFVBQXVCQTtJQU81Q0EsU0FQS0EsZ0JBQWdCQTtRQVNwQkMsaUJBQU9BLENBQUNBO1FBTkRBLGdCQUFXQSxHQUE0QkEsSUFBSUEsS0FBS0EsRUFBcUJBLENBQUNBO1FBQ3RFQSxvQkFBZUEsR0FBaUJBLElBQUlBLEtBQUtBLEVBQVVBLENBQUNBO1FBQ3BEQSx5QkFBb0JBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO0lBS25EQSxDQUFDQTtJQUVERDs7Ozs7O09BTUdBO0lBQ0lBLHdDQUFhQSxHQUFwQkEsVUFBcUJBLE9BQXFCQSxFQUFFQSxjQUE0QkE7UUFBNUJFLDhCQUE0QkEsR0FBNUJBLHFCQUE0QkE7UUFFdkVBLElBQUlBLENBQUNBLEdBQW1CQSxDQUFDQSxDQUFDQTtRQUMxQkEsSUFBSUEsR0FBVUEsQ0FBQ0E7UUFFZkEsT0FBT0EsSUFBSUEsRUFBRUEsQ0FBQ0E7WUFDYkEsR0FBR0EsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDZkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsY0FBY0EsSUFBSUEsR0FBR0EsQ0FBQ0E7Z0JBQ3ZEQSxNQUFNQSxDQUFDQSxHQUFHQSxDQUFDQTtZQUNaQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUNMQSxDQUFDQTtRQUVEQSxBQUNBQSxtQkFEbUJBO1FBQ25CQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQU9ERixzQkFBV0EscUNBQU9BO1FBTGxCQTs7OztXQUlHQTthQUNIQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUN0QkEsQ0FBQ0E7OztPQUFBSDtJQUVEQTs7Ozs7T0FLR0E7SUFDSUEsZ0RBQXFCQSxHQUE1QkE7UUFFQ0ksSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsS0FBS0EsQ0FBQ0E7SUFDdkJBLENBQUNBO0lBRU1KLGlEQUFzQkEsR0FBN0JBO1FBRUNLLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUdETDs7T0FFR0E7SUFDSUEsNENBQWlCQSxHQUF4QkEsVUFBeUJBLFlBQTZCQTtRQUVyRE0sTUFBTUEsSUFBSUEsbUJBQW1CQSxFQUFFQSxDQUFDQTtJQUNqQ0EsQ0FBQ0E7SUFFRE47O09BRUdBO0lBQ0lBLG1DQUFRQSxHQUFmQSxVQUFnQkEsWUFBNkJBLEVBQUVBLEtBQVdBO1FBRXpETyxNQUFNQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBO0lBQ2pDQSxDQUFDQTtJQUVEUDs7T0FFR0E7SUFDSUEscUNBQVVBLEdBQWpCQSxVQUFrQkEsWUFBNkJBLEVBQUVBLEtBQVdBO1FBRTNEUSxNQUFNQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBO0lBQ2pDQSxDQUFDQTtJQUVEUjs7T0FFR0E7SUFDSUEsOENBQW1CQSxHQUExQkEsVUFBMkJBLFlBQTZCQSxFQUFFQSxZQUFtQkE7UUFFNUVTLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRURUOztPQUVHQTtJQUNJQSx3Q0FBYUEsR0FBcEJBLFVBQXFCQSxZQUE2QkE7UUFFakRVLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRURWOztPQUVHQTtJQUNJQSx1Q0FBWUEsR0FBbkJBLFVBQW9CQSxZQUE2QkE7UUFFaERXLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBS0RYLHNCQUFXQSx1Q0FBU0E7UUFIcEJBOztXQUVHQTthQUNIQTtZQUVDWSxNQUFNQSxDQUFDQSxTQUFTQSxDQUFDQSxhQUFhQSxDQUFDQTtRQUNoQ0EsQ0FBQ0E7OztPQUFBWjtJQUtEQSxzQkFBV0Esd0NBQVVBO1FBSHJCQTs7V0FFR0E7YUFDSEE7WUFFQ2EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFDekJBLENBQUNBOzs7T0FBQWI7SUFLREEsc0JBQVdBLDRDQUFjQTtRQUh6QkE7O1dBRUdBO2FBQ0hBO1lBRUNjLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBO1FBQzdCQSxDQUFDQTs7O09BQUFkO0lBRURBOzs7O09BSUdBO0lBQ0lBLHVDQUFZQSxHQUFuQkEsVUFBb0JBLElBQVdBO1FBRTlCZSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLElBQUlBLENBQUNBO0lBQ2hEQSxDQUFDQTtJQUVEZjs7OztPQUlHQTtJQUNJQSx1Q0FBWUEsR0FBbkJBLFVBQW9CQSxJQUFXQTtRQUU5QmdCLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDeENBLENBQUNBO0lBRURoQjs7Ozs7T0FLR0E7SUFDSUEsdUNBQVlBLEdBQW5CQSxVQUFvQkEsSUFBc0JBO1FBRXpDaUIsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUN4Q0EsTUFBTUEsSUFBSUEsaUJBQWlCQSxDQUFDQSxrQkFBa0JBLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLDZCQUE2QkEsQ0FBQ0EsQ0FBQ0E7UUFFN0ZBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFNUNBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRTVCQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUN0Q0EsQ0FBQ0E7SUFFRGpCOztPQUVHQTtJQUNJQSxrQ0FBT0EsR0FBZEE7SUFFQWtCLENBQUNBO0lBQ0ZsQix1QkFBQ0E7QUFBREEsQ0FsTEEsQUFrTENBLEVBbEw4QixjQUFjLEVBa0w1QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJhbmltYXRvcnMvQW5pbWF0aW9uU2V0QmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXNzZXRUeXBlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L0Fzc2V0VHlwZVwiKTtcbmltcG9ydCBJQXNzZXRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvbGlicmFyeS9JQXNzZXRcIik7XG5pbXBvcnQgTmFtZWRBc3NldEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L05hbWVkQXNzZXRCYXNlXCIpO1xuaW1wb3J0IEFic3RyYWN0TWV0aG9kRXJyb3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXJyb3JzL0Fic3RyYWN0TWV0aG9kRXJyb3JcIik7XG5cbmltcG9ydCBBbmltYXRpb25Ob2RlQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9hbmltYXRvcnMvbm9kZXMvQW5pbWF0aW9uTm9kZUJhc2VcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBBbmltYXRpb25TZXRFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9lcnJvcnMvQW5pbWF0aW9uU2V0RXJyb3JcIik7XG5cbi8qKlxuICogUHJvdmlkZXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgZGF0YSBzZXQgY2xhc3NlcyB0aGF0IGhvbGQgYW5pbWF0aW9uIGRhdGEgZm9yIHVzZSBpbiBhbmltYXRvciBjbGFzc2VzLlxuICpcbiAqIEBzZWUgYXdheS5hbmltYXRvcnMuQW5pbWF0b3JCYXNlXG4gKi9cbmNsYXNzIEFuaW1hdGlvblNldEJhc2UgZXh0ZW5kcyBOYW1lZEFzc2V0QmFzZSBpbXBsZW1lbnRzIElBc3NldFxue1xuXHRwcml2YXRlIF91c2VzQ1BVOmJvb2xlYW47XG5cdHByaXZhdGUgX2FuaW1hdGlvbnM6QXJyYXk8QW5pbWF0aW9uTm9kZUJhc2U+ID0gbmV3IEFycmF5PEFuaW1hdGlvbk5vZGVCYXNlPigpO1xuXHRwcml2YXRlIF9hbmltYXRpb25OYW1lczpBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblx0cHJpdmF0ZSBfYW5pbWF0aW9uRGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgYSB0ZW1wb3JhcnkgR1BVIHJlZ2lzdGVyIHRoYXQncyBzdGlsbCBmcmVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhjbHVkZSBBbiBhcnJheSBvZiBub24tZnJlZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLlxuXHQgKiBAcGFyYW0gZXhjbHVkZUFub3RoZXIgQW4gYWRkaXRpb25hbCByZWdpc3RlciB0aGF0J3Mgbm90IGZyZWUuXG5cdCAqIEByZXR1cm4gQSB0ZW1wb3JhcnkgcmVnaXN0ZXIgdGhhdCBjYW4gYmUgdXNlZC5cblx0ICovXG5cdHB1YmxpYyBfcEZpbmRUZW1wUmVnKGV4Y2x1ZGU6QXJyYXk8c3RyaW5nPiwgZXhjbHVkZUFub3RoZXI6c3RyaW5nID0gbnVsbCk6c3RyaW5nXG5cdHtcblx0XHR2YXIgaTpudW1iZXIgLyp1aW50Ki8gPSAwO1xuXHRcdHZhciByZWc6c3RyaW5nO1xuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdHJlZyA9IFwidnRcIiArIGk7XG5cdFx0XHRpZiAoZXhjbHVkZS5pbmRleE9mKHJlZykgPT0gLTEgJiYgZXhjbHVkZUFub3RoZXIgIT0gcmVnKVxuXHRcdFx0XHRyZXR1cm4gcmVnO1xuXHRcdFx0KytpO1xuXHRcdH1cblxuXHRcdC8vIGNhbid0IGJlIHJlYWNoZWRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5pbWF0aW9uIGRhdGEgY29udGFpbmVkIHdpdGhpbiB0aGUgc2V0IGNvbWJpbmVkIHdpdGhcblx0ICogdGhlIHZlcnRleCByZWdpc3RlcnMgYWxyZWFkeSBpbiB1c2Ugb24gc2hhZGluZyBtYXRlcmlhbHMgYWxsb3dzIHRoZSBhbmltYXRpb24gZGF0YSB0byB1dGlsaXNlXG5cdCAqIEdQVSBjYWxscy5cblx0ICovXG5cdHB1YmxpYyBnZXQgdXNlc0NQVSgpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl91c2VzQ1BVO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBieSB0aGUgbWF0ZXJpYWwgdG8gcmVzZXQgdGhlIEdQVSBpbmRpY2F0b3IgYmVmb3JlIHRlc3Rpbmcgd2hldGhlciByZWdpc3RlciBzcGFjZSBpbiB0aGUgc2hhZGVyXG5cdCAqIGlzIGF2YWlsYWJsZSBmb3IgcnVubmluZyBHUFUtYmFzZWQgYW5pbWF0aW9uIGNvZGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXRHUFVDb21wYXRpYmlsaXR5KClcblx0e1xuXHRcdHRoaXMuX3VzZXNDUFUgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBjYW5jZWxHUFVDb21wYXRpYmlsaXR5KClcblx0e1xuXHRcdHRoaXMuX3VzZXNDUFUgPSB0cnVlO1xuXHR9XG5cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBnZXRBR0FMVmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSk6c3RyaW5nXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgYWN0aXZhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGRlYWN0aXZhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGdldEFHQUxGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHNoYWRlZFRhcmdldDpzdHJpbmcpOnN0cmluZ1xuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGdldEFHQUxVVkNvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOnN0cmluZ1xuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGRvbmVBR0FMQ29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSlcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBnZXQgYXNzZXRUeXBlKCk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gQXNzZXRUeXBlLkFOSU1BVElPTl9TRVQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHZlY3RvciBvZiBhbmltYXRpb24gc3RhdGUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBhbmltYXRpb24gZGF0YSBzZXQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFuaW1hdGlvbnMoKTpBcnJheTxBbmltYXRpb25Ob2RlQmFzZT5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSB2ZWN0b3Igb2YgYW5pbWF0aW9uIHN0YXRlIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBjb250ZW50cyBvZiB0aGUgYW5pbWF0aW9uIGRhdGEgc2V0LlxuXHQgKi9cblx0cHVibGljIGdldCBhbmltYXRpb25OYW1lcygpOkFycmF5PHN0cmluZz5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25OYW1lcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0YXRlIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIGFuaW1hdGlvbiBzZXQgdW5kZXIgdGhlIGdpdmVuIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGF0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cblx0ICovXG5cdHB1YmxpYyBoYXNBbmltYXRpb24obmFtZTpzdHJpbmcpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25EaWN0aW9uYXJ5W25hbWVdICE9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbmltYXRpb24gc3RhdGUgb2JqZWN0IHJlZ2lzdGVyZWQgaW4gdGhlIGFuaW1hdGlvbiBkYXRhIHNldCB1bmRlciB0aGUgZ2l2ZW4gbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHN0YXRlTmFtZSBUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlIG9iamVjdCB0byBiZSByZXRyaWV2ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QW5pbWF0aW9uKG5hbWU6c3RyaW5nKTpBbmltYXRpb25Ob2RlQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkRpY3Rpb25hcnlbbmFtZV07XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBhbmltYXRpb24gc3RhdGUgb2JqZWN0IHRvIHRoZSBhbmlhbXRpb24gZGF0YSBzZXQgdW5kZXIgdGhlIGdpdmVuIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGF0ZU5hbWUgVGhlIG5hbWUgdW5kZXIgd2hpY2ggdGhlIGFuaW1hdGlvbiBzdGF0ZSBvYmplY3Qgd2lsbCBiZSBzdG9yZWQuXG5cdCAqIEBwYXJhbSBhbmltYXRpb25TdGF0ZSBUaGUgYW5pbWF0aW9uIHN0YXRlIG9iamVjdCB0byBiZSBzdGFvcmVkIGluIHRoZSBzZXQuXG5cdCAqL1xuXHRwdWJsaWMgYWRkQW5pbWF0aW9uKG5vZGU6QW5pbWF0aW9uTm9kZUJhc2UpXG5cdHtcblx0XHRpZiAodGhpcy5fYW5pbWF0aW9uRGljdGlvbmFyeVtub2RlLm5hbWVdKVxuXHRcdFx0dGhyb3cgbmV3IEFuaW1hdGlvblNldEVycm9yKFwicm9vdCBub2RlIG5hbWUgJ1wiICsgbm9kZS5uYW1lICsgXCInIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzZXRcIik7XG5cblx0XHR0aGlzLl9hbmltYXRpb25EaWN0aW9uYXJ5W25vZGUubmFtZV0gPSBub2RlO1xuXG5cdFx0dGhpcy5fYW5pbWF0aW9ucy5wdXNoKG5vZGUpO1xuXG5cdFx0dGhpcy5fYW5pbWF0aW9uTmFtZXMucHVzaChub2RlLm5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFucyB1cCBhbnkgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGN1cnJlbnQgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdH1cbn1cblxuZXhwb3J0ID0gQW5pbWF0aW9uU2V0QmFzZTsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvYW5pbWF0aW9uc2V0YmFzZS50cyJdLCJuYW1lcyI6WyJBbmltYXRpb25TZXRCYXNlIiwiQW5pbWF0aW9uU2V0QmFzZS5jb25zdHJ1Y3RvciIsIkFuaW1hdGlvblNldEJhc2UuX3BGaW5kVGVtcFJlZyIsIkFuaW1hdGlvblNldEJhc2UudXNlc0NQVSIsIkFuaW1hdGlvblNldEJhc2UucmVzZXRHUFVDb21wYXRpYmlsaXR5IiwiQW5pbWF0aW9uU2V0QmFzZS5jYW5jZWxHUFVDb21wYXRpYmlsaXR5IiwiQW5pbWF0aW9uU2V0QmFzZS5nZXRBR0FMVmVydGV4Q29kZSIsIkFuaW1hdGlvblNldEJhc2UuYWN0aXZhdGUiLCJBbmltYXRpb25TZXRCYXNlLmRlYWN0aXZhdGUiLCJBbmltYXRpb25TZXRCYXNlLmdldEFHQUxGcmFnbWVudENvZGUiLCJBbmltYXRpb25TZXRCYXNlLmdldEFHQUxVVkNvZGUiLCJBbmltYXRpb25TZXRCYXNlLmRvbmVBR0FMQ29kZSIsIkFuaW1hdGlvblNldEJhc2UuYXNzZXRUeXBlIiwiQW5pbWF0aW9uU2V0QmFzZS5hbmltYXRpb25zIiwiQW5pbWF0aW9uU2V0QmFzZS5hbmltYXRpb25OYW1lcyIsIkFuaW1hdGlvblNldEJhc2UuaGFzQW5pbWF0aW9uIiwiQW5pbWF0aW9uU2V0QmFzZS5nZXRBbmltYXRpb24iLCJBbmltYXRpb25TZXRCYXNlLmFkZEFuaW1hdGlvbiIsIkFuaW1hdGlvblNldEJhc2UuZGlzcG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxTQUFTLFdBQWUsbUNBQW1DLENBQUMsQ0FBQztBQUVwRSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdFLElBQU8sbUJBQW1CLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQU9yRixJQUFPLGlCQUFpQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFFcEYsQUFLQTs7OztHQURHO0lBQ0csZ0JBQWdCO0lB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QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJhbmltYXRvcnMvQW5pbWF0aW9uU2V0QmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXNzZXRUeXBlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L0Fzc2V0VHlwZVwiKTtcbmltcG9ydCBJQXNzZXRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvbGlicmFyeS9JQXNzZXRcIik7XG5pbXBvcnQgTmFtZWRBc3NldEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L05hbWVkQXNzZXRCYXNlXCIpO1xuaW1wb3J0IEFic3RyYWN0TWV0aG9kRXJyb3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXJyb3JzL0Fic3RyYWN0TWV0aG9kRXJyb3JcIik7XG5cbmltcG9ydCBBbmltYXRpb25Ob2RlQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9hbmltYXRvcnMvbm9kZXMvQW5pbWF0aW9uTm9kZUJhc2VcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgQW5pbWF0aW9uU2V0RXJyb3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvZXJyb3JzL0FuaW1hdGlvblNldEVycm9yXCIpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGRhdGEgc2V0IGNsYXNzZXMgdGhhdCBob2xkIGFuaW1hdGlvbiBkYXRhIGZvciB1c2UgaW4gYW5pbWF0b3IgY2xhc3Nlcy5cbiAqXG4gKiBAc2VlIGF3YXkuYW5pbWF0b3JzLkFuaW1hdG9yQmFzZVxuICovXG5jbGFzcyBBbmltYXRpb25TZXRCYXNlIGV4dGVuZHMgTmFtZWRBc3NldEJhc2UgaW1wbGVtZW50cyBJQXNzZXRcbntcblx0cHJpdmF0ZSBfdXNlc0NQVTpib29sZWFuO1xuXHRwcml2YXRlIF9hbmltYXRpb25zOkFycmF5PEFuaW1hdGlvbk5vZGVCYXNlPiA9IG5ldyBBcnJheTxBbmltYXRpb25Ob2RlQmFzZT4oKTtcblx0cHJpdmF0ZSBfYW5pbWF0aW9uTmFtZXM6QXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cdHByaXZhdGUgX2FuaW1hdGlvbkRpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGVtcG9yYXJ5IEdQVSByZWdpc3RlciB0aGF0J3Mgc3RpbGwgZnJlZS5cblx0ICpcblx0ICogQHBhcmFtIGV4Y2x1ZGUgQW4gYXJyYXkgb2Ygbm9uLWZyZWUgdGVtcG9yYXJ5IHJlZ2lzdGVycy5cblx0ICogQHBhcmFtIGV4Y2x1ZGVBbm90aGVyIEFuIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhhdCdzIG5vdCBmcmVlLlxuXHQgKiBAcmV0dXJuIEEgdGVtcG9yYXJ5IHJlZ2lzdGVyIHRoYXQgY2FuIGJlIHVzZWQuXG5cdCAqL1xuXHRwdWJsaWMgX3BGaW5kVGVtcFJlZyhleGNsdWRlOkFycmF5PHN0cmluZz4sIGV4Y2x1ZGVBbm90aGVyOnN0cmluZyA9IG51bGwpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGk6bnVtYmVyIC8qdWludCovID0gMDtcblx0XHR2YXIgcmVnOnN0cmluZztcblxuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRyZWcgPSBcInZ0XCIgKyBpO1xuXHRcdFx0aWYgKGV4Y2x1ZGUuaW5kZXhPZihyZWcpID09IC0xICYmIGV4Y2x1ZGVBbm90aGVyICE9IHJlZylcblx0XHRcdFx0cmV0dXJuIHJlZztcblx0XHRcdCsraTtcblx0XHR9XG5cblx0XHQvLyBjYW4ndCBiZSByZWFjaGVkXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFuaW1hdGlvbiBkYXRhIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNldCBjb21iaW5lZCB3aXRoXG5cdCAqIHRoZSB2ZXJ0ZXggcmVnaXN0ZXJzIGFscmVhZHkgaW4gdXNlIG9uIHNoYWRpbmcgbWF0ZXJpYWxzIGFsbG93cyB0aGUgYW5pbWF0aW9uIGRhdGEgdG8gdXRpbGlzZVxuXHQgKiBHUFUgY2FsbHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHVzZXNDUFUoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdXNlc0NQVTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIG1hdGVyaWFsIHRvIHJlc2V0IHRoZSBHUFUgaW5kaWNhdG9yIGJlZm9yZSB0ZXN0aW5nIHdoZXRoZXIgcmVnaXN0ZXIgc3BhY2UgaW4gdGhlIHNoYWRlclxuXHQgKiBpcyBhdmFpbGFibGUgZm9yIHJ1bm5pbmcgR1BVLWJhc2VkIGFuaW1hdGlvbiBjb2RlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIHJlc2V0R1BVQ29tcGF0aWJpbGl0eSgpXG5cdHtcblx0XHR0aGlzLl91c2VzQ1BVID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgY2FuY2VsR1BVQ29tcGF0aWJpbGl0eSgpXG5cdHtcblx0XHR0aGlzLl91c2VzQ1BVID0gdHJ1ZTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QUdBTFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOnN0cmluZ1xuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkZWFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBnZXRBR0FMRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBzaGFkZWRUYXJnZXQ6c3RyaW5nKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBnZXRBR0FMVVZDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkb25lQUdBTENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFzc2V0VHlwZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIEFzc2V0VHlwZS5BTklNQVRJT05fU0VUO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSB2ZWN0b3Igb2YgYW5pbWF0aW9uIHN0YXRlIG9iamVjdHMgdGhhdCBtYWtlIHVwIHRoZSBjb250ZW50cyBvZiB0aGUgYW5pbWF0aW9uIGRhdGEgc2V0LlxuXHQgKi9cblx0cHVibGljIGdldCBhbmltYXRpb25zKCk6QXJyYXk8QW5pbWF0aW9uTm9kZUJhc2U+XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYW5pbWF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgdmVjdG9yIG9mIGFuaW1hdGlvbiBzdGF0ZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgY29udGVudHMgb2YgdGhlIGFuaW1hdGlvbiBkYXRhIHNldC5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW5pbWF0aW9uTmFtZXMoKTpBcnJheTxzdHJpbmc+XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYW5pbWF0aW9uTmFtZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdGF0ZSBpcyByZWdpc3RlcmVkIGluIHRoZSBhbmltYXRpb24gc2V0IHVuZGVyIHRoZSBnaXZlbiBuYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RhdGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG5cdCAqL1xuXHRwdWJsaWMgaGFzQW5pbWF0aW9uKG5hbWU6c3RyaW5nKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRGljdGlvbmFyeVtuYW1lXSAhPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYW5pbWF0aW9uIHN0YXRlIG9iamVjdCByZWdpc3RlcmVkIGluIHRoZSBhbmltYXRpb24gZGF0YSBzZXQgdW5kZXIgdGhlIGdpdmVuIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGF0ZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSBvYmplY3QgdG8gYmUgcmV0cmlldmVkLlxuXHQgKi9cblx0cHVibGljIGdldEFuaW1hdGlvbihuYW1lOnN0cmluZyk6QW5pbWF0aW9uTm9kZUJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25EaWN0aW9uYXJ5W25hbWVdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gYW5pbWF0aW9uIHN0YXRlIG9iamVjdCB0byB0aGUgYW5pYW10aW9uIGRhdGEgc2V0IHVuZGVyIHRoZSBnaXZlbiBuYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RhdGVOYW1lIFRoZSBuYW1lIHVuZGVyIHdoaWNoIHRoZSBhbmltYXRpb24gc3RhdGUgb2JqZWN0IHdpbGwgYmUgc3RvcmVkLlxuXHQgKiBAcGFyYW0gYW5pbWF0aW9uU3RhdGUgVGhlIGFuaW1hdGlvbiBzdGF0ZSBvYmplY3QgdG8gYmUgc3Rhb3JlZCBpbiB0aGUgc2V0LlxuXHQgKi9cblx0cHVibGljIGFkZEFuaW1hdGlvbihub2RlOkFuaW1hdGlvbk5vZGVCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FuaW1hdGlvbkRpY3Rpb25hcnlbbm9kZS5uYW1lXSlcblx0XHRcdHRocm93IG5ldyBBbmltYXRpb25TZXRFcnJvcihcInJvb3Qgbm9kZSBuYW1lICdcIiArIG5vZGUubmFtZSArIFwiJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc2V0XCIpO1xuXG5cdFx0dGhpcy5fYW5pbWF0aW9uRGljdGlvbmFyeVtub2RlLm5hbWVdID0gbm9kZTtcblxuXHRcdHRoaXMuX2FuaW1hdGlvbnMucHVzaChub2RlKTtcblxuXHRcdHRoaXMuX2FuaW1hdGlvbk5hbWVzLnB1c2gobm9kZS5uYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhbnMgdXAgYW55IHJlc291cmNlcyB1c2VkIGJ5IHRoZSBjdXJyZW50IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHR9XG59XG5cbmV4cG9ydCA9IEFuaW1hdGlvblNldEJhc2U7Il19 \ No newline at end of file diff --git a/lib/animators/AnimationSetBase.ts b/lib/animators/AnimationSetBase.ts index 9fc3a81a..5f243980 100644 --- a/lib/animators/AnimationSetBase.ts +++ b/lib/animators/AnimationSetBase.ts @@ -5,7 +5,7 @@ import AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodErr import AnimationNodeBase = require("awayjs-display/lib/animators/nodes/AnimationNodeBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); import AnimationSetError = require("awayjs-stagegl/lib/errors/AnimationSetError"); diff --git a/lib/animators/AnimatorBase.js b/lib/animators/AnimatorBase.js index 9d29efbf..90b0e172 100755 --- a/lib/animators/AnimatorBase.js +++ b/lib/animators/AnimatorBase.js @@ -323,4 +323,4 @@ var AnimatorBase = (function (_super) { })(NamedAssetBase); module.exports = AnimatorBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvYW5pbWF0b3JiYXNlLnRzIl0sIm5hbWVzIjpbIkFuaW1hdG9yQmFzZSIsIkFuaW1hdG9yQmFzZS5jb25zdHJ1Y3RvciIsIkFuaW1hdG9yQmFzZS5nZXRBbmltYXRpb25TdGF0ZSIsIkFuaW1hdG9yQmFzZS5nZXRBbmltYXRpb25TdGF0ZUJ5TmFtZSIsIkFuaW1hdG9yQmFzZS5hYnNvbHV0ZVRpbWUiLCJBbmltYXRvckJhc2UuYW5pbWF0aW9uU2V0IiwiQW5pbWF0b3JCYXNlLmFjdGl2ZVN0YXRlIiwiQW5pbWF0b3JCYXNlLmFjdGl2ZUFuaW1hdGlvbiIsIkFuaW1hdG9yQmFzZS5hY3RpdmVBbmltYXRpb25OYW1lIiwiQW5pbWF0b3JCYXNlLmF1dG9VcGRhdGUiLCJBbmltYXRvckJhc2UudGltZSIsIkFuaW1hdG9yQmFzZS5waGFzZSIsIkFuaW1hdG9yQmFzZS5wbGF5YmFja1NwZWVkIiwiQW5pbWF0b3JCYXNlLnNldFJlbmRlclN0YXRlIiwiQW5pbWF0b3JCYXNlLnN0YXJ0IiwiQW5pbWF0b3JCYXNlLnN0b3AiLCJBbmltYXRvckJhc2UudXBkYXRlIiwiQW5pbWF0b3JCYXNlLnJlc2V0IiwiQW5pbWF0b3JCYXNlLmFkZE93bmVyIiwiQW5pbWF0b3JCYXNlLnJlbW92ZU93bmVyIiwiQW5pbWF0b3JCYXNlLl9wVXBkYXRlRGVsdGFUaW1lIiwiQW5pbWF0b3JCYXNlLm9uRW50ZXJGcmFtZSIsIkFuaW1hdG9yQmFzZS5hcHBseVBvc2l0aW9uRGVsdGEiLCJBbmltYXRvckJhc2UuZGlzcGF0Y2hDeWNsZUV2ZW50IiwiQW5pbWF0b3JCYXNlLmNsb25lIiwiQW5pbWF0b3JCYXNlLmRpc3Bvc2UiLCJBbmltYXRvckJhc2UudGVzdEdQVUNvbXBhdGliaWxpdHkiLCJBbmltYXRvckJhc2UuYXNzZXRUeXBlIiwiQW5pbWF0b3JCYXNlLmdldFJlbmRlcmFibGVTdWJHZW9tZXRyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FB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QUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFFRHZCOztPQUVHQTtJQUNJQSw0QkFBS0EsR0FBWkE7UUFFQ3dCLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRUR4Qjs7T0FFR0E7SUFDSUEsOEJBQU9BLEdBQWRBO0lBRUF5QixDQUFDQTtJQUVEekI7O09BRUdBO0lBQ0lBLDJDQUFvQkEsR0FBM0JBLFVBQTRCQSxZQUE2QkE7UUFFeEQwQixNQUFNQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBO0lBQ2pDQSxDQUFDQTtJQUtEMUIsc0JBQVdBLG1DQUFTQTtRQUhwQkE7O1dBRUdBO2FBQ0hBO1lBRUMyQixNQUFNQSxDQUFDQSxTQUFTQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7OztPQUFBM0I7SUFHTUEsK0NBQXdCQSxHQUEvQkEsVUFBZ0NBLFVBQW9DQSxFQUFFQSxpQkFBcUNBO1FBRTFHNEIsQUFDQUEsb0JBRG9CQTtRQUNwQkEsTUFBTUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtJQUMxQkEsQ0FBQ0E7SUFDRjVCLG1CQUFDQTtBQUFEQSxDQXpWQSxBQXlWQ0EsRUF6VjBCLGNBQWMsRUF5VnhDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImFuaW1hdG9ycy9BbmltYXRvckJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQXNzZXRUeXBlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L0Fzc2V0VHlwZVwiKTtcbmltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbmltcG9ydCBnZXRUaW1lclx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9nZXRUaW1lclwiKTtcblxuaW1wb3J0IElBbmltYXRpb25TZXRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9hbmltYXRvcnMvSUFuaW1hdGlvblNldFwiKTtcbmltcG9ydCBJQW5pbWF0b3JcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2FuaW1hdG9ycy9JQW5pbWF0b3JcIik7XG5pbXBvcnQgQW5pbWF0aW9uTm9kZUJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYW5pbWF0b3JzL25vZGVzL0FuaW1hdGlvbk5vZGVCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL01lc2hcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgSUFuaW1hdGlvblN0YXRlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYW5pbWF0b3JzL3N0YXRlcy9JQW5pbWF0aW9uU3RhdGVcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZVx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9UcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlXCIpO1xuaW1wb3J0IEFuaW1hdG9yRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9ldmVudHMvQW5pbWF0b3JFdmVudFwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5cbi8qKlxuICogRGlzcGF0Y2hlZCB3aGVuIHBsYXliYWNrIG9mIGFuIGFuaW1hdGlvbiBpbnNpZGUgdGhlIGFuaW1hdG9yIG9iamVjdCBzdGFydHMuXG4gKlxuICogQGV2ZW50VHlwZSBhd2F5M2QuZXZlbnRzLkFuaW1hdG9yRXZlbnRcbiAqL1xuLy9bRXZlbnQobmFtZT1cInN0YXJ0XCIsIHR5cGU9XCJhd2F5M2QuZXZlbnRzLkFuaW1hdG9yRXZlbnRcIildXG5cbi8qKlxuICogRGlzcGF0Y2hlZCB3aGVuIHBsYXliYWNrIG9mIGFuIGFuaW1hdGlvbiBpbnNpZGUgdGhlIGFuaW1hdG9yIG9iamVjdCBzdG9wcy5cbiAqXG4gKiBAZXZlbnRUeXBlIGF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFxuICovXG4vL1tFdmVudChuYW1lPVwic3RvcFwiLCB0eXBlPVwiYXdheTNkLmV2ZW50cy5BbmltYXRvckV2ZW50XCIpXVxuXG4vKipcbiAqIERpc3BhdGNoZWQgd2hlbiBwbGF5YmFjayBvZiBhbiBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGFuIGFuaW1hdGlvbi5cbiAqXG4gKiBAZXZlbnRUeXBlIGF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFxuICovXG4vL1tFdmVudChuYW1lPVwiY3ljbGVfY29tcGxldGVcIiwgdHlwZT1cImF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFwiKV1cblxuLyoqXG4gKiBQcm92aWRlcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbmltYXRvciBjbGFzc2VzIHRoYXQgY29udHJvbCBhbmltYXRpb24gb3V0cHV0IGZyb20gYSBkYXRhIHNldCBzdWJ0eXBlIG9mIDxjb2RlPkFuaW1hdGlvblNldEJhc2U8L2NvZGU+LlxuICpcbiAqIEBzZWUgYXdheS5hbmltYXRvcnMuQW5pbWF0aW9uU2V0QmFzZVxuICovXG5jbGFzcyBBbmltYXRvckJhc2UgZXh0ZW5kcyBOYW1lZEFzc2V0QmFzZSBpbXBsZW1lbnRzIElBbmltYXRvclxue1xuXHRwcml2YXRlIF9icm9hZGNhc3RlcjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgX2lzUGxheWluZzpib29sZWFuO1xuXHRwcml2YXRlIF9hdXRvVXBkYXRlOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9zdGFydEV2ZW50OkFuaW1hdG9yRXZlbnQ7XG5cdHByaXZhdGUgX3N0b3BFdmVudDpBbmltYXRvckV2ZW50O1xuXHRwcml2YXRlIF9jeWNsZUV2ZW50OkFuaW1hdG9yRXZlbnQ7XG5cdHByaXZhdGUgX3RpbWU6bnVtYmVyIC8qaW50Ki8gPSAwO1xuXHRwcml2YXRlIF9wbGF5YmFja1NwZWVkOm51bWJlciA9IDE7XG5cblx0cHVibGljIF9wQW5pbWF0aW9uU2V0OklBbmltYXRpb25TZXQ7XG5cdHB1YmxpYyBfcE93bmVyczpBcnJheTxNZXNoPiA9IG5ldyBBcnJheTxNZXNoPigpO1xuXHRwdWJsaWMgX3BBY3RpdmVOb2RlOkFuaW1hdGlvbk5vZGVCYXNlO1xuXHRwdWJsaWMgX3BBY3RpdmVTdGF0ZTpJQW5pbWF0aW9uU3RhdGU7XG5cdHB1YmxpYyBfcEFjdGl2ZUFuaW1hdGlvbk5hbWU6c3RyaW5nO1xuXHRwdWJsaWMgX3BBYnNvbHV0ZVRpbWU6bnVtYmVyID0gMDtcblxuXHRwcml2YXRlIF9hbmltYXRpb25TdGF0ZXM6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRyYW5zbGF0aW9uIG9mIHRoZSBhbmltYXRlZCBtZXNoIGZyb20gZGF0YSByZXR1cm5lZCBwZXIgZnJhbWUgdmlhIHRoZSBwb3NpdGlvbkRlbHRhIHByb3BlcnR5IG9mIHRoZSBhY3RpdmUgYW5pbWF0aW9uIG5vZGUuIERlZmF1bHRzIHRvIHRydWUuXG5cdCAqXG5cdCAqIEBzZWUgYXdheS5hbmltYXRvcnMuSUFuaW1hdGlvblN0YXRlI3Bvc2l0aW9uRGVsdGFcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVQb3NpdGlvbjpib29sZWFuID0gdHJ1ZTtcblxuXHRwdWJsaWMgZ2V0QW5pbWF0aW9uU3RhdGUobm9kZTpBbmltYXRpb25Ob2RlQmFzZSk6SUFuaW1hdGlvblN0YXRlXG5cdHtcblx0XHR2YXIgY2xhc3NOYW1lOmFueSA9IG5vZGUuc3RhdGVDbGFzcztcblx0XHR2YXIgdUlEOm51bWJlciA9IG5vZGUuaWQ7XG5cblx0XHRpZiAodGhpcy5fYW5pbWF0aW9uU3RhdGVzW3VJRF0gPT0gbnVsbClcblx0XHRcdHRoaXMuX2FuaW1hdGlvblN0YXRlc1t1SURdID0gbmV3IGNsYXNzTmFtZSh0aGlzLCBub2RlKTtcblxuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25TdGF0ZXNbdUlEXTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBbmltYXRpb25TdGF0ZUJ5TmFtZShuYW1lOnN0cmluZyk6SUFuaW1hdGlvblN0YXRlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBbmltYXRpb25TdGF0ZSh0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbihuYW1lKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaW50ZXJuYWwgYWJzb2x1dGUgdGltZSBvZiB0aGUgYW5pbWF0b3IsIGNhbGN1bGF0ZWQgYnkgdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIHBsYXliYWNrIHNwZWVkLlxuXHQgKlxuXHQgKiBAc2VlICN0aW1lXG5cdCAqIEBzZWUgI3BsYXliYWNrU3BlZWRcblx0ICovXG5cdHB1YmxpYyBnZXQgYWJzb2x1dGVUaW1lKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcEFic29sdXRlVGltZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhbmltYXRpb24gZGF0YSBzZXQgaW4gdXNlIGJ5IHRoZSBhbmltYXRvci5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW5pbWF0aW9uU2V0KCk6SUFuaW1hdGlvblNldFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BBbmltYXRpb25TZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgYW5pbWF0aW9uIHN0YXRlLlxuXHQgKi9cblx0cHVibGljIGdldCBhY3RpdmVTdGF0ZSgpOklBbmltYXRpb25TdGF0ZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BBY3RpdmVTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSBhbmltYXRpb24gbm9kZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYWN0aXZlQW5pbWF0aW9uKCk6QW5pbWF0aW9uTm9kZUJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbih0aGlzLl9wQWN0aXZlQW5pbWF0aW9uTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgYW5pbWF0aW9uIG5vZGUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFjdGl2ZUFuaW1hdGlvbk5hbWUoKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wQWN0aXZlQW5pbWF0aW9uTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFuaW1hdG9ycyBpbnRlcm5hbCB1cGRhdGUgbWVjaGFuaXNtcyBhcmUgYWN0aXZlLiBVc2VkIGluIGNhc2VzXG5cdCAqIHdoZXJlIG1hbnVhbCB1cGRhdGVzIGFyZSByZXF1aXJlZCBlaXRoZXIgdmlhIHRoZSA8Y29kZT50aW1lPC9jb2RlPiBwcm9wZXJ0eSBvciA8Y29kZT51cGRhdGUoKTwvY29kZT4gbWV0aG9kLlxuXHQgKiBEZWZhdWx0cyB0byB0cnVlLlxuXHQgKlxuXHQgKiBAc2VlICN0aW1lXG5cdCAqIEBzZWUgI3VwZGF0ZSgpXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGF1dG9VcGRhdGUoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYXV0b1VwZGF0ZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYXV0b1VwZGF0ZSh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2F1dG9VcGRhdGUgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hdXRvVXBkYXRlID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy5fYXV0b1VwZGF0ZSlcblx0XHRcdHRoaXMuc3RhcnQoKTsgZWxzZVxuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbmQgc2V0cyB0aGUgaW50ZXJuYWwgdGltZSBjbG9jayBvZiB0aGUgYW5pbWF0b3IuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHRpbWUoKTpudW1iZXIgLyppbnQqL1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RpbWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRpbWUodmFsdWU6bnVtYmVyIC8qaW50Ki8pXG5cdHtcblx0XHRpZiAodGhpcy5fdGltZSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMudXBkYXRlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhbmltYXRpb24gcGhhc2Ugb2YgdGhlIGN1cnJlbnQgYWN0aXZlIHN0YXRlJ3MgYW5pbWF0aW9uIGNsaXAocykuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgcGhhc2UgdmFsdWUgdG8gdXNlLiAwIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiBhbiBhbmltYXRpb24gY2xpcCwgMSByZXByZXNlbnRzIHRoZSBlbmQuXG5cdCAqL1xuXHRwdWJsaWMgcGhhc2UodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fcEFjdGl2ZVN0YXRlLnBoYXNlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IDxjb2RlPkFuaW1hdG9yQmFzZTwvY29kZT4gb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5pbWF0aW9uU2V0IFRoZSBhbmltYXRpb24gZGF0YSBzZXQgdG8gYmUgdXNlZCBieSB0aGUgYW5pbWF0b3Igb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoYW5pbWF0aW9uU2V0OklBbmltYXRpb25TZXQpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcEFuaW1hdGlvblNldCA9IGFuaW1hdGlvblNldDtcblxuXHRcdHRoaXMuX2Jyb2FkY2FzdGVyID0gbmV3IFJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLm9uRW50ZXJGcmFtZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBieSB3aGljaCBwYXNzZWQgdGltZSBzaG91bGQgYmUgc2NhbGVkLiBVc2VkIHRvIHNsb3cgZG93biBvciBzcGVlZCB1cCBhbmltYXRpb25zLiBEZWZhdWx0cyB0byAxLlxuXHQgKi9cblx0cHVibGljIGdldCBwbGF5YmFja1NwZWVkKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcGxheWJhY2tTcGVlZDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgcGxheWJhY2tTcGVlZCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wbGF5YmFja1NwZWVkID0gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVuZGVyU3RhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2ZXJ0ZXhDb25zdGFudE9mZnNldDpudW1iZXIgLyppbnQqLywgdmVydGV4U3RyZWFtT2Zmc2V0Om51bWJlciAvKmludCovKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXN1bWVzIHRoZSBhdXRvbWF0aWMgcGxheWJhY2sgY2xvY2sgY29udHJvbGluZyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBhbmltYXRvci5cblx0ICovXG5cdHB1YmxpYyBzdGFydCgpXG5cdHtcblx0XHRpZiAodGhpcy5faXNQbGF5aW5nIHx8ICF0aGlzLl9hdXRvVXBkYXRlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdGltZSA9IHRoaXMuX3BBYnNvbHV0ZVRpbWUgPSBnZXRUaW1lcigpO1xuXG5cdFx0dGhpcy5faXNQbGF5aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2Jyb2FkY2FzdGVyLnN0YXJ0KCk7XG5cblx0XHRpZiAoIXRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LlNUQVJUKSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9zdGFydEV2ZW50ID09IG51bGwpXG5cdFx0XHR0aGlzLl9zdGFydEV2ZW50ID0gbmV3IEFuaW1hdG9yRXZlbnQoQW5pbWF0b3JFdmVudC5TVEFSVCwgdGhpcyk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fc3RhcnRFdmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUGF1c2VzIHRoZSBhdXRvbWF0aWMgcGxheWJhY2sgY2xvY2sgb2YgdGhlIGFuaW1hdG9yLCBpbiBjYXNlIG1hbnVhbCB1cGRhdGVzIGFyZSByZXF1aXJlZCB2aWEgdGhlXG5cdCAqIDxjb2RlPnRpbWU8L2NvZGU+IHByb3BlcnR5IG9yIDxjb2RlPnVwZGF0ZSgpPC9jb2RlPiBtZXRob2QuXG5cdCAqXG5cdCAqIEBzZWUgI3RpbWVcblx0ICogQHNlZSAjdXBkYXRlKClcblx0ICovXG5cdHB1YmxpYyBzdG9wKClcblx0e1xuXHRcdGlmICghdGhpcy5faXNQbGF5aW5nKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faXNQbGF5aW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLl9icm9hZGNhc3Rlci5zdG9wKCk7XG5cblx0XHRpZiAoIXRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LlNUT1ApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX3N0b3BFdmVudCA9PSBudWxsKVxuXHRcdFx0dGhpcy5fc3RvcEV2ZW50ID0gbmV3IEFuaW1hdG9yRXZlbnQoQW5pbWF0b3JFdmVudC5TVE9QLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh0aGlzLl9zdG9wRXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgd2F5IHRvIG1hbnVhbGx5IHVwZGF0ZSB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBhbmltYXRvciB3aGVuIGF1dG9tYXRpY1xuXHQgKiB1cGRhdGVzIGFyZSBkaXNhYmxlZC5cblx0ICpcblx0ICogQHNlZSAjc3RvcCgpXG5cdCAqIEBzZWUgI2F1dG9VcGRhdGVcblx0ICovXG5cdHB1YmxpYyB1cGRhdGUodGltZTpudW1iZXIgLyppbnQqLylcblx0e1xuXHRcdHZhciBkdDpudW1iZXIgPSAodGltZSAtIHRoaXMuX3RpbWUpKnRoaXMucGxheWJhY2tTcGVlZDtcblxuXHRcdHRoaXMuX3BVcGRhdGVEZWx0YVRpbWUoZHQpO1xuXG5cdFx0dGhpcy5fdGltZSA9IHRpbWU7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXQobmFtZTpzdHJpbmcsIG9mZnNldDpudW1iZXIgPSAwKVxuXHR7XG5cdFx0dGhpcy5nZXRBbmltYXRpb25TdGF0ZSh0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbihuYW1lKSkub2Zmc2V0KG9mZnNldCArIHRoaXMuX3BBYnNvbHV0ZVRpbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgYnkgdGhlIG1lc2ggb2JqZWN0IHRvIHdoaWNoIHRoZSBhbmltYXRvciBpcyBhcHBsaWVkLCByZWdpc3RlcnMgdGhlIG93bmVyIGZvciBpbnRlcm5hbCB1c2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgYWRkT3duZXIobWVzaDpNZXNoKVxuXHR7XG5cdFx0dGhpcy5fcE93bmVycy5wdXNoKG1lc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgYnkgdGhlIG1lc2ggb2JqZWN0IGZyb20gd2hpY2ggdGhlIGFuaW1hdG9yIGlzIHJlbW92ZWQsIHVucmVnaXN0ZXJzIHRoZSBvd25lciBmb3IgaW50ZXJuYWwgdXNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIHJlbW92ZU93bmVyKG1lc2g6TWVzaClcblx0e1xuXHRcdHRoaXMuX3BPd25lcnMuc3BsaWNlKHRoaXMuX3BPd25lcnMuaW5kZXhPZihtZXNoKSwgMSk7XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgYWJzdHJhY3QgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSB0aW1lIGRlbHRhIHByb3BlcnR5IG9mIHRoZSBhbmltYXRvcidzIGNvbnRlbnRzIHJlcXVpcmVzIHVwZGF0aW5nLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIF9wVXBkYXRlRGVsdGFUaW1lKGR0Om51bWJlcilcblx0e1xuXHRcdHRoaXMuX3BBYnNvbHV0ZVRpbWUgKz0gZHQ7XG5cblx0XHR0aGlzLl9wQWN0aXZlU3RhdGUudXBkYXRlKHRoaXMuX3BBYnNvbHV0ZVRpbWUpO1xuXG5cdFx0aWYgKHRoaXMudXBkYXRlUG9zaXRpb24pXG5cdFx0XHR0aGlzLmFwcGx5UG9zaXRpb25EZWx0YSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVudGVyIGZyYW1lIGV2ZW50IGhhbmRsZXIgZm9yIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgYW5pbWF0b3IuXG5cdCAqL1xuXHRwcml2YXRlIG9uRW50ZXJGcmFtZShldmVudDpFdmVudCA9IG51bGwpXG5cdHtcblx0XHR0aGlzLnVwZGF0ZShnZXRUaW1lcigpKTtcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlQb3NpdGlvbkRlbHRhKClcblx0e1xuXHRcdHZhciBkZWx0YTpWZWN0b3IzRCA9IHRoaXMuX3BBY3RpdmVTdGF0ZS5wb3NpdGlvbkRlbHRhO1xuXHRcdHZhciBkaXN0Om51bWJlciA9IGRlbHRhLmxlbmd0aDtcblx0XHR2YXIgbGVuOm51bWJlciAvKnVpbnQqLztcblx0XHRpZiAoZGlzdCA+IDApIHtcblx0XHRcdGxlbiA9IHRoaXMuX3BPd25lcnMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgLyp1aW50Ki8gPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHRcdHRoaXMuX3BPd25lcnNbaV0udHJhbnNsYXRlTG9jYWwoZGVsdGEsIGRpc3QpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiAgZm9yIGludGVybmFsIHVzZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBkaXNwYXRjaEN5Y2xlRXZlbnQoKVxuXHR7XG5cdFx0aWYgKHRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LkNZQ0xFX0NPTVBMRVRFKSkge1xuXHRcdFx0aWYgKHRoaXMuX2N5Y2xlRXZlbnQgPT0gbnVsbClcblx0XHRcdFx0dGhpcy5fY3ljbGVFdmVudCA9IG5ldyBBbmltYXRvckV2ZW50KEFuaW1hdG9yRXZlbnQuQ1lDTEVfQ09NUExFVEUsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fY3ljbGVFdmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY2xvbmUoKTpBbmltYXRvckJhc2Vcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgdGVzdEdQVUNvbXBhdGliaWxpdHkoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFzc2V0VHlwZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIEFzc2V0VHlwZS5BTklNQVRPUjtcblx0fVxuXG5cblx0cHVibGljIGdldFJlbmRlcmFibGVTdWJHZW9tZXRyeShyZW5kZXJhYmxlOlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUsIHNvdXJjZVN1Ykdlb21ldHJ5OlRyaWFuZ2xlU3ViR2VvbWV0cnkpOlRyaWFuZ2xlU3ViR2VvbWV0cnlcblx0e1xuXHRcdC8vbm90aGluZyB0byBkbyBoZXJlXG5cdFx0cmV0dXJuIHNvdXJjZVN1Ykdlb21ldHJ5O1xuXHR9XG59XG5cbmV4cG9ydCA9IEFuaW1hdG9yQmFzZTsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvYW5pbWF0b3JiYXNlLnRzIl0sIm5hbWVzIjpbIkFuaW1hdG9yQmFzZSIsIkFuaW1hdG9yQmFzZS5jb25zdHJ1Y3RvciIsIkFuaW1hdG9yQmFzZS5nZXRBbmltYXRpb25TdGF0ZSIsIkFuaW1hdG9yQmFzZS5nZXRBbmltYXRpb25TdGF0ZUJ5TmFtZSIsIkFuaW1hdG9yQmFzZS5hYnNvbHV0ZVRpbWUiLCJBbmltYXRvckJhc2UuYW5pbWF0aW9uU2V0IiwiQW5pbWF0b3JCYXNlLmFjdGl2ZVN0YXRlIiwiQW5pbWF0b3JCYXNlLmFjdGl2ZUFuaW1hdGlvbiIsIkFuaW1hdG9yQmFzZS5hY3RpdmVBbmltYXRpb25OYW1lIiwiQW5pbWF0b3JCYXNlLmF1dG9VcGRhdGUiLCJBbmltYXRvckJhc2UudGltZSIsIkFuaW1hdG9yQmFzZS5waGFzZSIsIkFuaW1hdG9yQmFzZS5wbGF5YmFja1NwZWVkIiwiQW5pbWF0b3JCYXNlLnNldFJlbmRlclN0YXRlIiwiQW5pbWF0b3JCYXNlLnN0YXJ0IiwiQW5pbWF0b3JCYXNlLnN0b3AiLCJBbmltYXRvckJhc2UudXBkYXRlIiwiQW5pbWF0b3JCYXNlLnJlc2V0IiwiQW5pbWF0b3JCYXNlLmFkZE93bmVyIiwiQW5pbWF0b3JCYXNlLnJlbW92ZU93bmVyIiwiQW5pbWF0b3JCYXNlLl9wVXBkYXRlRGVsdGFUaW1lIiwiQW5pbWF0b3JCYXNlLm9uRW50ZXJGcmFtZSIsIkFuaW1hdG9yQmFzZS5hcHBseVBvc2l0aW9uRGVsdGEiLCJBbmltYXRvckJhc2UuZGlzcGF0Y2hDeWNsZUV2ZW50IiwiQW5pbWF0b3JCYXNlLmNsb25lIiwiQW5pbWF0b3JCYXNlLmRpc3Bvc2UiLCJBbmltYXRvckJhc2UudGVzdEdQVUNvbXBhdGliaWxpdHkiLCJBbmltYXRvckJhc2UuYXNzZXRUeXBlIiwiQW5pbWF0b3JCYXNlLmdldFJlbmRlcmFibGVTdWJHZW9tZXRyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FB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QUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFFRHZCOztPQUVHQTtJQUNJQSw0QkFBS0EsR0FBWkE7UUFFQ3dCLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRUR4Qjs7T0FFR0E7SUFDSUEsOEJBQU9BLEdBQWRBO0lBRUF5QixDQUFDQTtJQUVEekI7O09BRUdBO0lBQ0lBLDJDQUFvQkEsR0FBM0JBLFVBQTRCQSxZQUE2QkE7UUFFeEQwQixNQUFNQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBO0lBQ2pDQSxDQUFDQTtJQUtEMUIsc0JBQVdBLG1DQUFTQTtRQUhwQkE7O1dBRUdBO2FBQ0hBO1lBRUMyQixNQUFNQSxDQUFDQSxTQUFTQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7OztPQUFBM0I7SUFHTUEsK0NBQXdCQSxHQUEvQkEsVUFBZ0NBLFVBQW9DQSxFQUFFQSxpQkFBcUNBO1FBRTFHNEIsQUFDQUEsb0JBRG9CQTtRQUNwQkEsTUFBTUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtJQUMxQkEsQ0FBQ0E7SUFDRjVCLG1CQUFDQTtBQUFEQSxDQXpWQSxBQXlWQ0EsRUF6VjBCLGNBQWMsRUF5VnhDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImFuaW1hdG9ycy9BbmltYXRvckJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQXNzZXRUeXBlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9saWJyYXJ5L0Fzc2V0VHlwZVwiKTtcbmltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbmltcG9ydCBnZXRUaW1lclx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9nZXRUaW1lclwiKTtcblxuaW1wb3J0IElBbmltYXRpb25TZXRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9hbmltYXRvcnMvSUFuaW1hdGlvblNldFwiKTtcbmltcG9ydCBJQW5pbWF0b3JcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2FuaW1hdG9ycy9JQW5pbWF0b3JcIik7XG5pbXBvcnQgQW5pbWF0aW9uTm9kZUJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYW5pbWF0b3JzL25vZGVzL0FuaW1hdGlvbk5vZGVCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL01lc2hcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IElBbmltYXRpb25TdGF0ZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9zdGF0ZXMvSUFuaW1hdGlvblN0YXRlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlXHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9UcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlXCIpO1xuaW1wb3J0IEFuaW1hdG9yRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9ldmVudHMvQW5pbWF0b3JFdmVudFwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5cbi8qKlxuICogRGlzcGF0Y2hlZCB3aGVuIHBsYXliYWNrIG9mIGFuIGFuaW1hdGlvbiBpbnNpZGUgdGhlIGFuaW1hdG9yIG9iamVjdCBzdGFydHMuXG4gKlxuICogQGV2ZW50VHlwZSBhd2F5M2QuZXZlbnRzLkFuaW1hdG9yRXZlbnRcbiAqL1xuLy9bRXZlbnQobmFtZT1cInN0YXJ0XCIsIHR5cGU9XCJhd2F5M2QuZXZlbnRzLkFuaW1hdG9yRXZlbnRcIildXG5cbi8qKlxuICogRGlzcGF0Y2hlZCB3aGVuIHBsYXliYWNrIG9mIGFuIGFuaW1hdGlvbiBpbnNpZGUgdGhlIGFuaW1hdG9yIG9iamVjdCBzdG9wcy5cbiAqXG4gKiBAZXZlbnRUeXBlIGF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFxuICovXG4vL1tFdmVudChuYW1lPVwic3RvcFwiLCB0eXBlPVwiYXdheTNkLmV2ZW50cy5BbmltYXRvckV2ZW50XCIpXVxuXG4vKipcbiAqIERpc3BhdGNoZWQgd2hlbiBwbGF5YmFjayBvZiBhbiBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGFuIGFuaW1hdGlvbi5cbiAqXG4gKiBAZXZlbnRUeXBlIGF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFxuICovXG4vL1tFdmVudChuYW1lPVwiY3ljbGVfY29tcGxldGVcIiwgdHlwZT1cImF3YXkzZC5ldmVudHMuQW5pbWF0b3JFdmVudFwiKV1cblxuLyoqXG4gKiBQcm92aWRlcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbmltYXRvciBjbGFzc2VzIHRoYXQgY29udHJvbCBhbmltYXRpb24gb3V0cHV0IGZyb20gYSBkYXRhIHNldCBzdWJ0eXBlIG9mIDxjb2RlPkFuaW1hdGlvblNldEJhc2U8L2NvZGU+LlxuICpcbiAqIEBzZWUgYXdheS5hbmltYXRvcnMuQW5pbWF0aW9uU2V0QmFzZVxuICovXG5jbGFzcyBBbmltYXRvckJhc2UgZXh0ZW5kcyBOYW1lZEFzc2V0QmFzZSBpbXBsZW1lbnRzIElBbmltYXRvclxue1xuXHRwcml2YXRlIF9icm9hZGNhc3RlcjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgX2lzUGxheWluZzpib29sZWFuO1xuXHRwcml2YXRlIF9hdXRvVXBkYXRlOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9zdGFydEV2ZW50OkFuaW1hdG9yRXZlbnQ7XG5cdHByaXZhdGUgX3N0b3BFdmVudDpBbmltYXRvckV2ZW50O1xuXHRwcml2YXRlIF9jeWNsZUV2ZW50OkFuaW1hdG9yRXZlbnQ7XG5cdHByaXZhdGUgX3RpbWU6bnVtYmVyIC8qaW50Ki8gPSAwO1xuXHRwcml2YXRlIF9wbGF5YmFja1NwZWVkOm51bWJlciA9IDE7XG5cblx0cHVibGljIF9wQW5pbWF0aW9uU2V0OklBbmltYXRpb25TZXQ7XG5cdHB1YmxpYyBfcE93bmVyczpBcnJheTxNZXNoPiA9IG5ldyBBcnJheTxNZXNoPigpO1xuXHRwdWJsaWMgX3BBY3RpdmVOb2RlOkFuaW1hdGlvbk5vZGVCYXNlO1xuXHRwdWJsaWMgX3BBY3RpdmVTdGF0ZTpJQW5pbWF0aW9uU3RhdGU7XG5cdHB1YmxpYyBfcEFjdGl2ZUFuaW1hdGlvbk5hbWU6c3RyaW5nO1xuXHRwdWJsaWMgX3BBYnNvbHV0ZVRpbWU6bnVtYmVyID0gMDtcblxuXHRwcml2YXRlIF9hbmltYXRpb25TdGF0ZXM6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHRyYW5zbGF0aW9uIG9mIHRoZSBhbmltYXRlZCBtZXNoIGZyb20gZGF0YSByZXR1cm5lZCBwZXIgZnJhbWUgdmlhIHRoZSBwb3NpdGlvbkRlbHRhIHByb3BlcnR5IG9mIHRoZSBhY3RpdmUgYW5pbWF0aW9uIG5vZGUuIERlZmF1bHRzIHRvIHRydWUuXG5cdCAqXG5cdCAqIEBzZWUgYXdheS5hbmltYXRvcnMuSUFuaW1hdGlvblN0YXRlI3Bvc2l0aW9uRGVsdGFcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVQb3NpdGlvbjpib29sZWFuID0gdHJ1ZTtcblxuXHRwdWJsaWMgZ2V0QW5pbWF0aW9uU3RhdGUobm9kZTpBbmltYXRpb25Ob2RlQmFzZSk6SUFuaW1hdGlvblN0YXRlXG5cdHtcblx0XHR2YXIgY2xhc3NOYW1lOmFueSA9IG5vZGUuc3RhdGVDbGFzcztcblx0XHR2YXIgdUlEOm51bWJlciA9IG5vZGUuaWQ7XG5cblx0XHRpZiAodGhpcy5fYW5pbWF0aW9uU3RhdGVzW3VJRF0gPT0gbnVsbClcblx0XHRcdHRoaXMuX2FuaW1hdGlvblN0YXRlc1t1SURdID0gbmV3IGNsYXNzTmFtZSh0aGlzLCBub2RlKTtcblxuXHRcdHJldHVybiB0aGlzLl9hbmltYXRpb25TdGF0ZXNbdUlEXTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBbmltYXRpb25TdGF0ZUJ5TmFtZShuYW1lOnN0cmluZyk6SUFuaW1hdGlvblN0YXRlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBbmltYXRpb25TdGF0ZSh0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbihuYW1lKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaW50ZXJuYWwgYWJzb2x1dGUgdGltZSBvZiB0aGUgYW5pbWF0b3IsIGNhbGN1bGF0ZWQgYnkgdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIHBsYXliYWNrIHNwZWVkLlxuXHQgKlxuXHQgKiBAc2VlICN0aW1lXG5cdCAqIEBzZWUgI3BsYXliYWNrU3BlZWRcblx0ICovXG5cdHB1YmxpYyBnZXQgYWJzb2x1dGVUaW1lKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcEFic29sdXRlVGltZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhbmltYXRpb24gZGF0YSBzZXQgaW4gdXNlIGJ5IHRoZSBhbmltYXRvci5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW5pbWF0aW9uU2V0KCk6SUFuaW1hdGlvblNldFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BBbmltYXRpb25TZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgYW5pbWF0aW9uIHN0YXRlLlxuXHQgKi9cblx0cHVibGljIGdldCBhY3RpdmVTdGF0ZSgpOklBbmltYXRpb25TdGF0ZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BBY3RpdmVTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSBhbmltYXRpb24gbm9kZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYWN0aXZlQW5pbWF0aW9uKCk6QW5pbWF0aW9uTm9kZUJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbih0aGlzLl9wQWN0aXZlQW5pbWF0aW9uTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgYW5pbWF0aW9uIG5vZGUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFjdGl2ZUFuaW1hdGlvbk5hbWUoKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wQWN0aXZlQW5pbWF0aW9uTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFuaW1hdG9ycyBpbnRlcm5hbCB1cGRhdGUgbWVjaGFuaXNtcyBhcmUgYWN0aXZlLiBVc2VkIGluIGNhc2VzXG5cdCAqIHdoZXJlIG1hbnVhbCB1cGRhdGVzIGFyZSByZXF1aXJlZCBlaXRoZXIgdmlhIHRoZSA8Y29kZT50aW1lPC9jb2RlPiBwcm9wZXJ0eSBvciA8Y29kZT51cGRhdGUoKTwvY29kZT4gbWV0aG9kLlxuXHQgKiBEZWZhdWx0cyB0byB0cnVlLlxuXHQgKlxuXHQgKiBAc2VlICN0aW1lXG5cdCAqIEBzZWUgI3VwZGF0ZSgpXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGF1dG9VcGRhdGUoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYXV0b1VwZGF0ZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYXV0b1VwZGF0ZSh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2F1dG9VcGRhdGUgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hdXRvVXBkYXRlID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy5fYXV0b1VwZGF0ZSlcblx0XHRcdHRoaXMuc3RhcnQoKTsgZWxzZVxuXHRcdFx0dGhpcy5zdG9wKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbmQgc2V0cyB0aGUgaW50ZXJuYWwgdGltZSBjbG9jayBvZiB0aGUgYW5pbWF0b3IuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHRpbWUoKTpudW1iZXIgLyppbnQqL1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RpbWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRpbWUodmFsdWU6bnVtYmVyIC8qaW50Ki8pXG5cdHtcblx0XHRpZiAodGhpcy5fdGltZSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMudXBkYXRlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhbmltYXRpb24gcGhhc2Ugb2YgdGhlIGN1cnJlbnQgYWN0aXZlIHN0YXRlJ3MgYW5pbWF0aW9uIGNsaXAocykuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgcGhhc2UgdmFsdWUgdG8gdXNlLiAwIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiBhbiBhbmltYXRpb24gY2xpcCwgMSByZXByZXNlbnRzIHRoZSBlbmQuXG5cdCAqL1xuXHRwdWJsaWMgcGhhc2UodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fcEFjdGl2ZVN0YXRlLnBoYXNlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IDxjb2RlPkFuaW1hdG9yQmFzZTwvY29kZT4gb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5pbWF0aW9uU2V0IFRoZSBhbmltYXRpb24gZGF0YSBzZXQgdG8gYmUgdXNlZCBieSB0aGUgYW5pbWF0b3Igb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoYW5pbWF0aW9uU2V0OklBbmltYXRpb25TZXQpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcEFuaW1hdGlvblNldCA9IGFuaW1hdGlvblNldDtcblxuXHRcdHRoaXMuX2Jyb2FkY2FzdGVyID0gbmV3IFJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLm9uRW50ZXJGcmFtZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBieSB3aGljaCBwYXNzZWQgdGltZSBzaG91bGQgYmUgc2NhbGVkLiBVc2VkIHRvIHNsb3cgZG93biBvciBzcGVlZCB1cCBhbmltYXRpb25zLiBEZWZhdWx0cyB0byAxLlxuXHQgKi9cblx0cHVibGljIGdldCBwbGF5YmFja1NwZWVkKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcGxheWJhY2tTcGVlZDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgcGxheWJhY2tTcGVlZCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wbGF5YmFja1NwZWVkID0gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVuZGVyU3RhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2ZXJ0ZXhDb25zdGFudE9mZnNldDpudW1iZXIgLyppbnQqLywgdmVydGV4U3RyZWFtT2Zmc2V0Om51bWJlciAvKmludCovKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXN1bWVzIHRoZSBhdXRvbWF0aWMgcGxheWJhY2sgY2xvY2sgY29udHJvbGluZyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBhbmltYXRvci5cblx0ICovXG5cdHB1YmxpYyBzdGFydCgpXG5cdHtcblx0XHRpZiAodGhpcy5faXNQbGF5aW5nIHx8ICF0aGlzLl9hdXRvVXBkYXRlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdGltZSA9IHRoaXMuX3BBYnNvbHV0ZVRpbWUgPSBnZXRUaW1lcigpO1xuXG5cdFx0dGhpcy5faXNQbGF5aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2Jyb2FkY2FzdGVyLnN0YXJ0KCk7XG5cblx0XHRpZiAoIXRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LlNUQVJUKSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9zdGFydEV2ZW50ID09IG51bGwpXG5cdFx0XHR0aGlzLl9zdGFydEV2ZW50ID0gbmV3IEFuaW1hdG9yRXZlbnQoQW5pbWF0b3JFdmVudC5TVEFSVCwgdGhpcyk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fc3RhcnRFdmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUGF1c2VzIHRoZSBhdXRvbWF0aWMgcGxheWJhY2sgY2xvY2sgb2YgdGhlIGFuaW1hdG9yLCBpbiBjYXNlIG1hbnVhbCB1cGRhdGVzIGFyZSByZXF1aXJlZCB2aWEgdGhlXG5cdCAqIDxjb2RlPnRpbWU8L2NvZGU+IHByb3BlcnR5IG9yIDxjb2RlPnVwZGF0ZSgpPC9jb2RlPiBtZXRob2QuXG5cdCAqXG5cdCAqIEBzZWUgI3RpbWVcblx0ICogQHNlZSAjdXBkYXRlKClcblx0ICovXG5cdHB1YmxpYyBzdG9wKClcblx0e1xuXHRcdGlmICghdGhpcy5faXNQbGF5aW5nKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faXNQbGF5aW5nID0gZmFsc2U7XG5cblx0XHR0aGlzLl9icm9hZGNhc3Rlci5zdG9wKCk7XG5cblx0XHRpZiAoIXRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LlNUT1ApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX3N0b3BFdmVudCA9PSBudWxsKVxuXHRcdFx0dGhpcy5fc3RvcEV2ZW50ID0gbmV3IEFuaW1hdG9yRXZlbnQoQW5pbWF0b3JFdmVudC5TVE9QLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudCh0aGlzLl9zdG9wRXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgd2F5IHRvIG1hbnVhbGx5IHVwZGF0ZSB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBhbmltYXRvciB3aGVuIGF1dG9tYXRpY1xuXHQgKiB1cGRhdGVzIGFyZSBkaXNhYmxlZC5cblx0ICpcblx0ICogQHNlZSAjc3RvcCgpXG5cdCAqIEBzZWUgI2F1dG9VcGRhdGVcblx0ICovXG5cdHB1YmxpYyB1cGRhdGUodGltZTpudW1iZXIgLyppbnQqLylcblx0e1xuXHRcdHZhciBkdDpudW1iZXIgPSAodGltZSAtIHRoaXMuX3RpbWUpKnRoaXMucGxheWJhY2tTcGVlZDtcblxuXHRcdHRoaXMuX3BVcGRhdGVEZWx0YVRpbWUoZHQpO1xuXG5cdFx0dGhpcy5fdGltZSA9IHRpbWU7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXQobmFtZTpzdHJpbmcsIG9mZnNldDpudW1iZXIgPSAwKVxuXHR7XG5cdFx0dGhpcy5nZXRBbmltYXRpb25TdGF0ZSh0aGlzLl9wQW5pbWF0aW9uU2V0LmdldEFuaW1hdGlvbihuYW1lKSkub2Zmc2V0KG9mZnNldCArIHRoaXMuX3BBYnNvbHV0ZVRpbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgYnkgdGhlIG1lc2ggb2JqZWN0IHRvIHdoaWNoIHRoZSBhbmltYXRvciBpcyBhcHBsaWVkLCByZWdpc3RlcnMgdGhlIG93bmVyIGZvciBpbnRlcm5hbCB1c2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgYWRkT3duZXIobWVzaDpNZXNoKVxuXHR7XG5cdFx0dGhpcy5fcE93bmVycy5wdXNoKG1lc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgYnkgdGhlIG1lc2ggb2JqZWN0IGZyb20gd2hpY2ggdGhlIGFuaW1hdG9yIGlzIHJlbW92ZWQsIHVucmVnaXN0ZXJzIHRoZSBvd25lciBmb3IgaW50ZXJuYWwgdXNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIHJlbW92ZU93bmVyKG1lc2g6TWVzaClcblx0e1xuXHRcdHRoaXMuX3BPd25lcnMuc3BsaWNlKHRoaXMuX3BPd25lcnMuaW5kZXhPZihtZXNoKSwgMSk7XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgYWJzdHJhY3QgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSB0aW1lIGRlbHRhIHByb3BlcnR5IG9mIHRoZSBhbmltYXRvcidzIGNvbnRlbnRzIHJlcXVpcmVzIHVwZGF0aW5nLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIF9wVXBkYXRlRGVsdGFUaW1lKGR0Om51bWJlcilcblx0e1xuXHRcdHRoaXMuX3BBYnNvbHV0ZVRpbWUgKz0gZHQ7XG5cblx0XHR0aGlzLl9wQWN0aXZlU3RhdGUudXBkYXRlKHRoaXMuX3BBYnNvbHV0ZVRpbWUpO1xuXG5cdFx0aWYgKHRoaXMudXBkYXRlUG9zaXRpb24pXG5cdFx0XHR0aGlzLmFwcGx5UG9zaXRpb25EZWx0YSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVudGVyIGZyYW1lIGV2ZW50IGhhbmRsZXIgZm9yIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgYW5pbWF0b3IuXG5cdCAqL1xuXHRwcml2YXRlIG9uRW50ZXJGcmFtZShldmVudDpFdmVudCA9IG51bGwpXG5cdHtcblx0XHR0aGlzLnVwZGF0ZShnZXRUaW1lcigpKTtcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlQb3NpdGlvbkRlbHRhKClcblx0e1xuXHRcdHZhciBkZWx0YTpWZWN0b3IzRCA9IHRoaXMuX3BBY3RpdmVTdGF0ZS5wb3NpdGlvbkRlbHRhO1xuXHRcdHZhciBkaXN0Om51bWJlciA9IGRlbHRhLmxlbmd0aDtcblx0XHR2YXIgbGVuOm51bWJlciAvKnVpbnQqLztcblx0XHRpZiAoZGlzdCA+IDApIHtcblx0XHRcdGxlbiA9IHRoaXMuX3BPd25lcnMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgLyp1aW50Ki8gPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHRcdHRoaXMuX3BPd25lcnNbaV0udHJhbnNsYXRlTG9jYWwoZGVsdGEsIGRpc3QpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiAgZm9yIGludGVybmFsIHVzZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBkaXNwYXRjaEN5Y2xlRXZlbnQoKVxuXHR7XG5cdFx0aWYgKHRoaXMuaGFzRXZlbnRMaXN0ZW5lcihBbmltYXRvckV2ZW50LkNZQ0xFX0NPTVBMRVRFKSkge1xuXHRcdFx0aWYgKHRoaXMuX2N5Y2xlRXZlbnQgPT0gbnVsbClcblx0XHRcdFx0dGhpcy5fY3ljbGVFdmVudCA9IG5ldyBBbmltYXRvckV2ZW50KEFuaW1hdG9yRXZlbnQuQ1lDTEVfQ09NUExFVEUsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fY3ljbGVFdmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY2xvbmUoKTpBbmltYXRvckJhc2Vcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgdGVzdEdQVUNvbXBhdGliaWxpdHkoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFzc2V0VHlwZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIEFzc2V0VHlwZS5BTklNQVRPUjtcblx0fVxuXG5cblx0cHVibGljIGdldFJlbmRlcmFibGVTdWJHZW9tZXRyeShyZW5kZXJhYmxlOlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUsIHNvdXJjZVN1Ykdlb21ldHJ5OlRyaWFuZ2xlU3ViR2VvbWV0cnkpOlRyaWFuZ2xlU3ViR2VvbWV0cnlcblx0e1xuXHRcdC8vbm90aGluZyB0byBkbyBoZXJlXG5cdFx0cmV0dXJuIHNvdXJjZVN1Ykdlb21ldHJ5O1xuXHR9XG59XG5cbmV4cG9ydCA9IEFuaW1hdG9yQmFzZTsiXX0= \ No newline at end of file diff --git a/lib/animators/AnimatorBase.ts b/lib/animators/AnimatorBase.ts index 45cc5ad3..abcaf98d 100644 --- a/lib/animators/AnimatorBase.ts +++ b/lib/animators/AnimatorBase.ts @@ -12,10 +12,10 @@ import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeome import Camera = require("awayjs-display/lib/entities/Camera"); import Mesh = require("awayjs-display/lib/entities/Mesh"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import IAnimationState = require("awayjs-stagegl/lib/animators/states/IAnimationState"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/pool/TriangleSubMeshRenderable"); import AnimatorEvent = require("awayjs-stagegl/lib/events/AnimatorEvent"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); diff --git a/lib/base/ContextGLBase.js b/lib/base/ContextGLBase.js new file mode 100755 index 00000000..8070767e --- /dev/null +++ b/lib/base/ContextGLBase.js @@ -0,0 +1,343 @@ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); +var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); +var TextureDataPool = require("awayjs-stagegl/lib/pool/TextureDataPool"); +var ProgramDataPool = require("awayjs-stagegl/lib/pool/ProgramDataPool"); +var MaterialDataPool = require("awayjs-stagegl/lib/pool/MaterialDataPool"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +/** + * Stage provides a proxy class to handle the creation and attachment of the Context + * (and in turn the back buffer) it uses. Stage should never be created directly, + * but requested through StageManager. + * + * @see away.managers.StageManager + * + */ +var ContextGLBase = (function () { + function ContextGLBase(stageIndex) { + this._programData = new Array(); + this._numUsedStreams = 0; + this._numUsedTextures = 0; + //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame + this._stageIndex = -1; + this._antiAlias = 0; + this._renderTarget = null; + this._renderSurfaceSelector = 0; + this._stageIndex = stageIndex; + this._texturePool = new TextureDataPool(this); + this._materialDataPool = new MaterialDataPool(this); + this._programDataPool = new ProgramDataPool(this); + } + Object.defineProperty(ContextGLBase.prototype, "container", { + get: function () { + return this._pContainer; + }, + enumerable: true, + configurable: true + }); + ContextGLBase.prototype.setRenderTarget = function (target, enableDepthAndStencil, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + if (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil) + return; + this._renderTarget = target; + this._renderSurfaceSelector = surfaceSelector; + this._enableDepthAndStencil = enableDepthAndStencil; + if (target instanceof RenderTexture) { + this.setRenderToTexture(this.getRenderTexture(target), enableDepthAndStencil, this._antiAlias, surfaceSelector); + } + else { + this.setRenderToBackBuffer(); + this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + } + }; + ContextGLBase.prototype.getRenderTexture = function (textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) + textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); + return textureData.texture; + }; + ContextGLBase.prototype.getProgram = function (materialPassData) { + //check key doesn't need re-concatenating + if (!materialPassData.key.length) { + materialPassData.key = materialPassData.animationVertexCode + materialPassData.vertexCode + "---" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode; + } + else { + return materialPassData.programData; + } + var programData = this._programDataPool.getItem(materialPassData.key); + //check program data hasn't changed, keep count of program usages + if (materialPassData.programData != programData) { + if (materialPassData.programData) + materialPassData.programData.dispose(); + materialPassData.programData = programData; + programData.usages++; + } + return programData; + }; + /** + * + * @param material + */ + ContextGLBase.prototype.getMaterial = function (material, profile) { + var materialData = this._materialDataPool.getItem(material); + if (materialData.invalidAnimation) { + materialData.invalidAnimation = false; + var materialDataPasses = materialData.getMaterialPasses(profile); + var enabledGPUAnimation = this.getEnabledGPUAnimation(material, materialDataPasses); + var renderOrderId = 0; + var mult = 1; + var materialPassData; + var len = materialDataPasses.length; + for (var i = 0; i < len; i++) { + materialPassData = materialDataPasses[i]; + if (materialPassData.usesAnimation != enabledGPUAnimation) { + materialPassData.usesAnimation = enabledGPUAnimation; + materialPassData.key == ""; + } + if (materialPassData.key == "") + this.calcAnimationCode(material, materialPassData); + renderOrderId += this.getProgram(materialPassData).id * mult; + mult *= 1000; + } + materialData.renderOrderId = renderOrderId; + } + return materialData; + }; + /** + * Assigns an attribute stream + * + * @param index The attribute stream index for the vertex shader + * @param buffer + * @param offset + * @param stride + * @param format + */ + ContextGLBase.prototype.activateBuffer = function (index, buffer, offset, format) { + if (!buffer.contexts[this._stageIndex]) + buffer.contexts[this._stageIndex] = this; + if (!buffer.buffers[this._stageIndex]) { + buffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length / buffer.dataPerVertex, buffer.dataPerVertex); + buffer.invalid[this._stageIndex] = true; + } + if (buffer.invalid[this._stageIndex]) { + buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length / buffer.dataPerVertex); + buffer.invalid[this._stageIndex] = false; + } + this.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format); + }; + ContextGLBase.prototype.disposeVertexData = function (buffer) { + buffer.buffers[this._stageIndex].dispose(); + buffer.buffers[this._stageIndex] = null; + }; + ContextGLBase.prototype.activateRenderTexture = function (index, textureProxy) { + this.setTextureAt(index, this.getRenderTexture(textureProxy)); + }; + ContextGLBase.prototype.activateMaterialPass = function (materialPassData, stage, camera) { + var shaderObject = materialPassData.shaderObject; + for (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++) + this.setVertexBufferAt(i, null); + for (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++) + this.setTextureAt(i, null); + if (materialPassData.usesAnimation) + materialPassData.material.animationSet.activate(shaderObject, stage); + //activate shader object + shaderObject.iActivate(stage, camera); + //check program data is uploaded + var programData = this.getProgram(materialPassData); + if (!programData.program) { + programData.program = this.createProgram(); + var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + materialPassData.animationVertexCode + materialPassData.vertexCode + "endpart"))['vertex'].data; + var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + "endpart"))['fragment'].data; + programData.program.upload(vertexByteCode, fragmentByteCode); + } + //set program data + this.setProgram(programData.program); + }; + ContextGLBase.prototype.deactivateMaterialPass = function (materialPassData, stage) { + var shaderObject = materialPassData.shaderObject; + if (materialPassData.usesAnimation) + materialPassData.material.animationSet.deactivate(shaderObject, stage); + materialPassData.shaderObject.iDeactivate(stage); + this._numUsedStreams = shaderObject.numUsedStreams; + this._numUsedTextures = shaderObject.numUsedTextures; + }; + ContextGLBase.prototype.activateTexture = function (index, textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) { + textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); + textureData.invalid = true; + } + if (textureData.invalid) { + textureData.invalid = false; + if (textureProxy.generateMipmaps) { + var mipmapData = textureProxy._iGetMipmapData(); + var len = mipmapData.length; + for (var i = 0; i < len; i++) + textureData.texture.uploadFromData(mipmapData[i], i); + } + else { + textureData.texture.uploadFromData(textureProxy._iGetTextureData(), 0); + } + } + this.setTextureAt(index, textureData.texture); + }; + ContextGLBase.prototype.activateCubeTexture = function (index, textureProxy) { + var textureData = this._texturePool.getItem(textureProxy); + if (!textureData.texture) { + textureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false); + textureData.invalid = true; + } + if (textureData.invalid) { + textureData.invalid = false; + for (var i = 0; i < 6; ++i) { + if (textureProxy.generateMipmaps) { + var mipmapData = textureProxy._iGetMipmapData(i); + var len = mipmapData.length; + for (var j = 0; j < len; j++) + textureData.texture.uploadFromData(mipmapData[j], i, j); + } + else { + textureData.texture.uploadFromData(textureProxy._iGetTextureData(i), i, 0); + } + } + } + this.setTextureAt(index, textureData.texture); + }; + /** + * Retrieves the VertexBuffer object that contains triangle indices. + * @param context The ContextWeb for which we request the buffer + * @return The VertexBuffer object that contains triangle indices. + */ + ContextGLBase.prototype.getIndexBuffer = function (buffer) { + if (!buffer.contexts[this._stageIndex]) + buffer.contexts[this._stageIndex] = this; + if (!buffer.buffers[this._stageIndex]) { + buffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length); + buffer.invalid[this._stageIndex] = true; + } + if (buffer.invalid[this._stageIndex]) { + buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length); + buffer.invalid[this._stageIndex] = false; + } + return buffer.buffers[this._stageIndex]; + }; + ContextGLBase.prototype.disposeIndexData = function (buffer) { + buffer.buffers[this._stageIndex].dispose(); + buffer.buffers[this._stageIndex] = null; + }; + ContextGLBase.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } + }; + ContextGLBase.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + this._width = width; + this._height = height; + }; + ContextGLBase.prototype.createIndexBuffer = function (numIndices) { + throw new AbstractMethodError(); + }; + ContextGLBase.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + throw new AbstractMethodError(); + }; + ContextGLBase.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + throw new AbstractMethodError(); + }; + ContextGLBase.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + throw new AbstractMethodError(); + }; + ContextGLBase.prototype.createProgram = function () { + throw new AbstractMethodError(); + }; + ContextGLBase.prototype.dispose = function () { + }; + ContextGLBase.prototype.present = function () { + }; + ContextGLBase.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + }; + ContextGLBase.prototype.setRenderToBackBuffer = function () { + }; + ContextGLBase.prototype.setScissorRectangle = function (rectangle) { + }; + ContextGLBase.prototype.setTextureAt = function (sampler, texture) { + }; + ContextGLBase.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } + }; + ContextGLBase.prototype.setProgram = function (program) { + }; + ContextGLBase.prototype.registerProgram = function (programData) { + var i = 0; + while (this._programData[i] != null) + i++; + this._programData[i] = programData; + programData.id = i; + }; + ContextGLBase.prototype.unRegisterProgram = function (programData) { + this._programData[programData.id] = null; + programData.id = -1; + }; + /** + * test if animation will be able to run on gpu BEFORE compiling materials + * test if the shader objects supports animating the animation set in the vertex shader + * if any object using this material fails to support accelerated animations for any of the shader objects, + * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations) + */ + ContextGLBase.prototype.getEnabledGPUAnimation = function (material, materialDataPasses) { + if (material.animationSet) { + material.animationSet.resetGPUCompatibility(); + var owners = material.iOwners; + var numOwners = owners.length; + var len = materialDataPasses.length; + for (var i = 0; i < len; i++) + for (var j = 0; j < numOwners; j++) + if (owners[j].animator) + owners[j].animator.testGPUCompatibility(materialDataPasses[i].shaderObject); + return !material.animationSet.usesCPU; + } + return false; + }; + ContextGLBase.prototype.calcAnimationCode = function (material, materialPassData) { + //reset key so that the program is re-calculated + materialPassData.key = ""; + materialPassData.animationVertexCode = ""; + materialPassData.animationFragmentCode = ""; + var shaderObject = materialPassData.shaderObject; + //check to see if GPU animation is used + if (materialPassData.usesAnimation) { + var animationSet = material.animationSet; + materialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject); + if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) + materialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject); + if (shaderObject.usesFragmentAnimation) + materialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget); + animationSet.doneAGALCode(shaderObject); + } + else { + // simply write attributes to targets, do not animate them + // projection will pick up on targets[0] to do the projection + var len = shaderObject.animatableAttributes.length; + for (var i = 0; i < len; ++i) + materialPassData.animationVertexCode += "mov " + shaderObject.animationTargetRegisters[i] + ", " + shaderObject.animatableAttributes[i] + "\n"; + if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) + materialPassData.animationVertexCode += "mov " + shaderObject.uvTarget + "," + shaderObject.uvSource + "\n"; + } + }; + return ContextGLBase; +})(); +module.exports = ContextGLBase; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbGJhc2UudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMQmFzZSIsIkNvbnRleHRHTEJhc2UuY29uc3RydWN0b3IiLCJDb250ZXh0R0xCYXNlLmNvbnRhaW5lciIsIkNvbnRleHRHTEJhc2Uuc2V0UmVuZGVyVGFyZ2V0IiwiQ29udGV4dEdMQmFzZS5nZXRSZW5kZXJUZXh0dXJlIiwiQ29udGV4dEdMQmFzZS5nZXRQcm9ncmFtIiwiQ29udGV4dEdMQmFzZS5nZXRNYXRlcmlhbCIsIkNvbnRleHRHTEJhc2UuYWN0aXZhdGVCdWZmZXIiLCJDb250ZXh0R0xCYXNlLmRpc3Bvc2VWZXJ0ZXhEYXRhIiwiQ29udGV4dEdMQmFzZS5hY3RpdmF0ZVJlbmRlclRleHR1cmUiLCJDb250ZXh0R0xCYXNlLmFjdGl2YXRlTWF0ZXJpYWxQYXNzIiwiQ29udGV4dEdMQmFzZS5kZWFjdGl2YXRlTWF0ZXJpYWxQYXNzIiwiQ29udGV4dEdMQmFzZS5hY3RpdmF0ZVRleHR1cmUiLCJDb250ZXh0R0xCYXNlLmFjdGl2YXRlQ3ViZVRleHR1cmUiLCJDb250ZXh0R0xCYXNlLmdldEluZGV4QnVmZmVyIiwiQ29udGV4dEdMQmFzZS5kaXNwb3NlSW5kZXhEYXRhIiwiQ29udGV4dEdMQmFzZS5jbGVhciIsIkNvbnRleHRHTEJhc2UuY29uZmlndXJlQmFja0J1ZmZlciIsIkNvbnRleHRHTEJhc2UuY3JlYXRlSW5kZXhCdWZmZXIiLCJDb250ZXh0R0xCYXNlLmNyZWF0ZVZlcnRleEJ1ZmZlciIsIkNvbnRleHRHTEJhc2UuY3JlYXRlVGV4dHVyZSIsIkNvbnRleHRHTEJhc2UuY3JlYXRlQ3ViZVRleHR1cmUiLCJDb250ZXh0R0xCYXNlLmNyZWF0ZVByb2dyYW0iLCJDb250ZXh0R0xCYXNlLmRpc3Bvc2UiLCJDb250ZXh0R0xCYXNlLnByZXNlbnQiLCJDb250ZXh0R0xCYXNlLnNldFJlbmRlclRvVGV4dHVyZSIsIkNvbnRleHRHTEJhc2Uuc2V0UmVuZGVyVG9CYWNrQnVmZmVyIiwiQ29udGV4dEdMQmFzZS5zZXRTY2lzc29yUmVjdGFuZ2xlIiwiQ29udGV4dEdMQmFzZS5zZXRUZXh0dXJlQXQiLCJDb250ZXh0R0xCYXNlLnNldFZlcnRleEJ1ZmZlckF0IiwiQ29udGV4dEdMQmFzZS5zZXRQcm9ncmFtIiwiQ29udGV4dEdMQmFzZS5yZWdpc3RlclByb2dyYW0iLCJDb250ZXh0R0xCYXNlLnVuUmVnaXN0ZXJQcm9ncmFtIiwiQ29udGV4dEdMQmFzZS5nZXRFbmFibGVkR1BVQW5pbWF0aW9uIiwiQ29udGV4dEdMQmFzZS5jYWxjQW5pbWF0aW9uQ29kZSJdLCJtYXBwaW5ncyI6IkFBR0EsSUFBTyxtQkFBbUIsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBRXJGLElBQU8sYUFBYSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFVNUUsSUFBTyxpQkFBaUIsV0FBYSxzREFBc0QsQ0FBQyxDQUFDO0FBTzdGLElBQU8sZUFBZSxXQUFjLHlDQUF5QyxDQUFDLENBQUM7QUFFL0UsSUFBTyxlQUFlLFdBQWMseUNBQXlDLENBQUMsQ0FBQztBQUcvRSxJQUFPLGdCQUFnQixXQUFjLDBDQUEwQyxDQUFDLENBQUM7QUFFakYsSUFBTyxrQkFBa0IsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3BGLElBQU8sc0JBQXNCLFdBQVksZ0RBQWdELENBQUMsQ0FBQztBQVUzRixBQVFBOzs7Ozs7O0dBREc7SUFDRyxhQUFhO0lBOEJsQkEsU0E5QktBLGFBQWFBLENBOEJOQSxVQUFpQkE7UUE1QnJCQyxpQkFBWUEsR0FBc0JBLElBQUlBLEtBQUtBLEVBQWVBLENBQUNBO1FBQzNEQSxvQkFBZUEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDM0JBLHFCQUFnQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFhcENBLDJHQUEyR0E7UUFFbkdBLGdCQUFXQSxHQUFVQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN4QkEsZUFBVUEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFFdEJBLGtCQUFhQSxHQUFvQkEsSUFBSUEs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Q0EsQ0FBQ0E7UUFFekNBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLEFBRUFBLDBEQUYwREE7WUFDMURBLDZEQUE2REE7Z0JBQ3pEQSxHQUFHQSxHQUFVQSxZQUFZQSxDQUFDQSxvQkFBb0JBLENBQUNBLE1BQU1BLENBQUNBO1lBQzFEQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxFQUFFQSxDQUFDQTtnQkFDbENBLGdCQUFnQkEsQ0FBQ0EsbUJBQW1CQSxJQUFJQSxNQUFNQSxHQUFHQSxZQUFZQSxDQUFDQSx3QkFBd0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLEdBQUdBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7WUFFaEpBLEVBQUVBLENBQUNBLENBQUNBLFlBQVlBLENBQUNBLGNBQWNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLGVBQWVBLENBQUNBO2dCQUNwRUEsZ0JBQWdCQSxDQUFDQSxtQkFBbUJBLElBQUlBLE1BQU1BLEdBQUdBLFlBQVlBLENBQUNBLFFBQVFBLEdBQUdBLEdBQUdBLEdBQUdBLFlBQVlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO1FBQzlHQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGbEMsb0JBQUNBO0FBQURBLENBamNBLEFBaWNDQSxJQUFBO0FBRUQsQUFBdUIsaUJBQWQsYUFBYSxDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dEdMQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IEN1YmVUZXh0dXJlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0N1YmVUZXh0dXJlQmFzZVwiKTtcbmltcG9ydCBSZW5kZXJUZXh0dXJlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvUmVuZGVyVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcbmltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcbmltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW1wb3J0IElNYXRlcmlhbE93bmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9JTWF0ZXJpYWxPd25lclwiKTtcbmltcG9ydCBJQ29udGV4dFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9kaXNwbGF5L0lDb250ZXh0XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEFHQUxNaW5pQXNzZW1ibGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FnbHNsL2Fzc2VtYmxlci9BR0FMTWluaUFzc2VtYmxlclwiKTtcbmltcG9ydCBBbmltYXRvckJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRvckJhc2VcIik7XG5pbXBvcnQgQW5pbWF0aW9uU2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRpb25TZXRCYXNlXCIpO1xuaW1wb3J0IEluZGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9JbmRleERhdGFcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhUG9vbFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sXCIpO1xuaW1wb3J0IFRleHR1cmVEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1RleHR1cmVEYXRhXCIpO1xuaW1wb3J0IFRleHR1cmVEYXRhUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvVGV4dHVyZURhdGFQb29sXCIpO1xuaW1wb3J0IFByb2dyYW1EYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1Byb2dyYW1EYXRhXCIpO1xuaW1wb3J0IFByb2dyYW1EYXRhUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUHJvZ3JhbURhdGFQb29sXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBNYXRlcmlhbERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxEYXRhXCIpO1xuaW1wb3J0IE1hdGVyaWFsRGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsRGF0YVBvb2xcIik7XG5pbXBvcnQgVmVydGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9WZXJ0ZXhEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTENsZWFyTWFza1x0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENsZWFyTWFza1wiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFRleHR1cmVGb3JtYXRcIik7XG5pbXBvcnQgSUN1YmVUZXh0dXJlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDdWJlVGV4dHVyZVwiKTtcbmltcG9ydCBJSW5kZXhCdWZmZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUluZGV4QnVmZmVyXCIpO1xuaW1wb3J0IElQcm9ncmFtXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVByb2dyYW1cIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZVwiKTtcbmltcG9ydCBJVGV4dHVyZUJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVRleHR1cmVCYXNlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lWZXJ0ZXhCdWZmZXJcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5cbi8qKlxuICogU3RhZ2UgcHJvdmlkZXMgYSBwcm94eSBjbGFzcyB0byBoYW5kbGUgdGhlIGNyZWF0aW9uIGFuZCBhdHRhY2htZW50IG9mIHRoZSBDb250ZXh0XG4gKiAoYW5kIGluIHR1cm4gdGhlIGJhY2sgYnVmZmVyKSBpdCB1c2VzLiBTdGFnZSBzaG91bGQgbmV2ZXIgYmUgY3JlYXRlZCBkaXJlY3RseSxcbiAqIGJ1dCByZXF1ZXN0ZWQgdGhyb3VnaCBTdGFnZU1hbmFnZXIuXG4gKlxuICogQHNlZSBhd2F5Lm1hbmFnZXJzLlN0YWdlTWFuYWdlclxuICpcbiAqL1xuY2xhc3MgQ29udGV4dEdMQmFzZSBpbXBsZW1lbnRzIElDb250ZXh0XG57XG5cdHByaXZhdGUgX3Byb2dyYW1EYXRhOkFycmF5PFByb2dyYW1EYXRhPiA9IG5ldyBBcnJheTxQcm9ncmFtRGF0YT4oKTtcblx0cHJpdmF0ZSBfbnVtVXNlZFN0cmVhbXM6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfbnVtVXNlZFRleHR1cmVzOm51bWJlciA9IDA7XG5cblx0cHVibGljIF9wQ29udGFpbmVyOkhUTUxFbGVtZW50O1xuXG5cdHByaXZhdGUgX3RleHR1cmVQb29sOlRleHR1cmVEYXRhUG9vbDtcblxuXHRwcml2YXRlIF9tYXRlcmlhbERhdGFQb29sOk1hdGVyaWFsRGF0YVBvb2w7XG5cblx0cHJpdmF0ZSBfcHJvZ3JhbURhdGFQb29sOlByb2dyYW1EYXRhUG9vbDtcblxuXHRwcml2YXRlIF93aWR0aDpudW1iZXI7XG5cdHByaXZhdGUgX2hlaWdodDpudW1iZXI7XG5cblx0Ly9wcml2YXRlIHN0YXRpYyBfZnJhbWVFdmVudERyaXZlcjpTaGFwZSA9IG5ldyBTaGFwZSgpOyAvLyBUT0RPOiBhZGQgZnJhbWUgZHJpdmVyIC8gcmVxdWVzdCBhbmltYXRpb24gZnJhbWVcblxuXHRwcml2YXRlIF9zdGFnZUluZGV4Om51bWJlciA9IC0xO1xuXHRwcml2YXRlIF9hbnRpQWxpYXM6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW47XG5cdHByaXZhdGUgX3JlbmRlclRhcmdldDpUZXh0dXJlUHJveHlCYXNlID0gbnVsbDtcblx0cHJpdmF0ZSBfcmVuZGVyU3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDA7XG5cblx0cHVibGljIGdldCBjb250YWluZXIoKTpIVE1MRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BDb250YWluZXI7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihzdGFnZUluZGV4Om51bWJlcilcblx0e1xuXHRcdHRoaXMuX3N0YWdlSW5kZXggPSBzdGFnZUluZGV4O1xuXHRcdHRoaXMuX3RleHR1cmVQb29sID0gbmV3IFRleHR1cmVEYXRhUG9vbCh0aGlzKTtcblx0XHR0aGlzLl9tYXRlcmlhbERhdGFQb29sID0gbmV3IE1hdGVyaWFsRGF0YVBvb2wodGhpcyk7XG5cdFx0dGhpcy5fcHJvZ3JhbURhdGFQb29sID0gbmV3IFByb2dyYW1EYXRhUG9vbCh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUYXJnZXQodGFyZ2V0OlRleHR1cmVQcm94eUJhc2UsIGVuYWJsZURlcHRoQW5kU3RlbmNpbDpib29sZWFuID0gZmFsc2UsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3JlbmRlclRhcmdldCA9PT0gdGFyZ2V0ICYmIHN1cmZhY2VTZWxlY3RvciA9PSB0aGlzLl9yZW5kZXJTdXJmYWNlU2VsZWN0b3IgJiYgdGhpcy5fZW5hYmxlRGVwdGhBbmRTdGVuY2lsID09IGVuYWJsZURlcHRoQW5kU3RlbmNpbClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3JlbmRlclRhcmdldCA9IHRhcmdldDtcblx0XHR0aGlzLl9yZW5kZXJTdXJmYWNlU2VsZWN0b3IgPSBzdXJmYWNlU2VsZWN0b3I7XG5cdFx0dGhpcy5fZW5hYmxlRGVwdGhBbmRTdGVuY2lsID0gZW5hYmxlRGVwdGhBbmRTdGVuY2lsO1xuXHRcdGlmICh0YXJnZXQgaW5zdGFuY2VvZiBSZW5kZXJUZXh0dXJlKSB7XG5cdFx0XHR0aGlzLnNldFJlbmRlclRvVGV4dHVyZSh0aGlzLmdldFJlbmRlclRleHR1cmUoPFJlbmRlclRleHR1cmU+IHRhcmdldCksIGVuYWJsZURlcHRoQW5kU3RlbmNpbCwgdGhpcy5fYW50aUFsaWFzLCBzdXJmYWNlU2VsZWN0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFJlbmRlclRvQmFja0J1ZmZlcigpO1xuXHRcdFx0dGhpcy5jb25maWd1cmVCYWNrQnVmZmVyKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHRoaXMuX2FudGlBbGlhcywgdGhpcy5fZW5hYmxlRGVwdGhBbmRTdGVuY2lsKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVuZGVyVGV4dHVyZSh0ZXh0dXJlUHJveHk6UmVuZGVyVGV4dHVyZSk6SVRleHR1cmVCYXNlXG5cdHtcblx0XHR2YXIgdGV4dHVyZURhdGE6VGV4dHVyZURhdGEgPSB0aGlzLl90ZXh0dXJlUG9vbC5nZXRJdGVtKHRleHR1cmVQcm94eSk7XG5cblx0XHRpZiAoIXRleHR1cmVEYXRhLnRleHR1cmUpXG5cdFx0XHR0ZXh0dXJlRGF0YS50ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlKHRleHR1cmVQcm94eS53aWR0aCwgdGV4dHVyZVByb3h5LmhlaWdodCwgQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5CR1JBLCB0cnVlKTtcblxuXHRcdHJldHVybiB0ZXh0dXJlRGF0YS50ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIGdldFByb2dyYW0obWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKTpQcm9ncmFtRGF0YVxuXHR7XG5cdFx0Ly9jaGVjayBrZXkgZG9lc24ndCBuZWVkIHJlLWNvbmNhdGVuYXRpbmdcblx0XHRpZiAoIW1hdGVyaWFsUGFzc0RhdGEua2V5Lmxlbmd0aCkge1xuXHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5rZXkgPSBtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgK1xuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLnZlcnRleENvZGUgK1xuXHRcdFx0XHRcIi0tLVwiICtcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5mcmFnbWVudENvZGUgK1xuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvbkZyYWdtZW50Q29kZSArXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEucG9zdEFuaW1hdGlvbkZyYWdtZW50Q29kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG1hdGVyaWFsUGFzc0RhdGEucHJvZ3JhbURhdGE7XG5cdFx0fVxuXG5cdFx0dmFyIHByb2dyYW1EYXRhOlByb2dyYW1EYXRhID0gdGhpcy5fcHJvZ3JhbURhdGFQb29sLmdldEl0ZW0obWF0ZXJpYWxQYXNzRGF0YS5rZXkpO1xuXG5cdFx0Ly9jaGVjayBwcm9ncmFtIGRhdGEgaGFzbid0IGNoYW5nZWQsIGtlZXAgY291bnQgb2YgcHJvZ3JhbSB1c2FnZXNcblx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS5wcm9ncmFtRGF0YSAhPSBwcm9ncmFtRGF0YSkge1xuXHRcdFx0aWYgKG1hdGVyaWFsUGFzc0RhdGEucHJvZ3JhbURhdGEpXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEucHJvZ3JhbURhdGEuZGlzcG9zZSgpO1xuXG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLnByb2dyYW1EYXRhID0gcHJvZ3JhbURhdGE7XG5cblx0XHRcdHByb2dyYW1EYXRhLnVzYWdlcysrO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9ncmFtRGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxcblx0ICovXG5cdHB1YmxpYyBnZXRNYXRlcmlhbChtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlLCBwcm9maWxlOnN0cmluZyk6TWF0ZXJpYWxEYXRhXG5cdHtcblx0XHR2YXIgbWF0ZXJpYWxEYXRhOk1hdGVyaWFsRGF0YSA9IHRoaXMuX21hdGVyaWFsRGF0YVBvb2wuZ2V0SXRlbShtYXRlcmlhbCk7XG5cblx0XHRpZiAobWF0ZXJpYWxEYXRhLmludmFsaWRBbmltYXRpb24pIHtcblx0XHRcdG1hdGVyaWFsRGF0YS5pbnZhbGlkQW5pbWF0aW9uID0gZmFsc2U7XG5cblx0XHRcdHZhciBtYXRlcmlhbERhdGFQYXNzZXM6QXJyYXk8TWF0ZXJpYWxQYXNzRGF0YT4gPSBtYXRlcmlhbERhdGEuZ2V0TWF0ZXJpYWxQYXNzZXMocHJvZmlsZSk7XG5cblx0XHRcdHZhciBlbmFibGVkR1BVQW5pbWF0aW9uOmJvb2xlYW4gPSB0aGlzLmdldEVuYWJsZWRHUFVBbmltYXRpb24obWF0ZXJpYWwsIG1hdGVyaWFsRGF0YVBhc3Nlcyk7XG5cblx0XHRcdHZhciByZW5kZXJPcmRlcklkID0gMDtcblx0XHRcdHZhciBtdWx0Om51bWJlciA9IDE7XG5cdFx0XHR2YXIgbWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhO1xuXHRcdFx0dmFyIGxlbjpudW1iZXIgPSBtYXRlcmlhbERhdGFQYXNzZXMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YSA9IG1hdGVyaWFsRGF0YVBhc3Nlc1tpXTtcblxuXHRcdFx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS51c2VzQW5pbWF0aW9uICE9IGVuYWJsZWRHUFVBbmltYXRpb24pIHtcblx0XHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLnVzZXNBbmltYXRpb24gPSBlbmFibGVkR1BVQW5pbWF0aW9uO1xuXHRcdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEua2V5ID09IFwiXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS5rZXkgPT0gXCJcIilcblx0XHRcdFx0XHR0aGlzLmNhbGNBbmltYXRpb25Db2RlKG1hdGVyaWFsLCBtYXRlcmlhbFBhc3NEYXRhKTtcblxuXHRcdFx0XHRyZW5kZXJPcmRlcklkICs9IHRoaXMuZ2V0UHJvZ3JhbShtYXRlcmlhbFBhc3NEYXRhKS5pZCptdWx0O1xuXHRcdFx0XHRtdWx0ICo9IDEwMDA7XG5cdFx0XHR9XG5cblx0XHRcdG1hdGVyaWFsRGF0YS5yZW5kZXJPcmRlcklkID0gcmVuZGVyT3JkZXJJZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWxEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzc2lnbnMgYW4gYXR0cmlidXRlIHN0cmVhbVxuXHQgKlxuXHQgKiBAcGFyYW0gaW5kZXggVGhlIGF0dHJpYnV0ZSBzdHJlYW0gaW5kZXggZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyXG5cdCAqIEBwYXJhbSBidWZmZXJcblx0ICogQHBhcmFtIG9mZnNldFxuXHQgKiBAcGFyYW0gc3RyaWRlXG5cdCAqIEBwYXJhbSBmb3JtYXRcblx0ICovXG5cdHB1YmxpYyBhY3RpdmF0ZUJ1ZmZlcihpbmRleDpudW1iZXIsIGJ1ZmZlcjpWZXJ0ZXhEYXRhLCBvZmZzZXQ6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nKVxuXHR7XG5cdFx0aWYgKCFidWZmZXIuY29udGV4dHNbdGhpcy5fc3RhZ2VJbmRleF0pXG5cdFx0XHRidWZmZXIuY29udGV4dHNbdGhpcy5fc3RhZ2VJbmRleF0gPSB0aGlzO1xuXG5cdFx0aWYgKCFidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSkge1xuXHRcdFx0YnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0gPSB0aGlzLmNyZWF0ZVZlcnRleEJ1ZmZlcihidWZmZXIuZGF0YS5sZW5ndGgvYnVmZmVyLmRhdGFQZXJWZXJ0ZXgsIGJ1ZmZlci5kYXRhUGVyVmVydGV4KTtcblx0XHRcdGJ1ZmZlci5pbnZhbGlkW3RoaXMuX3N0YWdlSW5kZXhdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0pIHtcblx0XHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdLnVwbG9hZEZyb21BcnJheShidWZmZXIuZGF0YSwgMCwgYnVmZmVyLmRhdGEubGVuZ3RoL2J1ZmZlci5kYXRhUGVyVmVydGV4KTtcblx0XHRcdGJ1ZmZlci5pbnZhbGlkW3RoaXMuX3N0YWdlSW5kZXhdID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRWZXJ0ZXhCdWZmZXJBdChpbmRleCwgYnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0sIG9mZnNldCwgZm9ybWF0KTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlVmVydGV4RGF0YShidWZmZXI6VmVydGV4RGF0YSlcblx0e1xuXHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdLmRpc3Bvc2UoKTtcblx0XHRidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgYWN0aXZhdGVSZW5kZXJUZXh0dXJlKGluZGV4Om51bWJlciwgdGV4dHVyZVByb3h5OlJlbmRlclRleHR1cmUpXG5cdHtcblx0XHR0aGlzLnNldFRleHR1cmVBdChpbmRleCwgdGhpcy5nZXRSZW5kZXJUZXh0dXJlKHRleHR1cmVQcm94eSkpO1xuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlTWF0ZXJpYWxQYXNzKG1hdGVyaWFsUGFzc0RhdGE6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpXG5cdHtcblx0XHR2YXIgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UgPSBtYXRlcmlhbFBhc3NEYXRhLnNoYWRlck9iamVjdDtcblxuXHRcdC8vY2xlYXIgdW51c2VkIHZlcnRleCBzdHJlYW1zXG5cdFx0Zm9yICh2YXIgaSA9IHNoYWRlck9iamVjdC5udW1Vc2VkU3RyZWFtczsgaSA8IHRoaXMuX251bVVzZWRTdHJlYW1zOyBpKyspXG5cdFx0XHR0aGlzLnNldFZlcnRleEJ1ZmZlckF0KGksIG51bGwpO1xuXG5cdFx0Ly9jbGVhciB1bnVzZWQgdGV4dHVyZSBzdHJlYW1zXG5cdFx0Zm9yICh2YXIgaSA9IHNoYWRlck9iamVjdC5udW1Vc2VkVGV4dHVyZXM7IGkgPCB0aGlzLl9udW1Vc2VkVGV4dHVyZXM7IGkrKylcblx0XHRcdHRoaXMuc2V0VGV4dHVyZUF0KGksIG51bGwpO1xuXG5cdFx0aWYgKG1hdGVyaWFsUGFzc0RhdGEudXNlc0FuaW1hdGlvbilcblx0XHRcdCg8QW5pbWF0aW9uU2V0QmFzZT4gbWF0ZXJpYWxQYXNzRGF0YS5tYXRlcmlhbC5hbmltYXRpb25TZXQpLmFjdGl2YXRlKHNoYWRlck9iamVjdCwgc3RhZ2UpO1xuXG5cdFx0Ly9hY3RpdmF0ZSBzaGFkZXIgb2JqZWN0XG5cdFx0c2hhZGVyT2JqZWN0LmlBY3RpdmF0ZShzdGFnZSwgY2FtZXJhKTtcblxuXHRcdC8vY2hlY2sgcHJvZ3JhbSBkYXRhIGlzIHVwbG9hZGVkXG5cdFx0dmFyIHByb2dyYW1EYXRhOlByb2dyYW1EYXRhID0gdGhpcy5nZXRQcm9ncmFtKG1hdGVyaWFsUGFzc0RhdGEpO1xuXG5cdFx0aWYgKCFwcm9ncmFtRGF0YS5wcm9ncmFtKSB7XG5cdFx0XHRwcm9ncmFtRGF0YS5wcm9ncmFtID0gdGhpcy5jcmVhdGVQcm9ncmFtKCk7XG5cdFx0XHR2YXIgdmVydGV4Qnl0ZUNvZGU6Qnl0ZUFycmF5ID0gKG5ldyBBR0FMTWluaUFzc2VtYmxlcigpLmFzc2VtYmxlKFwicGFydCB2ZXJ0ZXggMVxcblwiICsgbWF0ZXJpYWxQYXNzRGF0YS5hbmltYXRpb25WZXJ0ZXhDb2RlICsgbWF0ZXJpYWxQYXNzRGF0YS52ZXJ0ZXhDb2RlICsgXCJlbmRwYXJ0XCIpKVsndmVydGV4J10uZGF0YTtcblx0XHRcdHZhciBmcmFnbWVudEJ5dGVDb2RlOkJ5dGVBcnJheSA9IChuZXcgQUdBTE1pbmlBc3NlbWJsZXIoKS5hc3NlbWJsZShcInBhcnQgZnJhZ21lbnQgMVxcblwiICsgbWF0ZXJpYWxQYXNzRGF0YS5mcmFnbWVudENvZGUgKyBtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvbkZyYWdtZW50Q29kZSArIG1hdGVyaWFsUGFzc0RhdGEucG9zdEFuaW1hdGlvbkZyYWdtZW50Q29kZSArIFwiZW5kcGFydFwiKSlbJ2ZyYWdtZW50J10uZGF0YTtcblx0XHRcdHByb2dyYW1EYXRhLnByb2dyYW0udXBsb2FkKHZlcnRleEJ5dGVDb2RlLCBmcmFnbWVudEJ5dGVDb2RlKTtcblx0XHR9XG5cblx0XHQvL3NldCBwcm9ncmFtIGRhdGFcblx0XHR0aGlzLnNldFByb2dyYW0ocHJvZ3JhbURhdGEucHJvZ3JhbSk7XG5cdH1cblxuXHRwdWJsaWMgZGVhY3RpdmF0ZU1hdGVyaWFsUGFzcyhtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dmFyIHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlID0gbWF0ZXJpYWxQYXNzRGF0YS5zaGFkZXJPYmplY3Q7XG5cblx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS51c2VzQW5pbWF0aW9uKVxuXHRcdFx0KDxBbmltYXRpb25TZXRCYXNlPiBtYXRlcmlhbFBhc3NEYXRhLm1hdGVyaWFsLmFuaW1hdGlvblNldCkuZGVhY3RpdmF0ZShzaGFkZXJPYmplY3QsIHN0YWdlKTtcblxuXHRcdG1hdGVyaWFsUGFzc0RhdGEuc2hhZGVyT2JqZWN0LmlEZWFjdGl2YXRlKHN0YWdlKTtcblxuXHRcdHRoaXMuX251bVVzZWRTdHJlYW1zID0gc2hhZGVyT2JqZWN0Lm51bVVzZWRTdHJlYW1zO1xuXHRcdHRoaXMuX251bVVzZWRUZXh0dXJlcyA9IHNoYWRlck9iamVjdC5udW1Vc2VkVGV4dHVyZXM7XG5cdH1cblxuXHRwdWJsaWMgYWN0aXZhdGVUZXh0dXJlKGluZGV4Om51bWJlciwgdGV4dHVyZVByb3h5OlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR2YXIgdGV4dHVyZURhdGE6VGV4dHVyZURhdGEgPSA8VGV4dHVyZURhdGE+IHRoaXMuX3RleHR1cmVQb29sLmdldEl0ZW0odGV4dHVyZVByb3h5KTtcblxuXHRcdGlmICghdGV4dHVyZURhdGEudGV4dHVyZSkge1xuXHRcdFx0dGV4dHVyZURhdGEudGV4dHVyZSA9IHRoaXMuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlUHJveHkud2lkdGgsIHRleHR1cmVQcm94eS5oZWlnaHQsIENvbnRleHRHTFRleHR1cmVGb3JtYXQuQkdSQSwgdHJ1ZSk7XG5cdFx0XHR0ZXh0dXJlRGF0YS5pbnZhbGlkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGV4dHVyZURhdGEuaW52YWxpZCkge1xuXHRcdFx0dGV4dHVyZURhdGEuaW52YWxpZCA9IGZhbHNlO1xuXHRcdFx0aWYgKHRleHR1cmVQcm94eS5nZW5lcmF0ZU1pcG1hcHMpIHtcblx0XHRcdFx0dmFyIG1pcG1hcERhdGE6QXJyYXk8Qml0bWFwRGF0YT4gPSB0ZXh0dXJlUHJveHkuX2lHZXRNaXBtYXBEYXRhKCk7XG5cdFx0XHRcdHZhciBsZW46bnVtYmVyID0gbWlwbWFwRGF0YS5sZW5ndGg7XG5cdFx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKVxuXHRcdFx0XHRcdCg8SVRleHR1cmU+IHRleHR1cmVEYXRhLnRleHR1cmUpLnVwbG9hZEZyb21EYXRhKG1pcG1hcERhdGFbaV0sIGkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0KDxJVGV4dHVyZT4gdGV4dHVyZURhdGEudGV4dHVyZSkudXBsb2FkRnJvbURhdGEodGV4dHVyZVByb3h5Ll9pR2V0VGV4dHVyZURhdGEoKSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRUZXh0dXJlQXQoaW5kZXgsIHRleHR1cmVEYXRhLnRleHR1cmUpO1xuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlQ3ViZVRleHR1cmUoaW5kZXg6bnVtYmVyLCB0ZXh0dXJlUHJveHk6Q3ViZVRleHR1cmVCYXNlKVxuXHR7XG5cdFx0dmFyIHRleHR1cmVEYXRhOlRleHR1cmVEYXRhID0gPFRleHR1cmVEYXRhPiB0aGlzLl90ZXh0dXJlUG9vbC5nZXRJdGVtKHRleHR1cmVQcm94eSk7XG5cblx0XHRpZiAoIXRleHR1cmVEYXRhLnRleHR1cmUpIHtcblx0XHRcdHRleHR1cmVEYXRhLnRleHR1cmUgPSB0aGlzLmNyZWF0ZUN1YmVUZXh0dXJlKHRleHR1cmVQcm94eS5zaXplLCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0LkJHUkEsIGZhbHNlKTtcblx0XHRcdHRleHR1cmVEYXRhLmludmFsaWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0ZXh0dXJlRGF0YS5pbnZhbGlkKSB7XG5cdFx0XHR0ZXh0dXJlRGF0YS5pbnZhbGlkID0gZmFsc2U7XG5cdFx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA2OyArK2kpIHtcblx0XHRcdFx0aWYgKHRleHR1cmVQcm94eS5nZW5lcmF0ZU1pcG1hcHMpIHtcblx0XHRcdFx0XHR2YXIgbWlwbWFwRGF0YTpBcnJheTxCaXRtYXBEYXRhPiA9IHRleHR1cmVQcm94eS5faUdldE1pcG1hcERhdGEoaSk7XG5cdFx0XHRcdFx0dmFyIGxlbjpudW1iZXIgPSBtaXBtYXBEYXRhLmxlbmd0aDtcblx0XHRcdFx0XHRmb3IgKHZhciBqOm51bWJlciA9IDA7IGogPCBsZW47IGorKylcblx0XHRcdFx0XHRcdCg8SUN1YmVUZXh0dXJlPiB0ZXh0dXJlRGF0YS50ZXh0dXJlKS51cGxvYWRGcm9tRGF0YShtaXBtYXBEYXRhW2pdLCBpLCBqKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoPElDdWJlVGV4dHVyZT4gdGV4dHVyZURhdGEudGV4dHVyZSkudXBsb2FkRnJvbURhdGEodGV4dHVyZVByb3h5Ll9pR2V0VGV4dHVyZURhdGEoaSksIGksIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRUZXh0dXJlQXQoaW5kZXgsIHRleHR1cmVEYXRhLnRleHR1cmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgVmVydGV4QnVmZmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRyaWFuZ2xlIGluZGljZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0V2ViIGZvciB3aGljaCB3ZSByZXF1ZXN0IHRoZSBidWZmZXJcblx0ICogQHJldHVybiBUaGUgVmVydGV4QnVmZmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRyaWFuZ2xlIGluZGljZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SW5kZXhCdWZmZXIoYnVmZmVyOkluZGV4RGF0YSk6SUluZGV4QnVmZmVyXG5cdHtcblx0XHRpZiAoIWJ1ZmZlci5jb250ZXh0c1t0aGlzLl9zdGFnZUluZGV4XSlcblx0XHRcdGJ1ZmZlci5jb250ZXh0c1t0aGlzLl9zdGFnZUluZGV4XSA9IHRoaXM7XG5cblx0XHRpZiAoIWJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdKSB7XG5cdFx0XHRidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSA9IHRoaXMuY3JlYXRlSW5kZXhCdWZmZXIoYnVmZmVyLmRhdGEubGVuZ3RoKTtcblx0XHRcdGJ1ZmZlci5pbnZhbGlkW3RoaXMuX3N0YWdlSW5kZXhdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoYnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0pIHtcblx0XHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdLnVwbG9hZEZyb21BcnJheShidWZmZXIuZGF0YSwgMCwgYnVmZmVyLmRhdGEubGVuZ3RoKTtcblx0XHRcdGJ1ZmZlci5pbnZhbGlkW3RoaXMuX3N0YWdlSW5kZXhdID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2VJbmRleERhdGEoYnVmZmVyOkluZGV4RGF0YSlcblx0e1xuXHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdLmRpc3Bvc2UoKTtcblx0XHRidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIocmVkOm51bWJlciA9IDAsIGdyZWVuOm51bWJlciA9IDAsIGJsdWU6bnVtYmVyID0gMCwgYWxwaGE6bnVtYmVyID0gMSwgZGVwdGg6bnVtYmVyID0gMSwgc3RlbmNpbDpudW1iZXIgPSAwLCBtYXNrOm51bWJlciA9IENvbnRleHRHTENsZWFyTWFzay5BTEwpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZUJhY2tCdWZmZXIod2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyLCBhbnRpQWxpYXM6bnVtYmVyLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbiA9IHRydWUpXG5cdHtcblx0XHR0aGlzLl93aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuX2hlaWdodCA9IGhlaWdodDtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVJbmRleEJ1ZmZlcihudW1JbmRpY2VzOm51bWJlcik6SUluZGV4QnVmZmVyXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVZlcnRleEJ1ZmZlcihudW1WZXJ0aWNlczpudW1iZXIsIGRhdGEzMlBlclZlcnRleDpudW1iZXIpOklWZXJ0ZXhCdWZmZXJcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlVGV4dHVyZSh3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlOmJvb2xlYW4sIHN0cmVhbWluZ0xldmVsczpudW1iZXIgPSAwKTpJVGV4dHVyZVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVDdWJlVGV4dHVyZShzaXplOm51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzOm51bWJlciA9IDApOklDdWJlVGV4dHVyZVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVQcm9ncmFtKCk6SVByb2dyYW1cblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHByZXNlbnQoKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUb1RleHR1cmUodGFyZ2V0OklUZXh0dXJlQmFzZSwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSBmYWxzZSwgYW50aUFsaWFzOm51bWJlciA9IDAsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUb0JhY2tCdWZmZXIoKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBzZXRTY2lzc29yUmVjdGFuZ2xlKHJlY3RhbmdsZTpSZWN0YW5nbGUpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHNldFRleHR1cmVBdChzYW1wbGVyOm51bWJlciwgdGV4dHVyZTpJVGV4dHVyZUJhc2UpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHNldFZlcnRleEJ1ZmZlckF0KGluZGV4Om51bWJlciwgYnVmZmVyOklWZXJ0ZXhCdWZmZXIsIGJ1ZmZlck9mZnNldDpudW1iZXIgPSAwLCBmb3JtYXQ6c3RyaW5nID0gbnVsbClcblx0e1xuXG5cdH1cblxuXHRwdWJsaWMgc2V0UHJvZ3JhbShwcm9ncmFtOklQcm9ncmFtKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlclByb2dyYW0ocHJvZ3JhbURhdGE6UHJvZ3JhbURhdGEpXG5cdHtcblx0XHR2YXIgaTpudW1iZXIgPSAwO1xuXHRcdHdoaWxlICh0aGlzLl9wcm9ncmFtRGF0YVtpXSAhPSBudWxsKVxuXHRcdFx0aSsrO1xuXG5cdFx0dGhpcy5fcHJvZ3JhbURhdGFbaV0gPSBwcm9ncmFtRGF0YTtcblx0XHRwcm9ncmFtRGF0YS5pZCA9IGk7XG5cdH1cblxuXHRwdWJsaWMgdW5SZWdpc3RlclByb2dyYW0ocHJvZ3JhbURhdGE6UHJvZ3JhbURhdGEpXG5cdHtcblx0XHR0aGlzLl9wcm9ncmFtRGF0YVtwcm9ncmFtRGF0YS5pZF0gPSBudWxsO1xuXHRcdHByb2dyYW1EYXRhLmlkID0gLTE7XG5cdH1cblxuXG5cdC8qKlxuXHQgKiB0ZXN0IGlmIGFuaW1hdGlvbiB3aWxsIGJlIGFibGUgdG8gcnVuIG9uIGdwdSBCRUZPUkUgY29tcGlsaW5nIG1hdGVyaWFsc1xuXHQgKiB0ZXN0IGlmIHRoZSBzaGFkZXIgb2JqZWN0cyBzdXBwb3J0cyBhbmltYXRpbmcgdGhlIGFuaW1hdGlvbiBzZXQgaW4gdGhlIHZlcnRleCBzaGFkZXJcblx0ICogaWYgYW55IG9iamVjdCB1c2luZyB0aGlzIG1hdGVyaWFsIGZhaWxzIHRvIHN1cHBvcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBmb3IgYW55IG9mIHRoZSBzaGFkZXIgb2JqZWN0cyxcblx0ICogd2Ugc2hvdWxkIGRvIGV2ZXJ5dGhpbmcgb24gY3B1IChvdGhlcndpc2Ugd2UgaGF2ZSB0aGUgY29zdCBvZiBib3RoIGdwdSArIGNwdSBhbmltYXRpb25zKVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRFbmFibGVkR1BVQW5pbWF0aW9uKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsRGF0YVBhc3NlczpBcnJheTxNYXRlcmlhbFBhc3NEYXRhPik6Ym9vbGVhblxuXHR7XG5cdFx0aWYgKG1hdGVyaWFsLmFuaW1hdGlvblNldCkge1xuXHRcdFx0bWF0ZXJpYWwuYW5pbWF0aW9uU2V0LnJlc2V0R1BVQ29tcGF0aWJpbGl0eSgpO1xuXG5cdFx0XHR2YXIgb3duZXJzOkFycmF5PElNYXRlcmlhbE93bmVyPiA9IG1hdGVyaWFsLmlPd25lcnM7XG5cdFx0XHR2YXIgbnVtT3duZXJzOm51bWJlciA9IG93bmVycy5sZW5ndGg7XG5cblx0XHRcdHZhciBsZW46bnVtYmVyID0gbWF0ZXJpYWxEYXRhUGFzc2VzLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKVxuXHRcdFx0XHRmb3IgKHZhciBqOm51bWJlciA9IDA7IGogPCBudW1Pd25lcnM7IGorKylcblx0XHRcdFx0XHRpZiAob3duZXJzW2pdLmFuaW1hdG9yKVxuXHRcdFx0XHRcdFx0KDxBbmltYXRvckJhc2U+IG93bmVyc1tqXS5hbmltYXRvcikudGVzdEdQVUNvbXBhdGliaWxpdHkobWF0ZXJpYWxEYXRhUGFzc2VzW2ldLnNoYWRlck9iamVjdCk7XG5cblx0XHRcdHJldHVybiAhbWF0ZXJpYWwuYW5pbWF0aW9uU2V0LnVzZXNDUFU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHVibGljIGNhbGNBbmltYXRpb25Db2RlKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzc0RhdGE6TWF0ZXJpYWxQYXNzRGF0YSlcblx0e1xuXHRcdC8vcmVzZXQga2V5IHNvIHRoYXQgdGhlIHByb2dyYW0gaXMgcmUtY2FsY3VsYXRlZFxuXHRcdG1hdGVyaWFsUGFzc0RhdGEua2V5ID0gXCJcIjtcblx0XHRtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgPSBcIlwiO1xuXHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uRnJhZ21lbnRDb2RlID0gXCJcIjtcblxuXHRcdHZhciBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSA9IG1hdGVyaWFsUGFzc0RhdGEuc2hhZGVyT2JqZWN0O1xuXG5cdFx0Ly9jaGVjayB0byBzZWUgaWYgR1BVIGFuaW1hdGlvbiBpcyB1c2VkXG5cdFx0aWYgKG1hdGVyaWFsUGFzc0RhdGEudXNlc0FuaW1hdGlvbikge1xuXG5cdFx0XHR2YXIgYW5pbWF0aW9uU2V0OkFuaW1hdGlvblNldEJhc2UgPSA8QW5pbWF0aW9uU2V0QmFzZT4gbWF0ZXJpYWwuYW5pbWF0aW9uU2V0O1xuXG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgKz0gYW5pbWF0aW9uU2V0LmdldEFHQUxWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCk7XG5cblx0XHRcdGlmIChzaGFkZXJPYmplY3QudXZEZXBlbmRlbmNpZXMgPiAwICYmICFzaGFkZXJPYmplY3QudXNlc1VWVHJhbnNmb3JtKVxuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgKz0gYW5pbWF0aW9uU2V0LmdldEFHQUxVVkNvZGUoc2hhZGVyT2JqZWN0KTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC51c2VzRnJhZ21lbnRBbmltYXRpb24pXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uRnJhZ21lbnRDb2RlICs9IGFuaW1hdGlvblNldC5nZXRBR0FMRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdCwgbWF0ZXJpYWxQYXNzRGF0YS5zaGFkZWRUYXJnZXQpO1xuXG5cdFx0XHRhbmltYXRpb25TZXQuZG9uZUFHQUxDb2RlKHNoYWRlck9iamVjdCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2ltcGx5IHdyaXRlIGF0dHJpYnV0ZXMgdG8gdGFyZ2V0cywgZG8gbm90IGFuaW1hdGUgdGhlbVxuXHRcdFx0Ly8gcHJvamVjdGlvbiB3aWxsIHBpY2sgdXAgb24gdGFyZ2V0c1swXSB0byBkbyB0aGUgcHJvamVjdGlvblxuXHRcdFx0dmFyIGxlbjpudW1iZXIgPSBzaGFkZXJPYmplY3QuYW5pbWF0YWJsZUF0dHJpYnV0ZXMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uVmVydGV4Q29kZSArPSBcIm1vdiBcIiArIHNoYWRlck9iamVjdC5hbmltYXRpb25UYXJnZXRSZWdpc3RlcnNbaV0gKyBcIiwgXCIgKyBzaGFkZXJPYmplY3QuYW5pbWF0YWJsZUF0dHJpYnV0ZXNbaV0gKyBcIlxcblwiO1xuXG5cdFx0XHRpZiAoc2hhZGVyT2JqZWN0LnV2RGVwZW5kZW5jaWVzID4gMCAmJiAhc2hhZGVyT2JqZWN0LnVzZXNVVlRyYW5zZm9ybSlcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5hbmltYXRpb25WZXJ0ZXhDb2RlICs9IFwibW92IFwiICsgc2hhZGVyT2JqZWN0LnV2VGFyZ2V0ICsgXCIsXCIgKyBzaGFkZXJPYmplY3QudXZTb3VyY2UgKyBcIlxcblwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBDb250ZXh0R0xCYXNlOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLBase.ts b/lib/base/ContextGLBase.ts similarity index 90% rename from lib/core/stagegl/ContextGLBase.ts rename to lib/base/ContextGLBase.ts index c7975e36..6f0ef570 100644 --- a/lib/core/stagegl/ContextGLBase.ts +++ b/lib/base/ContextGLBase.ts @@ -12,29 +12,29 @@ import IMaterialOwner = require("awayjs-display/lib/base/IMaterialOwner"); import IContext = require("awayjs-display/lib/display/IContext"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); import AnimatorBase = require("awayjs-stagegl/lib/animators/AnimatorBase"); import AnimationSetBase = require("awayjs-stagegl/lib/animators/AnimationSetBase"); -import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); -import TextureData = require("awayjs-stagegl/lib/core/pool/TextureData"); -import TextureDataPool = require("awayjs-stagegl/lib/core/pool/TextureDataPool"); -import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); -import ProgramDataPool = require("awayjs-stagegl/lib/core/pool/ProgramDataPool"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -import MaterialDataPool = require("awayjs-stagegl/lib/core/pool/MaterialDataPool"); -import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); -import ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -import ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); -import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); +import TextureData = require("awayjs-stagegl/lib/pool/TextureData"); +import TextureDataPool = require("awayjs-stagegl/lib/pool/TextureDataPool"); +import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); +import ProgramDataPool = require("awayjs-stagegl/lib/pool/ProgramDataPool"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +import MaterialDataPool = require("awayjs-stagegl/lib/pool/MaterialDataPool"); +import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); +import ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +import ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); +import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); diff --git a/lib/base/ContextGLBlendFactor.js b/lib/base/ContextGLBlendFactor.js new file mode 100755 index 00000000..5fc49619 --- /dev/null +++ b/lib/base/ContextGLBlendFactor.js @@ -0,0 +1,18 @@ +var ContextGLBlendFactor = (function () { + function ContextGLBlendFactor() { + } + ContextGLBlendFactor.DESTINATION_ALPHA = "destinationAlpha"; + ContextGLBlendFactor.DESTINATION_COLOR = "destinationColor"; + ContextGLBlendFactor.ONE = "one"; + ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA = "oneMinusDestinationAlpha"; + ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR = "oneMinusDestinationColor"; + ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA = "oneMinusSourceAlpha"; + ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR = "oneMinusSourceColor"; + ContextGLBlendFactor.SOURCE_ALPHA = "sourceAlpha"; + ContextGLBlendFactor.SOURCE_COLOR = "sourceColor"; + ContextGLBlendFactor.ZERO = "zero"; + return ContextGLBlendFactor; +})(); +module.exports = ContextGLBlendFactor; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbGJsZW5kZmFjdG9yLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTEJsZW5kRmFjdG9yIiwiQ29udGV4dEdMQmxlbmRGYWN0b3IuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sb0JBQW9CO0lBQTFCQSxTQUFNQSxvQkFBb0JBO0lBWTFCQyxDQUFDQTtJQVZjRCxzQ0FBaUJBLEdBQVVBLGtCQUFrQkEsQ0FBQ0E7SUFDOUNBLHNDQUFpQkEsR0FBVUEsa0JBQWtCQSxDQUFDQTtJQUM5Q0Esd0JBQUdBLEdBQVVBLEtBQUtBLENBQUNBO0lBQ25CQSxnREFBMkJBLEdBQVVBLDBCQUEwQkEsQ0FBQ0E7SUFDaEVBLGdEQUEyQkEsR0FBVUEsMEJBQTBCQSxDQUFDQTtJQUNoRUEsMkNBQXNCQSxHQUFVQSxxQkFBcUJBLENBQUNBO0lBQ3REQSwyQ0FBc0JBLEdBQVVBLHFCQUFxQkEsQ0FBQ0E7SUFDdERBLGlDQUFZQSxHQUFVQSxhQUFhQSxDQUFDQTtJQUNwQ0EsaUNBQVlBLEdBQVVBLGFBQWFBLENBQUNBO0lBQ3BDQSx5QkFBSUEsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFDcENBLDJCQUFDQTtBQUFEQSxDQVpBLEFBWUNBLElBQUE7QUFFRCxBQUE4QixpQkFBckIsb0JBQW9CLENBQUMiLCJmaWxlIjoiYmFzZS9Db250ZXh0R0xCbGVuZEZhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xCbGVuZEZhY3Rvclxue1xuXHRwdWJsaWMgc3RhdGljIERFU1RJTkFUSU9OX0FMUEhBOnN0cmluZyA9IFwiZGVzdGluYXRpb25BbHBoYVwiO1xuXHRwdWJsaWMgc3RhdGljIERFU1RJTkFUSU9OX0NPTE9SOnN0cmluZyA9IFwiZGVzdGluYXRpb25Db2xvclwiO1xuXHRwdWJsaWMgc3RhdGljIE9ORTpzdHJpbmcgPSBcIm9uZVwiO1xuXHRwdWJsaWMgc3RhdGljIE9ORV9NSU5VU19ERVNUSU5BVElPTl9BTFBIQTpzdHJpbmcgPSBcIm9uZU1pbnVzRGVzdGluYXRpb25BbHBoYVwiO1xuXHRwdWJsaWMgc3RhdGljIE9ORV9NSU5VU19ERVNUSU5BVElPTl9DT0xPUjpzdHJpbmcgPSBcIm9uZU1pbnVzRGVzdGluYXRpb25Db2xvclwiO1xuXHRwdWJsaWMgc3RhdGljIE9ORV9NSU5VU19TT1VSQ0VfQUxQSEE6c3RyaW5nID0gXCJvbmVNaW51c1NvdXJjZUFscGhhXCI7XG5cdHB1YmxpYyBzdGF0aWMgT05FX01JTlVTX1NPVVJDRV9DT0xPUjpzdHJpbmcgPSBcIm9uZU1pbnVzU291cmNlQ29sb3JcIjtcblx0cHVibGljIHN0YXRpYyBTT1VSQ0VfQUxQSEE6c3RyaW5nID0gXCJzb3VyY2VBbHBoYVwiO1xuXHRwdWJsaWMgc3RhdGljIFNPVVJDRV9DT0xPUjpzdHJpbmcgPSBcInNvdXJjZUNvbG9yXCI7XG5cdHB1YmxpYyBzdGF0aWMgWkVSTzpzdHJpbmcgPSBcInplcm9cIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMQmxlbmRGYWN0b3I7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLBlendFactor.ts b/lib/base/ContextGLBlendFactor.ts similarity index 100% rename from lib/core/stagegl/ContextGLBlendFactor.ts rename to lib/base/ContextGLBlendFactor.ts diff --git a/lib/base/ContextGLClearMask.js b/lib/base/ContextGLClearMask.js new file mode 100755 index 00000000..5cb17669 --- /dev/null +++ b/lib/base/ContextGLClearMask.js @@ -0,0 +1,12 @@ +var ContextGLClearMask = (function () { + function ContextGLClearMask() { + } + ContextGLClearMask.COLOR = 1; + ContextGLClearMask.DEPTH = 2; + ContextGLClearMask.STENCIL = 4; + ContextGLClearMask.ALL = ContextGLClearMask.COLOR | ContextGLClearMask.DEPTH | ContextGLClearMask.STENCIL; + return ContextGLClearMask; +})(); +module.exports = ContextGLClearMask; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbGNsZWFybWFzay50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xDbGVhck1hc2siLCJDb250ZXh0R0xDbGVhck1hc2suY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sa0JBQWtCO0lBQXhCQSxTQUFNQSxrQkFBa0JBO0lBTXhCQyxDQUFDQTtJQUpPRCx3QkFBS0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7SUFDakJBLHdCQUFLQSxHQUFVQSxDQUFDQSxDQUFDQTtJQUNqQkEsMEJBQU9BLEdBQVVBLENBQUNBLENBQUNBO0lBQ25CQSxzQkFBR0EsR0FBVUEsa0JBQWtCQSxDQUFDQSxLQUFLQSxHQUFHQSxrQkFBa0JBLENBQUNBLEtBQUtBLEdBQUdBLGtCQUFrQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7SUFDdEdBLHlCQUFDQTtBQUFEQSxDQU5BLEFBTUNBLElBQUE7QUFFRCxBQUE0QixpQkFBbkIsa0JBQWtCLENBQUMiLCJmaWxlIjoiYmFzZS9Db250ZXh0R0xDbGVhck1hc2suanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMQ2xlYXJNYXNrXG57XG5cdHN0YXRpYyBDT0xPUjpudW1iZXIgPSAxO1xuXHRzdGF0aWMgREVQVEg6bnVtYmVyID0gMjtcblx0c3RhdGljIFNURU5DSUw6bnVtYmVyID0gNDtcblx0c3RhdGljIEFMTDpudW1iZXIgPSBDb250ZXh0R0xDbGVhck1hc2suQ09MT1IgfCBDb250ZXh0R0xDbGVhck1hc2suREVQVEggfCBDb250ZXh0R0xDbGVhck1hc2suU1RFTkNJTDtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMQ2xlYXJNYXNrOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLClearMask.ts b/lib/base/ContextGLClearMask.ts similarity index 100% rename from lib/core/stagegl/ContextGLClearMask.ts rename to lib/base/ContextGLClearMask.ts diff --git a/lib/base/ContextGLCompareMode.js b/lib/base/ContextGLCompareMode.js new file mode 100755 index 00000000..5a563fcf --- /dev/null +++ b/lib/base/ContextGLCompareMode.js @@ -0,0 +1,16 @@ +var ContextGLCompareMode = (function () { + function ContextGLCompareMode() { + } + ContextGLCompareMode.ALWAYS = "always"; + ContextGLCompareMode.EQUAL = "equal"; + ContextGLCompareMode.GREATER = "greater"; + ContextGLCompareMode.GREATER_EQUAL = "greaterEqual"; + ContextGLCompareMode.LESS = "less"; + ContextGLCompareMode.LESS_EQUAL = "lessEqual"; + ContextGLCompareMode.NEVER = "never"; + ContextGLCompareMode.NOT_EQUAL = "notEqual"; + return ContextGLCompareMode; +})(); +module.exports = ContextGLCompareMode; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbGNvbXBhcmVtb2RlLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTENvbXBhcmVNb2RlIiwiQ29udGV4dEdMQ29tcGFyZU1vZGUuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sb0JBQW9CO0lBQTFCQSxTQUFNQSxvQkFBb0JBO0lBVTFCQyxDQUFDQTtJQVJjRCwyQkFBTUEsR0FBVUEsUUFBUUEsQ0FBQ0E7SUFDekJBLDBCQUFLQSxHQUFVQSxPQUFPQSxDQUFDQTtJQUN2QkEsNEJBQU9BLEdBQVVBLFNBQVNBLENBQUNBO0lBQzNCQSxrQ0FBYUEsR0FBVUEsY0FBY0EsQ0FBQ0E7SUFDdENBLHlCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUNyQkEsK0JBQVVBLEdBQVVBLFdBQVdBLENBQUNBO0lBQ2hDQSwwQkFBS0EsR0FBVUEsT0FBT0EsQ0FBQ0E7SUFDdkJBLDhCQUFTQSxHQUFVQSxVQUFVQSxDQUFDQTtJQUM3Q0EsMkJBQUNBO0FBQURBLENBVkEsQUFVQ0EsSUFBQTtBQUVELEFBQThCLGlCQUFyQixvQkFBb0IsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTENvbXBhcmVNb2RlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTENvbXBhcmVNb2RlXG57XG5cdHB1YmxpYyBzdGF0aWMgQUxXQVlTOnN0cmluZyA9IFwiYWx3YXlzXCI7XG5cdHB1YmxpYyBzdGF0aWMgRVFVQUw6c3RyaW5nID0gXCJlcXVhbFwiO1xuXHRwdWJsaWMgc3RhdGljIEdSRUFURVI6c3RyaW5nID0gXCJncmVhdGVyXCI7XG5cdHB1YmxpYyBzdGF0aWMgR1JFQVRFUl9FUVVBTDpzdHJpbmcgPSBcImdyZWF0ZXJFcXVhbFwiO1xuXHRwdWJsaWMgc3RhdGljIExFU1M6c3RyaW5nID0gXCJsZXNzXCI7XG5cdHB1YmxpYyBzdGF0aWMgTEVTU19FUVVBTDpzdHJpbmcgPSBcImxlc3NFcXVhbFwiO1xuXHRwdWJsaWMgc3RhdGljIE5FVkVSOnN0cmluZyA9IFwibmV2ZXJcIjtcblx0cHVibGljIHN0YXRpYyBOT1RfRVFVQUw6c3RyaW5nID0gXCJub3RFcXVhbFwiO1xufVxuXG5leHBvcnQgPSBDb250ZXh0R0xDb21wYXJlTW9kZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLCompareMode.ts b/lib/base/ContextGLCompareMode.ts similarity index 100% rename from lib/core/stagegl/ContextGLCompareMode.ts rename to lib/base/ContextGLCompareMode.ts diff --git a/lib/base/ContextGLMipFilter.js b/lib/base/ContextGLMipFilter.js new file mode 100755 index 00000000..8dc15fac --- /dev/null +++ b/lib/base/ContextGLMipFilter.js @@ -0,0 +1,11 @@ +var ContextGLMipFilter = (function () { + function ContextGLMipFilter() { + } + ContextGLMipFilter.MIPLINEAR = "miplinear"; + ContextGLMipFilter.MIPNEAREST = "mipnearest"; + ContextGLMipFilter.MIPNONE = "mipnone"; + return ContextGLMipFilter; +})(); +module.exports = ContextGLMipFilter; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbG1pcGZpbHRlci50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xNaXBGaWx0ZXIiLCJDb250ZXh0R0xNaXBGaWx0ZXIuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sa0JBQWtCO0lBQXhCQSxTQUFNQSxrQkFBa0JBO0lBS3hCQyxDQUFDQTtJQUhjRCw0QkFBU0EsR0FBVUEsV0FBV0EsQ0FBQ0E7SUFDL0JBLDZCQUFVQSxHQUFVQSxZQUFZQSxDQUFDQTtJQUNqQ0EsMEJBQU9BLEdBQVVBLFNBQVNBLENBQUNBO0lBQzFDQSx5QkFBQ0E7QUFBREEsQ0FMQSxBQUtDQSxJQUFBO0FBRUQsQUFBNEIsaUJBQW5CLGtCQUFrQixDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dEdMTWlwRmlsdGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTE1pcEZpbHRlclxue1xuXHRwdWJsaWMgc3RhdGljIE1JUExJTkVBUjpzdHJpbmcgPSBcIm1pcGxpbmVhclwiO1xuXHRwdWJsaWMgc3RhdGljIE1JUE5FQVJFU1Q6c3RyaW5nID0gXCJtaXBuZWFyZXN0XCI7XG5cdHB1YmxpYyBzdGF0aWMgTUlQTk9ORTpzdHJpbmcgPSBcIm1pcG5vbmVcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMTWlwRmlsdGVyOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLMipFilter.ts b/lib/base/ContextGLMipFilter.ts similarity index 100% rename from lib/core/stagegl/ContextGLMipFilter.ts rename to lib/base/ContextGLMipFilter.ts diff --git a/lib/base/ContextGLProfile.js b/lib/base/ContextGLProfile.js new file mode 100755 index 00000000..219f3f0e --- /dev/null +++ b/lib/base/ContextGLProfile.js @@ -0,0 +1,11 @@ +var ContextGLProfile = (function () { + function ContextGLProfile() { + } + ContextGLProfile.BASELINE = "baseline"; + ContextGLProfile.BASELINE_CONSTRAINED = "baselineConstrained"; + ContextGLProfile.BASELINE_EXTENDED = "baselineExtended"; + return ContextGLProfile; +})(); +module.exports = ContextGLProfile; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHByb2ZpbGUudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMUHJvZmlsZSIsIkNvbnRleHRHTFByb2ZpbGUuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sZ0JBQWdCO0lBQXRCQSxTQUFNQSxnQkFBZ0JBO0lBS3RCQyxDQUFDQTtJQUhjRCx5QkFBUUEsR0FBVUEsVUFBVUEsQ0FBQ0E7SUFDN0JBLHFDQUFvQkEsR0FBVUEscUJBQXFCQSxDQUFDQTtJQUNwREEsa0NBQWlCQSxHQUFVQSxrQkFBa0JBLENBQUNBO0lBQzdEQSx1QkFBQ0E7QUFBREEsQ0FMQSxBQUtDQSxJQUFBO0FBQ0QsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dEdMUHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xQcm9maWxlXG57XG5cdHB1YmxpYyBzdGF0aWMgQkFTRUxJTkU6c3RyaW5nID0gXCJiYXNlbGluZVwiO1xuXHRwdWJsaWMgc3RhdGljIEJBU0VMSU5FX0NPTlNUUkFJTkVEOnN0cmluZyA9IFwiYmFzZWxpbmVDb25zdHJhaW5lZFwiO1xuXHRwdWJsaWMgc3RhdGljIEJBU0VMSU5FX0VYVEVOREVEOnN0cmluZyA9IFwiYmFzZWxpbmVFeHRlbmRlZFwiO1xufVxuZXhwb3J0ID0gQ29udGV4dEdMUHJvZmlsZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLProfile.ts b/lib/base/ContextGLProfile.ts similarity index 100% rename from lib/core/stagegl/ContextGLProfile.ts rename to lib/base/ContextGLProfile.ts diff --git a/lib/base/ContextGLProgramType.js b/lib/base/ContextGLProgramType.js new file mode 100755 index 00000000..7c899c23 --- /dev/null +++ b/lib/base/ContextGLProgramType.js @@ -0,0 +1,10 @@ +var ContextGLProgramType = (function () { + function ContextGLProgramType() { + } + ContextGLProgramType.FRAGMENT = "fragment"; + ContextGLProgramType.VERTEX = "vertex"; + return ContextGLProgramType; +})(); +module.exports = ContextGLProgramType; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHByb2dyYW10eXBlLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTFByb2dyYW1UeXBlIiwiQ29udGV4dEdMUHJvZ3JhbVR5cGUuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sb0JBQW9CO0lBQTFCQSxTQUFNQSxvQkFBb0JBO0lBSTFCQyxDQUFDQTtJQUZPRCw2QkFBUUEsR0FBVUEsVUFBVUEsQ0FBQ0E7SUFDN0JBLDJCQUFNQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUNqQ0EsMkJBQUNBO0FBQURBLENBSkEsQUFJQ0EsSUFBQTtBQUVELEFBQThCLGlCQUFyQixvQkFBb0IsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTFByb2dyYW1UeXBlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTFByb2dyYW1UeXBlXG57XG5cdHN0YXRpYyBGUkFHTUVOVDpzdHJpbmcgPSBcImZyYWdtZW50XCI7XG5cdHN0YXRpYyBWRVJURVg6c3RyaW5nID0gXCJ2ZXJ0ZXhcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMUHJvZ3JhbVR5cGU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLProgramType.ts b/lib/base/ContextGLProgramType.ts similarity index 100% rename from lib/core/stagegl/ContextGLProgramType.ts rename to lib/base/ContextGLProgramType.ts diff --git a/lib/base/ContextGLStencilAction.js b/lib/base/ContextGLStencilAction.js new file mode 100755 index 00000000..134c45ab --- /dev/null +++ b/lib/base/ContextGLStencilAction.js @@ -0,0 +1,16 @@ +var ContextGLStencilAction = (function () { + function ContextGLStencilAction() { + } + ContextGLStencilAction.DECREMENT_SATURATE = "decrementSaturate"; + ContextGLStencilAction.DECREMENT_WRAP = "decrementWrap"; + ContextGLStencilAction.INCREMENT_SATURATE = "incrementSaturate"; + ContextGLStencilAction.INCREMENT_WRAP = "incrementWrap"; + ContextGLStencilAction.INVERT = "invert"; + ContextGLStencilAction.KEEP = "keep"; + ContextGLStencilAction.SET = "set"; + ContextGLStencilAction.ZERO = "zero"; + return ContextGLStencilAction; +})(); +module.exports = ContextGLStencilAction; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHN0ZW5jaWxhY3Rpb24udHMiXSwibmFtZXMiOlsiQ29udGV4dEdMU3RlbmNpbEFjdGlvbiIsIkNvbnRleHRHTFN0ZW5jaWxBY3Rpb24uY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sc0JBQXNCO0lBQTVCQSxTQUFNQSxzQkFBc0JBO0lBVTVCQyxDQUFDQTtJQVJjRCx5Q0FBa0JBLEdBQVVBLG1CQUFtQkEsQ0FBQ0E7SUFDaERBLHFDQUFjQSxHQUFVQSxlQUFlQSxDQUFDQTtJQUN4Q0EseUNBQWtCQSxHQUFVQSxtQkFBbUJBLENBQUNBO0lBQ2hEQSxxQ0FBY0EsR0FBVUEsZUFBZUEsQ0FBQ0E7SUFDeENBLDZCQUFNQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUN6QkEsMkJBQUlBLEdBQVVBLE1BQU1BLENBQUNBO0lBQ3JCQSwwQkFBR0EsR0FBVUEsS0FBS0EsQ0FBQ0E7SUFDbkJBLDJCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUNwQ0EsNkJBQUNBO0FBQURBLENBVkEsQUFVQ0EsSUFBQTtBQUVELEFBQWdDLGlCQUF2QixzQkFBc0IsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTFN0ZW5jaWxBY3Rpb24uanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMU3RlbmNpbEFjdGlvblxue1xuXHRwdWJsaWMgc3RhdGljIERFQ1JFTUVOVF9TQVRVUkFURTpzdHJpbmcgPSBcImRlY3JlbWVudFNhdHVyYXRlXCI7XG5cdHB1YmxpYyBzdGF0aWMgREVDUkVNRU5UX1dSQVA6c3RyaW5nID0gXCJkZWNyZW1lbnRXcmFwXCI7XG5cdHB1YmxpYyBzdGF0aWMgSU5DUkVNRU5UX1NBVFVSQVRFOnN0cmluZyA9IFwiaW5jcmVtZW50U2F0dXJhdGVcIjtcblx0cHVibGljIHN0YXRpYyBJTkNSRU1FTlRfV1JBUDpzdHJpbmcgPSBcImluY3JlbWVudFdyYXBcIjtcblx0cHVibGljIHN0YXRpYyBJTlZFUlQ6c3RyaW5nID0gXCJpbnZlcnRcIjtcblx0cHVibGljIHN0YXRpYyBLRUVQOnN0cmluZyA9IFwia2VlcFwiO1xuXHRwdWJsaWMgc3RhdGljIFNFVDpzdHJpbmcgPSBcInNldFwiO1xuXHRwdWJsaWMgc3RhdGljIFpFUk86c3RyaW5nID0gXCJ6ZXJvXCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFN0ZW5jaWxBY3Rpb247Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLStencilAction.ts b/lib/base/ContextGLStencilAction.ts similarity index 100% rename from lib/core/stagegl/ContextGLStencilAction.ts rename to lib/base/ContextGLStencilAction.ts diff --git a/lib/base/ContextGLTextureFilter.js b/lib/base/ContextGLTextureFilter.js new file mode 100755 index 00000000..1ed7627b --- /dev/null +++ b/lib/base/ContextGLTextureFilter.js @@ -0,0 +1,10 @@ +var ContextGLTextureFilter = (function () { + function ContextGLTextureFilter() { + } + ContextGLTextureFilter.LINEAR = "linear"; + ContextGLTextureFilter.NEAREST = "nearest"; + return ContextGLTextureFilter; +})(); +module.exports = ContextGLTextureFilter; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHRleHR1cmVmaWx0ZXIudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMVGV4dHVyZUZpbHRlciIsIkNvbnRleHRHTFRleHR1cmVGaWx0ZXIuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sc0JBQXNCO0lBQTVCQSxTQUFNQSxzQkFBc0JBO0lBSTVCQyxDQUFDQTtJQUZjRCw2QkFBTUEsR0FBVUEsUUFBUUEsQ0FBQ0E7SUFDekJBLDhCQUFPQSxHQUFVQSxTQUFTQSxDQUFDQTtJQUMxQ0EsNkJBQUNBO0FBQURBLENBSkEsQUFJQ0EsSUFBQTtBQUVELEFBQWdDLGlCQUF2QixzQkFBc0IsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMVGV4dHVyZUZpbHRlclxue1xuXHRwdWJsaWMgc3RhdGljIExJTkVBUjpzdHJpbmcgPSBcImxpbmVhclwiO1xuXHRwdWJsaWMgc3RhdGljIE5FQVJFU1Q6c3RyaW5nID0gXCJuZWFyZXN0XCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFRleHR1cmVGaWx0ZXI7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTextureFilter.ts b/lib/base/ContextGLTextureFilter.ts similarity index 100% rename from lib/core/stagegl/ContextGLTextureFilter.ts rename to lib/base/ContextGLTextureFilter.ts diff --git a/lib/base/ContextGLTextureFormat.js b/lib/base/ContextGLTextureFormat.js new file mode 100755 index 00000000..d9f85344 --- /dev/null +++ b/lib/base/ContextGLTextureFormat.js @@ -0,0 +1,13 @@ +var ContextGLTextureFormat = (function () { + function ContextGLTextureFormat() { + } + ContextGLTextureFormat.BGRA = "bgra"; + ContextGLTextureFormat.BGRA_PACKED = "bgraPacked4444"; + ContextGLTextureFormat.BGR_PACKED = "bgrPacked565"; + ContextGLTextureFormat.COMPRESSED = "compressed"; + ContextGLTextureFormat.COMPRESSED_ALPHA = "compressedAlpha"; + return ContextGLTextureFormat; +})(); +module.exports = ContextGLTextureFormat; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHRleHR1cmVmb3JtYXQudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMVGV4dHVyZUZvcm1hdCIsIkNvbnRleHRHTFRleHR1cmVGb3JtYXQuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sc0JBQXNCO0lBQTVCQSxTQUFNQSxzQkFBc0JBO0lBTzVCQyxDQUFDQTtJQUxPRCwyQkFBSUEsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFDckJBLGtDQUFXQSxHQUFVQSxnQkFBZ0JBLENBQUNBO0lBQ3RDQSxpQ0FBVUEsR0FBVUEsY0FBY0EsQ0FBQ0E7SUFDbkNBLGlDQUFVQSxHQUFVQSxZQUFZQSxDQUFDQTtJQUNqQ0EsdUNBQWdCQSxHQUFVQSxpQkFBaUJBLENBQUNBO0lBQ3BEQSw2QkFBQ0E7QUFBREEsQ0FQQSxBQU9DQSxJQUFBO0FBRUQsQUFBZ0MsaUJBQXZCLHNCQUFzQixDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XG57XG5cdHN0YXRpYyBCR1JBOnN0cmluZyA9IFwiYmdyYVwiO1xuXHRzdGF0aWMgQkdSQV9QQUNLRUQ6c3RyaW5nID0gXCJiZ3JhUGFja2VkNDQ0NFwiO1xuXHRzdGF0aWMgQkdSX1BBQ0tFRDpzdHJpbmcgPSBcImJnclBhY2tlZDU2NVwiO1xuXHRzdGF0aWMgQ09NUFJFU1NFRDpzdHJpbmcgPSBcImNvbXByZXNzZWRcIjtcblx0c3RhdGljIENPTVBSRVNTRURfQUxQSEE6c3RyaW5nID0gXCJjb21wcmVzc2VkQWxwaGFcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMVGV4dHVyZUZvcm1hdDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTextureFormat.ts b/lib/base/ContextGLTextureFormat.ts similarity index 100% rename from lib/core/stagegl/ContextGLTextureFormat.ts rename to lib/base/ContextGLTextureFormat.ts diff --git a/lib/base/ContextGLTriangleFace.js b/lib/base/ContextGLTriangleFace.js new file mode 100755 index 00000000..a3310cb4 --- /dev/null +++ b/lib/base/ContextGLTriangleFace.js @@ -0,0 +1,12 @@ +var ContextGLTriangleFace = (function () { + function ContextGLTriangleFace() { + } + ContextGLTriangleFace.BACK = "back"; + ContextGLTriangleFace.FRONT = "front"; + ContextGLTriangleFace.FRONT_AND_BACK = "frontAndBack"; + ContextGLTriangleFace.NONE = "none"; + return ContextGLTriangleFace; +})(); +module.exports = ContextGLTriangleFace; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHRyaWFuZ2xlZmFjZS50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xUcmlhbmdsZUZhY2UiLCJDb250ZXh0R0xUcmlhbmdsZUZhY2UuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0scUJBQXFCO0lBQTNCQSxTQUFNQSxxQkFBcUJBO0lBTTNCQyxDQUFDQTtJQUpPRCwwQkFBSUEsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFDckJBLDJCQUFLQSxHQUFVQSxPQUFPQSxDQUFDQTtJQUN2QkEsb0NBQWNBLEdBQVVBLGNBQWNBLENBQUNBO0lBQ3ZDQSwwQkFBSUEsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFDN0JBLDRCQUFDQTtBQUFEQSxDQU5BLEFBTUNBLElBQUE7QUFFRCxBQUErQixpQkFBdEIscUJBQXFCLENBQUMiLCJmaWxlIjoiYmFzZS9Db250ZXh0R0xUcmlhbmdsZUZhY2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMVHJpYW5nbGVGYWNlXG57XG5cdHN0YXRpYyBCQUNLOnN0cmluZyA9IFwiYmFja1wiO1xuXHRzdGF0aWMgRlJPTlQ6c3RyaW5nID0gXCJmcm9udFwiO1xuXHRzdGF0aWMgRlJPTlRfQU5EX0JBQ0s6c3RyaW5nID0gXCJmcm9udEFuZEJhY2tcIjtcblx0c3RhdGljIE5PTkU6c3RyaW5nID0gXCJub25lXCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFRyaWFuZ2xlRmFjZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTriangleFace.ts b/lib/base/ContextGLTriangleFace.ts similarity index 100% rename from lib/core/stagegl/ContextGLTriangleFace.ts rename to lib/base/ContextGLTriangleFace.ts diff --git a/lib/base/ContextGLVertexBufferFormat.js b/lib/base/ContextGLVertexBufferFormat.js new file mode 100755 index 00000000..0ec73d93 --- /dev/null +++ b/lib/base/ContextGLVertexBufferFormat.js @@ -0,0 +1,13 @@ +var ContextGLVertexBufferFormat = (function () { + function ContextGLVertexBufferFormat() { + } + ContextGLVertexBufferFormat.BYTES_4 = "bytes4"; + ContextGLVertexBufferFormat.FLOAT_1 = "float1"; + ContextGLVertexBufferFormat.FLOAT_2 = "float2"; + ContextGLVertexBufferFormat.FLOAT_3 = "float3"; + ContextGLVertexBufferFormat.FLOAT_4 = "float4"; + return ContextGLVertexBufferFormat; +})(); +module.exports = ContextGLVertexBufferFormat; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHZlcnRleGJ1ZmZlcmZvcm1hdC50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQiLCJDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sMkJBQTJCO0lBQWpDQSxTQUFNQSwyQkFBMkJBO0lBT2pDQyxDQUFDQTtJQUxPRCxtQ0FBT0EsR0FBVUEsUUFBUUEsQ0FBQ0E7SUFDMUJBLG1DQUFPQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUMxQkEsbUNBQU9BLEdBQVVBLFFBQVFBLENBQUNBO0lBQzFCQSxtQ0FBT0EsR0FBVUEsUUFBUUEsQ0FBQ0E7SUFDMUJBLG1DQUFPQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUNsQ0Esa0NBQUNBO0FBQURBLENBUEEsQUFPQ0EsSUFBQTtBQUVELEFBQXFDLGlCQUE1QiwyQkFBMkIsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXRcbntcblx0c3RhdGljIEJZVEVTXzQ6c3RyaW5nID0gXCJieXRlczRcIjtcblx0c3RhdGljIEZMT0FUXzE6c3RyaW5nID0gXCJmbG9hdDFcIjtcblx0c3RhdGljIEZMT0FUXzI6c3RyaW5nID0gXCJmbG9hdDJcIjtcblx0c3RhdGljIEZMT0FUXzM6c3RyaW5nID0gXCJmbG9hdDNcIjtcblx0c3RhdGljIEZMT0FUXzQ6c3RyaW5nID0gXCJmbG9hdDRcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0OyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLVertexBufferFormat.ts b/lib/base/ContextGLVertexBufferFormat.ts similarity index 100% rename from lib/core/stagegl/ContextGLVertexBufferFormat.ts rename to lib/base/ContextGLVertexBufferFormat.ts diff --git a/lib/base/ContextGLWrapMode.js b/lib/base/ContextGLWrapMode.js new file mode 100755 index 00000000..35c055a0 --- /dev/null +++ b/lib/base/ContextGLWrapMode.js @@ -0,0 +1,10 @@ +var ContextGLWrapMode = (function () { + function ContextGLWrapMode() { + } + ContextGLWrapMode.CLAMP = "clamp"; + ContextGLWrapMode.REPEAT = "repeat"; + return ContextGLWrapMode; +})(); +module.exports = ContextGLWrapMode; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRnbHdyYXBtb2RlLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTFdyYXBNb2RlIiwiQ29udGV4dEdMV3JhcE1vZGUuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0saUJBQWlCO0lBQXZCQSxTQUFNQSxpQkFBaUJBO0lBSXZCQyxDQUFDQTtJQUZjRCx1QkFBS0EsR0FBVUEsT0FBT0EsQ0FBQ0E7SUFDdkJBLHdCQUFNQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUN4Q0Esd0JBQUNBO0FBQURBLENBSkEsQUFJQ0EsSUFBQTtBQUVELEFBQTJCLGlCQUFsQixpQkFBaUIsQ0FBQyIsImZpbGUiOiJiYXNlL0NvbnRleHRHTFdyYXBNb2RlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTFdyYXBNb2RlXG57XG5cdHB1YmxpYyBzdGF0aWMgQ0xBTVA6c3RyaW5nID0gXCJjbGFtcFwiO1xuXHRwdWJsaWMgc3RhdGljIFJFUEVBVDpzdHJpbmcgPSBcInJlcGVhdFwiO1xufVxuXG5leHBvcnQgPSBDb250ZXh0R0xXcmFwTW9kZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLWrapMode.ts b/lib/base/ContextGLWrapMode.ts similarity index 100% rename from lib/core/stagegl/ContextGLWrapMode.ts rename to lib/base/ContextGLWrapMode.ts diff --git a/lib/base/ContextStage3D.js b/lib/base/ContextStage3D.js new file mode 100755 index 00000000..c5a5db23 --- /dev/null +++ b/lib/base/ContextStage3D.js @@ -0,0 +1,333 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var swfobject = require("awayjs-stagegl/lib/swfobject"); +var Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); +var ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var CubeTextureFlash = require("awayjs-stagegl/lib/base/CubeTextureFlash"); +var IndexBufferFlash = require("awayjs-stagegl/lib/base/IndexBufferFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ProgramFlash = require("awayjs-stagegl/lib/base/ProgramFlash"); +var TextureFlash = require("awayjs-stagegl/lib/base/TextureFlash"); +var VertexBufferFlash = require("awayjs-stagegl/lib/base/VertexBufferFlash"); +var ContextStage3D = (function (_super) { + __extends(ContextStage3D, _super); + //TODO: get rid of hack that fixes including definition file + function ContextStage3D(container, stageIndex, callback, include) { + _super.call(this, stageIndex); + this._cmdStream = ""; + this._resources = new Array(); + var swfVersionStr = "11.0.0"; + // To use express install, set to playerProductInstall.swf, otherwise the empty string. + var flashvars = { + id: container.id + }; + var params = { + quality: "high", + bgcolor: "#ffffff", + allowscriptaccess: "sameDomain", + allowfullscreen: "true", + wmode: "direct" + }; + this._errorCheckingEnabled = false; + this._iDriverInfo = "Unknown"; + var attributes = { + salign: "tl", + id: container.id, + name: container["name"] //TODO: needed? + }; + this._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose + this._oldParent = container.parentNode; + var context3dObj = this; + ContextStage3D.contexts[container.id] = this; + function callbackSWFObject(callbackInfo) { + if (!callbackInfo.success) + return; + context3dObj._pContainer = callbackInfo.ref; + context3dObj._iCallback = callback; + } + swfobject.embedSWF("libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); + } + Object.defineProperty(ContextStage3D.prototype, "container", { + get: function () { + return this._pContainer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ContextStage3D.prototype, "driverInfo", { + get: function () { + return this._iDriverInfo; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ContextStage3D.prototype, "errorCheckingEnabled", { + get: function () { + return this._errorCheckingEnabled; + }, + set: function (value) { + if (this._errorCheckingEnabled == value) + return; + this._errorCheckingEnabled = value; + this.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value ? OpCodes.trueValue : OpCodes.falseValue)); + this.execute(); + }, + enumerable: true, + configurable: true + }); + ContextStage3D.prototype._iAddResource = function (resource) { + this._resources.push(resource); + }; + ContextStage3D.prototype._iRemoveResource = function (resource) { + this._resources.splice(this._resources.indexOf(resource)); + }; + ContextStage3D.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO:streaming + return new TextureFlash(this, width, height, format, optimizeForRenderToTexture); + }; + ContextStage3D.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO:streaming + return new CubeTextureFlash(this, size, format, optimizeForRenderToTexture); + }; + ContextStage3D.prototype.setTextureAt = function (sampler, texture) { + if (texture) { + this.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + "," + texture.id + ","); + } + else { + this.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + ","); + } + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { + //nothing to do here + }; + ContextStage3D.prototype.setStencilActions = function (triangleFace, compareMode, actionOnBothPass, actionOnDepthFail, actionOnDepthPassStencilFail) { + if (triangleFace === void 0) { triangleFace = "frontAndBack"; } + if (compareMode === void 0) { compareMode = "always"; } + if (actionOnBothPass === void 0) { actionOnBothPass = "keep"; } + if (actionOnDepthFail === void 0) { actionOnDepthFail = "keep"; } + if (actionOnDepthPassStencilFail === void 0) { actionOnDepthPassStencilFail = "keep"; } + this.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + "$" + compareMode + "$" + actionOnBothPass + "$" + actionOnDepthFail + "$" + actionOnDepthPassStencilFail + "$"); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setStencilReferenceValue = function (referenceValue, readMask, writeMask) { + if (readMask === void 0) { readMask = 255; } + if (writeMask === void 0) { writeMask = 255; } + this.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask)); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { + if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } + //TODO implement coordinateSystem option + this.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + "$"); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { + if (firstIndex === void 0) { firstIndex = 0; } + if (numTriangles === void 0) { numTriangles = -1; } + firstIndex = firstIndex || 0; + if (!numTriangles || numTriangles < 0) + numTriangles = indexBuffer.numIndices / 3; + this.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + "," + numTriangles + ","); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { + //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); + if (transposedMatrix === void 0) { transposedMatrix = false; } + //TODO remove special case for WebGL matrix calls? + var d = matrix.rawData; + if (transposedMatrix) { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); + } + else { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); + } + }; + ContextStage3D.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { + if (numRegisters === void 0) { numRegisters = -1; } + var startIndex; + var target = (programType == ContextGLProgramType.VERTEX) ? OpCodes.trueValue : OpCodes.falseValue; + for (var i = 0; i < numRegisters; i++) { + startIndex = i * 4; + this.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + "," + data[startIndex + 1] + "," + data[startIndex + 2] + "," + data[startIndex + 3] + ","); + if (ContextStage3D.debug) + this.execute(); + } + }; + ContextStage3D.prototype.setProgram = function (program) { + this.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask)); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.present = function () { + this.addStream(String.fromCharCode(OpCodes.present)); + this.execute(); + }; + ContextStage3D.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } + this.addStream(String.fromCharCode(OpCodes.clear) + red + "," + green + "," + blue + "," + alpha + "," + depth + "," + stencil + "," + mask + ","); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.createProgram = function () { + return new ProgramFlash(this); + }; + ContextStage3D.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + return new VertexBufferFlash(this, numVertices, data32PerVertex); + }; + ContextStage3D.prototype.createIndexBuffer = function (numIndices) { + return new IndexBufferFlash(this, numIndices); + }; + ContextStage3D.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); + //TODO: add Anitalias setting + this.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + "," + height + ","); + }; + ContextStage3D.prototype.drawToBitmapData = function (destination) { + //TODO + }; + ContextStage3D.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } + if (buffer) { + this.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + "," + bufferOffset + "," + format + "$"); + } + else { + this.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask)); + } + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setColorMask = function (red, green, blue, alpha) { + this.addStream(String.fromCharCode(OpCodes.setColorMask, red ? OpCodes.trueValue : OpCodes.falseValue, green ? OpCodes.trueValue : OpCodes.falseValue, blue ? OpCodes.trueValue : OpCodes.falseValue, alpha ? OpCodes.trueValue : OpCodes.falseValue)); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { + this.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + "$" + destinationFactor + "$"); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + if (target === null || target === undefined) { + this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); + } + else { + this.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil ? OpCodes.trueValue : OpCodes.falseValue) + target.id + "," + (antiAlias || 0) + ","); + } + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setRenderToBackBuffer = function () { + this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setScissorRectangle = function (rectangle) { + if (rectangle) { + this.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + "," + rectangle.y + "," + rectangle.width + "," + rectangle.height + ","); + } + else { + this.addStream(String.fromCharCode(OpCodes.clearScissorRect)); + } + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.setDepthTest = function (depthMask, passCompareMode) { + this.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask ? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + "$"); + if (ContextStage3D.debug) + this.execute(); + }; + ContextStage3D.prototype.dispose = function () { + if (this._pContainer == null) + return; + console.log("Context3D dispose, releasing " + this._resources.length + " resources."); + while (this._resources.length) + this._resources[0].dispose(); + if (this._pContainer) { + // encode command + this.addStream(String.fromCharCode(OpCodes.disposeContext)); + this.execute(); + swfobject.removeSWF(this._oldCanvas.id); + if (this._oldCanvas && this._oldParent) { + this._oldParent.appendChild(this._oldCanvas); + this._oldParent = null; + } + this._pContainer = null; + } + this._oldCanvas = null; + }; + ContextStage3D.prototype.addStream = function (stream) { + this._cmdStream += stream; + }; + ContextStage3D.prototype.execute = function () { + if (ContextStage3D.logStream) + console.log(this._cmdStream); + var result = this._pContainer["CallFunction"]("" + this._cmdStream + ""); + if (Number(result) <= -3) + throw "Exec stream failed"; + this._cmdStream = ""; + return Number(result); + }; + ContextStage3D.contexts = new Object(); + ContextStage3D.maxvertexconstants = 128; + ContextStage3D.maxfragconstants = 28; + ContextStage3D.maxtemp = 8; + ContextStage3D.maxstreams = 8; + ContextStage3D.maxtextures = 8; + ContextStage3D.defaultsampler = new Sampler(); + ContextStage3D.debug = false; + ContextStage3D.logStream = false; + return ContextStage3D; +})(ContextGLBase); +/** +* global function for flash callback +*/ +function mountain_js_context_available(id, driverInfo) { + var ctx = ContextStage3D.contexts[id]; + if (ctx._iCallback) { + ctx._iDriverInfo = driverInfo; + // get out of the current JS stack frame and call back from flash player + var timeOutId = window.setTimeout(function () { + window.clearTimeout(timeOutId); + try { + ctx._iCallback(ctx); + } + catch (e) { + console.log("Callback failed during flash initialization with '" + e.toString() + "'"); + } + }, 1); + } +} +module.exports = ContextStage3D; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHRzdGFnZTNkLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRTdGFnZTNEIiwiQ29udGV4dFN0YWdlM0QuY29uc3RydWN0b3IiLCJDb250ZXh0U3RhZ2UzRC5jb25zdHJ1Y3Rvci5jYWxsYmFja1NXRk9iamVjdCIsIkNvbnRleHRTdGFnZTNELmNvbnRhaW5lciIsIkNvbnRleHRTdGFnZTNELmRyaXZlckluZm8iLCJDb250ZXh0U3RhZ2UzRC5lcnJvckNoZWNraW5nRW5hYmxlZCIsIkNvbnRleHRTdGFnZTNELl9pQWRkUmVzb3VyY2UiLCJDb250ZXh0U3RhZ2UzRC5faVJlbW92ZVJlc291cmNlIiwiQ29udGV4dFN0YWdlM0QuY3JlYXRlVGV4dHVyZSIsIkNvbnRleHRTdGFnZTNELmNyZWF0ZUN1YmVUZXh0dXJlIiwiQ29udGV4dFN0YWdlM0Quc2V0VGV4dHVyZUF0IiwiQ29udGV4dFN0YWdlM0Quc2V0U2FtcGxlclN0YXRlQXQiLCJDb250ZXh0U3RhZ2UzRC5zZXRTdGVuY2lsQWN0aW9ucyIsIkNvbnRleHRTdGFnZTNELnNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZSIsIkNvbnRleHRTdGFnZTNELnNldEN1bGxpbmciLCJDb250ZXh0U3RhZ2UzRC5kcmF3VHJpYW5nbGVzIiwiQ29udGV4dFN0YWdlM0Quc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21NYXRyaXgiLCJDb250ZXh0U3RhZ2UzRC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5IiwiQ29udGV4dFN0YWdlM0Quc2V0UHJvZ3JhbSIsIkNvbnRleHRTdGFnZTNELnByZXNlbnQiLCJDb250ZXh0U3RhZ2UzRC5jbGVhciIsIkNvbnRleHRTdGFnZTNELmNyZWF0ZVByb2dyYW0iLCJDb250ZXh0U3RhZ2UzRC5jcmVhdGVWZXJ0ZXhCdWZmZXIiLCJDb250ZXh0U3RhZ2UzRC5jcmVhdGVJbmRleEJ1ZmZlciIsIkNvbnRleHRTdGFnZTNELmNvbmZpZ3VyZUJhY2tCdWZmZXIiLCJDb250ZXh0U3RhZ2UzRC5kcmF3VG9CaXRtYXBEYXRhIiwiQ29udGV4dFN0YWdlM0Quc2V0VmVydGV4QnVmZmVyQXQiLCJDb250ZXh0U3RhZ2UzRC5zZXRDb2xvck1hc2siLCJDb250ZXh0U3RhZ2UzRC5zZXRCbGVuZEZhY3RvcnMiLCJDb250ZXh0U3RhZ2UzRC5zZXRSZW5kZXJUb1RleHR1cmUiLCJDb250ZXh0U3RhZ2UzRC5zZXRSZW5kZXJUb0JhY2tCdWZmZXIiLCJDb250ZXh0U3RhZ2UzRC5zZXRTY2lzc29yUmVjdGFuZ2xlIiwiQ29udGV4dFN0YWdlM0Quc2V0RGVwdGhUZXN0IiwiQ29udGV4dFN0YWdlM0QuZGlzcG9zZSIsIkNvbnRleHRTdGFnZTNELmFkZFN0cmVhbSIsIkNvbnRleHRTdGFnZTNELmV4ZWN1dGUiLCJtb3VudGFpbl9qc19jb250ZXh0X2F2YWlsYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBTyxTQUFTLFdBQWUsOEJBQThCLENBQUMsQ0FBQztBQUMvRCxJQUFPLE9BQU8sV0FBZ0Isa0NBQWtDLENBQUMsQ0FBQztBQUNsRSxJQUFPLGFBQWEsV0FBYyx1Q0FBdUMsQ0FBQyxDQUFDO0FBQzNFLElBQU8sa0JBQWtCLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUNwRixJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDeEYsSUFBTyxnQkFBZ0IsV0FBYywwQ0FBMEMsQ0FBQyxDQUFDO0FBRWpGLElBQU8sZ0JBQWdCLFdBQWMsMENBQTBDLENBQUMsQ0FBQztBQUNqRixJQUFPLE9BQU8sV0FBZ0IsaUNBQWlDLENBQUMsQ0FBQztBQUNqRSxJQUFPLFlBQVksV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBQzFFLElBQU8sWUFBWSxXQUFlLHNDQUFzQyxDQUFDLENBQUM7QUFFMUUsSUFBTyxpQkFBaUIsV0FBYSwyQ0FBMkMsQ0FBQyxDQUFDO0FBRWxGLElBQU0sY0FBYztJQUFTQSxVQUF2QkEsY0FBY0EsVUFBc0JBO0lBa0R6Q0EsNERBQTREQTtJQUM1REEs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QUFDQUEsa0RBRGtEQTtZQUM5Q0EsQ0FBQ0EsR0FBWUEsTUFBTUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDaENBLEVBQUVBLENBQUNBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdEJBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDOUZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbEdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbkdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDcEdBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDN0ZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDakdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbkdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0Es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LENBQUNBLEVBQUVBLENBQUNBLENBQUNBO0lBQ3JEQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNwQkEsR0FBR0EsQ0FBQ0EsWUFBWUEsR0FBR0EsVUFBVUEsQ0FBQ0E7UUFDOUJBLEFBQ0FBLHdFQUR3RUE7WUFDcEVBLFNBQVNBLEdBQUdBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO1lBRWpDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsSUFBQSxDQUFDO2dCQUNBLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBRTtZQUFBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFULENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEYsQ0FBQztRQUNGLENBQUMsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDUEEsQ0FBQ0E7QUFDRkEsQ0FBQ0E7QUFyQkQsaUJBQVMsY0FBYyxDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dFN0YWdlM0QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdG1hcERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5cbmltcG9ydCBzd2ZvYmplY3RcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3N3Zm9iamVjdFwiKTtcbmltcG9ydCBTYW1wbGVyXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FnbHNsL1NhbXBsZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDbGVhck1hc2tcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDbGVhck1hc2tcIik7XG5pbXBvcnQgQ29udGV4dEdMUHJvZ3JhbVR5cGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xQcm9ncmFtVHlwZVwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUZsYXNoXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9DdWJlVGV4dHVyZUZsYXNoXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IEluZGV4QnVmZmVyRmxhc2hcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0luZGV4QnVmZmVyRmxhc2hcIik7XG5pbXBvcnQgT3BDb2Rlc1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL09wQ29kZXNcIik7XG5pbXBvcnQgUHJvZ3JhbUZsYXNoXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1Byb2dyYW1GbGFzaFwiKTtcbmltcG9ydCBUZXh0dXJlRmxhc2hcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvVGV4dHVyZUZsYXNoXCIpO1xuaW1wb3J0IFJlc291cmNlQmFzZUZsYXNoXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5pbXBvcnQgVmVydGV4QnVmZmVyRmxhc2hcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9WZXJ0ZXhCdWZmZXJGbGFzaFwiKTtcblxuY2xhc3MgQ29udGV4dFN0YWdlM0QgZXh0ZW5kcyBDb250ZXh0R0xCYXNlIGltcGxlbWVudHMgSUNvbnRleHRTdGFnZUdMXG57XG5cdHB1YmxpYyBzdGF0aWMgY29udGV4dHM6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwdWJsaWMgc3RhdGljIG1heHZlcnRleGNvbnN0YW50czpudW1iZXIgPSAxMjg7XG5cdHB1YmxpYyBzdGF0aWMgbWF4ZnJhZ2NvbnN0YW50czpudW1iZXIgPSAyODtcblx0cHVibGljIHN0YXRpYyBtYXh0ZW1wOm51bWJlciA9IDg7XG5cdHB1YmxpYyBzdGF0aWMgbWF4c3RyZWFtczpudW1iZXIgPSA4O1xuXHRwdWJsaWMgc3RhdGljIG1heHRleHR1cmVzOm51bWJlciA9IDg7XG5cdHB1YmxpYyBzdGF0aWMgZGVmYXVsdHNhbXBsZXIgPSBuZXcgU2FtcGxlcigpO1xuXG5cdHB1YmxpYyBfaURyaXZlckluZm87XG5cblx0cHJpdmF0ZSBfY21kU3RyZWFtOnN0cmluZyA9IFwiXCI7XG5cdHByaXZhdGUgX2Vycm9yQ2hlY2tpbmdFbmFibGVkOmJvb2xlYW47XG5cdHByaXZhdGUgX3Jlc291cmNlczpBcnJheTxSZXNvdXJjZUJhc2VGbGFzaD47XG5cdHByaXZhdGUgX29sZENhbnZhczpIVE1MQ2FudmFzRWxlbWVudDtcblx0cHJpdmF0ZSBfb2xkUGFyZW50OkhUTUxFbGVtZW50O1xuXG5cblx0cHVibGljIHN0YXRpYyBkZWJ1Zzpib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyBzdGF0aWMgbG9nU3RyZWFtOmJvb2xlYW4gPSBmYWxzZTtcblxuXHRwdWJsaWMgX2lDYWxsYmFjazooY29udGV4dDpJQ29udGV4dFN0YWdlR0wpID0+IHZvaWQ7XG5cblx0cHVibGljIGdldCBjb250YWluZXIoKTpIVE1MRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BDb250YWluZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGRyaXZlckluZm8oKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lEcml2ZXJJbmZvO1xuXHR9XG5cblx0cHVibGljIGdldCBlcnJvckNoZWNraW5nRW5hYmxlZCgpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9lcnJvckNoZWNraW5nRW5hYmxlZDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZXJyb3JDaGVja2luZ0VuYWJsZWQodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdGlmICh0aGlzLl9lcnJvckNoZWNraW5nRW5hYmxlZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2Vycm9yQ2hlY2tpbmdFbmFibGVkID0gdmFsdWU7XG5cblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZW5hYmxlRXJyb3JDaGVja2luZywgdmFsdWU/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlKSk7XG5cdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHQvL1RPRE86IGdldCByaWQgb2YgaGFjayB0aGF0IGZpeGVzIGluY2x1ZGluZyBkZWZpbml0aW9uIGZpbGVcblx0Y29uc3RydWN0b3IoY29udGFpbmVyOkhUTUxDYW52YXNFbGVtZW50LCBzdGFnZUluZGV4Om51bWJlciwgY2FsbGJhY2s6KGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMKSA9PiB2b2lkLCBpbmNsdWRlPzpTYW1wbGVyKVxuXHR7XG5cdFx0c3VwZXIoc3RhZ2VJbmRleCk7XG5cblx0XHR0aGlzLl9yZXNvdXJjZXMgPSBuZXcgQXJyYXk8UmVzb3VyY2VCYXNlRmxhc2g+KCk7XG5cblx0XHR2YXIgc3dmVmVyc2lvblN0ciA9IFwiMTEuMC4wXCI7XG5cblx0XHQvLyBUbyB1c2UgZXhwcmVzcyBpbnN0YWxsLCBzZXQgdG8gcGxheWVyUHJvZHVjdEluc3RhbGwuc3dmLCBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cblx0XHR2YXIgZmxhc2h2YXJzID0ge1xuXHRcdFx0aWQ6Y29udGFpbmVyLmlkXG5cdFx0fTtcblxuXHRcdHZhciBwYXJhbXMgPSB7XG5cdFx0XHRxdWFsaXR5OlwiaGlnaFwiLFxuXHRcdFx0Ymdjb2xvcjpcIiNmZmZmZmZcIixcblx0XHRcdGFsbG93c2NyaXB0YWNjZXNzOlwic2FtZURvbWFpblwiLFxuXHRcdFx0YWxsb3dmdWxsc2NyZWVuOlwidHJ1ZVwiLFxuXHRcdFx0d21vZGU6XCJkaXJlY3RcIlxuXHRcdH07XG5cblx0XHR0aGlzLl9lcnJvckNoZWNraW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX2lEcml2ZXJJbmZvID0gXCJVbmtub3duXCI7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9IHtcblx0XHRcdHNhbGlnbjpcInRsXCIsXG5cdFx0XHRpZDpjb250YWluZXIuaWQsXG5cdFx0XHRuYW1lOmNvbnRhaW5lcltcIm5hbWVcIl0gLy9UT0RPOiBuZWVkZWQ/XG5cdFx0fTtcblxuXHRcdHRoaXMuX29sZENhbnZhcyA9IDxIVE1MQ2FudmFzRWxlbWVudD4gY29udGFpbmVyLmNsb25lTm9kZSgpOyAvLyBrZWVwIHRoZSBvbGQgb25lIHRvIHJlc3RvcmUgb24gZGlzcG9zZVxuXHRcdHRoaXMuX29sZFBhcmVudCA9IDxIVE1MRWxlbWVudD4gY29udGFpbmVyLnBhcmVudE5vZGU7XG5cblx0XHR2YXIgY29udGV4dDNkT2JqID0gdGhpcztcblx0XHRDb250ZXh0U3RhZ2UzRC5jb250ZXh0c1tjb250YWluZXIuaWRdID0gdGhpcztcblxuXHRcdGZ1bmN0aW9uIGNhbGxiYWNrU1dGT2JqZWN0KGNhbGxiYWNrSW5mbylcblx0XHR7XG5cdFx0XHRpZiAoIWNhbGxiYWNrSW5mby5zdWNjZXNzKVxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdGNvbnRleHQzZE9iai5fcENvbnRhaW5lciA9IGNhbGxiYWNrSW5mby5yZWY7XG5cdFx0XHRjb250ZXh0M2RPYmouX2lDYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdH1cblxuXHRcdHN3Zm9iamVjdC5lbWJlZFNXRihcImxpYnMvbW9sZWhpbGxfanNfZmxhc2hicmlkZ2Uuc3dmXCIsIGNvbnRhaW5lci5pZCwgU3RyaW5nKGNvbnRhaW5lci53aWR0aCksIFN0cmluZyhjb250YWluZXIuaGVpZ2h0KSwgc3dmVmVyc2lvblN0ciwgXCJcIiwgZmxhc2h2YXJzLCBwYXJhbXMsIGF0dHJpYnV0ZXMsIGNhbGxiYWNrU1dGT2JqZWN0KTtcblx0fVxuXG5cdHB1YmxpYyBfaUFkZFJlc291cmNlKHJlc291cmNlOlJlc291cmNlQmFzZUZsYXNoKVxuXHR7XG5cdFx0dGhpcy5fcmVzb3VyY2VzLnB1c2gocmVzb3VyY2UpO1xuXHR9XG5cblx0cHVibGljIF9pUmVtb3ZlUmVzb3VyY2UocmVzb3VyY2U6UmVzb3VyY2VCYXNlRmxhc2gpXG5cdHtcblx0XHR0aGlzLl9yZXNvdXJjZXMuc3BsaWNlKHRoaXMuX3Jlc291cmNlcy5pbmRleE9mKHJlc291cmNlKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlVGV4dHVyZSh3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlOmJvb2xlYW4sIHN0cmVhbWluZ0xldmVsczpudW1iZXIgPSAwKTpUZXh0dXJlRmxhc2hcblx0e1xuXHRcdC8vVE9ETzpzdHJlYW1pbmdcblx0XHRyZXR1cm4gbmV3IFRleHR1cmVGbGFzaCh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlKTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVDdWJlVGV4dHVyZShzaXplOm51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzOm51bWJlciA9IDApOkN1YmVUZXh0dXJlRmxhc2hcblx0e1xuXHRcdC8vVE9ETzpzdHJlYW1pbmdcblx0XHRyZXR1cm4gbmV3IEN1YmVUZXh0dXJlRmxhc2godGhpcywgc2l6ZSwgZm9ybWF0LCBvcHRpbWl6ZUZvclJlbmRlclRvVGV4dHVyZSk7XG5cdH1cblxuXG5cdHB1YmxpYyBzZXRUZXh0dXJlQXQoc2FtcGxlcjpudW1iZXIsIHRleHR1cmU6UmVzb3VyY2VCYXNlRmxhc2gpXG5cdHtcblx0XHRpZiAodGV4dHVyZSkge1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldFRleHR1cmVBdCkgKyBzYW1wbGVyICsgXCIsXCIgKyB0ZXh0dXJlLmlkICsgXCIsXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuY2xlYXJUZXh0dXJlQXQpICsgc2FtcGxlci50b1N0cmluZygpICsgXCIsXCIpO1xuXHRcdH1cblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHNldFNhbXBsZXJTdGF0ZUF0KHNhbXBsZXI6bnVtYmVyLCB3cmFwOnN0cmluZywgZmlsdGVyOnN0cmluZywgbWlwZmlsdGVyOnN0cmluZyk6dm9pZFxuXHR7XG5cdFx0Ly9ub3RoaW5nIHRvIGRvIGhlcmVcblx0fVxuXG5cdHB1YmxpYyBzZXRTdGVuY2lsQWN0aW9ucyh0cmlhbmdsZUZhY2U6c3RyaW5nID0gXCJmcm9udEFuZEJhY2tcIiwgY29tcGFyZU1vZGU6c3RyaW5nID0gXCJhbHdheXNcIiwgYWN0aW9uT25Cb3RoUGFzczpzdHJpbmcgPSBcImtlZXBcIiwgYWN0aW9uT25EZXB0aEZhaWw6c3RyaW5nID0gXCJrZWVwXCIsIGFjdGlvbk9uRGVwdGhQYXNzU3RlbmNpbEZhaWw6c3RyaW5nID0gXCJrZWVwXCIpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0U3RlbmNpbEFjdGlvbnMpICsgdHJpYW5nbGVGYWNlICsgXCIkXCIgKyBjb21wYXJlTW9kZSArIFwiJFwiICsgYWN0aW9uT25Cb3RoUGFzcyArIFwiJFwiICsgYWN0aW9uT25EZXB0aEZhaWwgKyBcIiRcIiArIGFjdGlvbk9uRGVwdGhQYXNzU3RlbmNpbEZhaWwgKyBcIiRcIik7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRTdGVuY2lsUmVmZXJlbmNlVmFsdWUocmVmZXJlbmNlVmFsdWU6bnVtYmVyLCByZWFkTWFzazpudW1iZXIgPSAyNTUsIHdyaXRlTWFzazpudW1iZXIgPSAyNTUpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVlLCByZWZlcmVuY2VWYWx1ZSArIE9wQ29kZXMuaW50TWFzaywgcmVhZE1hc2sgKyBPcENvZGVzLmludE1hc2ssIHdyaXRlTWFzayArIE9wQ29kZXMuaW50TWFzaykpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q3VsbGluZyh0cmlhbmdsZUZhY2VUb0N1bGw6c3RyaW5nLCBjb29yZGluYXRlU3lzdGVtOnN0cmluZyA9IFwibGVmdEhhbmRlZFwiKVxuXHR7XG5cdFx0Ly9UT0RPIGltcGxlbWVudCBjb29yZGluYXRlU3lzdGVtIG9wdGlvblxuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRDdWxsaW5nKSArIHRyaWFuZ2xlRmFjZVRvQ3VsbCArIFwiJFwiKTtcblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIGRyYXdUcmlhbmdsZXMoaW5kZXhCdWZmZXI6SW5kZXhCdWZmZXJGbGFzaCwgZmlyc3RJbmRleDpudW1iZXIgPSAwLCBudW1UcmlhbmdsZXM6bnVtYmVyID0gLTEpXG5cdHtcblx0XHRmaXJzdEluZGV4ID0gZmlyc3RJbmRleCB8fCAwO1xuXHRcdGlmICghbnVtVHJpYW5nbGVzIHx8IG51bVRyaWFuZ2xlcyA8IDApXG5cdFx0XHRudW1UcmlhbmdsZXMgPSBpbmRleEJ1ZmZlci5udW1JbmRpY2VzLzM7XG5cblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZHJhd1RyaWFuZ2xlcywgaW5kZXhCdWZmZXIuaWQgKyBPcENvZGVzLmludE1hc2spICsgZmlyc3RJbmRleCArIFwiLFwiICsgbnVtVHJpYW5nbGVzICsgXCIsXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21NYXRyaXgocHJvZ3JhbVR5cGU6c3RyaW5nLCBmaXJzdFJlZ2lzdGVyOm51bWJlciwgbWF0cml4Ok1hdHJpeDNELCB0cmFuc3Bvc2VkTWF0cml4OmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdC8vdGhpcy5fZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLl9nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fY3VycmVudFByb2dyYW0uZ2xQcm9ncmFtLCB0aGlzLl91bmlmb3JtTG9jYXRpb25OYW1lRGljdGlvbmFyeVtwcm9ncmFtVHlwZV0pLCAhdHJhbnNwb3NlZE1hdHJpeCwgbmV3IEZsb2F0MzJBcnJheShtYXRyaXgucmF3RGF0YSkpO1xuXG5cdFx0Ly9UT0RPIHJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIFdlYkdMIG1hdHJpeCBjYWxscz9cblx0XHR2YXIgZDpudW1iZXJbXSA9IG1hdHJpeC5yYXdEYXRhO1xuXHRcdGlmICh0cmFuc3Bvc2VkTWF0cml4KSB7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIsIFsgZFswXSwgZFs0XSwgZFs4XSwgZFsxMl0gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAxLCBbIGRbMV0sIGRbNV0sIGRbOV0sIGRbMTNdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMiwgWyBkWzJdLCBkWzZdLCBkWzEwXSwgZFsxNF0gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAzLCBbIGRbM10sIGRbN10sIGRbMTFdLCBkWzE1XSBdLCAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyLCBbIGRbMF0sIGRbMV0sIGRbMl0sIGRbM10gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAxLCBbIGRbNF0sIGRbNV0sIGRbNl0sIGRbN10gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAyLCBbIGRbOF0sIGRbOV0sIGRbMTBdLCBkWzExXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDMsIFsgZFsxMl0sIGRbMTNdLCBkWzE0XSwgZFsxNV0gXSwgMSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGU6c3RyaW5nLCBmaXJzdFJlZ2lzdGVyOm51bWJlciwgZGF0YTpudW1iZXJbXSwgbnVtUmVnaXN0ZXJzOm51bWJlciA9IC0xKVxuXHR7XG5cdFx0dmFyIHN0YXJ0SW5kZXg6bnVtYmVyO1xuXHRcdHZhciB0YXJnZXQ6bnVtYmVyID0gKHByb2dyYW1UeXBlID09IENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCk/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IG51bVJlZ2lzdGVyczsgaSsrKSB7XG5cdFx0XHRzdGFydEluZGV4ID0gaSo0O1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldFByb2dyYW1Db25zdGFudCwgdGFyZ2V0LCAoZmlyc3RSZWdpc3RlciArIGkpICsgT3BDb2Rlcy5pbnRNYXNrKSArIGRhdGFbc3RhcnRJbmRleF0gKyBcIixcIiArIGRhdGFbc3RhcnRJbmRleCArIDFdICsgXCIsXCIgKyBkYXRhW3N0YXJ0SW5kZXggKyAyXSArIFwiLFwiICsgZGF0YVtzdGFydEluZGV4ICsgM10gKyBcIixcIik7XG5cblx0XHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFByb2dyYW0ocHJvZ3JhbTpQcm9ncmFtRmxhc2gpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0UHJvZ3JhbSwgcHJvZ3JhbS5pZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgcHJlc2VudCgpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMucHJlc2VudCkpO1xuXHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyKHJlZDpudW1iZXIgPSAwLCBncmVlbjpudW1iZXIgPSAwLCBibHVlOm51bWJlciA9IDAsIGFscGhhOm51bWJlciA9IDEsIGRlcHRoOm51bWJlciA9IDEsIHN0ZW5jaWw6bnVtYmVyID0gMCwgbWFzazpudW1iZXIgPSBDb250ZXh0R0xDbGVhck1hc2suQUxMKVxuXHR7XG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmNsZWFyKSArIHJlZCArIFwiLFwiICsgZ3JlZW4gKyBcIixcIiArIGJsdWUgKyBcIixcIiArIGFscGhhICsgXCIsXCIgKyBkZXB0aCArIFwiLFwiICsgc3RlbmNpbCArIFwiLFwiICsgbWFzayArIFwiLFwiKTtcblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVByb2dyYW0oKTpQcm9ncmFtRmxhc2hcblx0e1xuXHRcdHJldHVybiBuZXcgUHJvZ3JhbUZsYXNoKHRoaXMpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVZlcnRleEJ1ZmZlcihudW1WZXJ0aWNlczpudW1iZXIsIGRhdGEzMlBlclZlcnRleDpudW1iZXIpOlZlcnRleEJ1ZmZlckZsYXNoXG5cdHtcblx0XHRyZXR1cm4gbmV3IFZlcnRleEJ1ZmZlckZsYXNoKHRoaXMsIG51bVZlcnRpY2VzLCBkYXRhMzJQZXJWZXJ0ZXgpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUluZGV4QnVmZmVyKG51bUluZGljZXM6bnVtYmVyKTpJbmRleEJ1ZmZlckZsYXNoXG5cdHtcblx0XHRyZXR1cm4gbmV3IEluZGV4QnVmZmVyRmxhc2godGhpcywgbnVtSW5kaWNlcyk7XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlQmFja0J1ZmZlcih3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGFudGlBbGlhczpudW1iZXIsIGVuYWJsZURlcHRoQW5kU3RlbmNpbDpib29sZWFuID0gdHJ1ZSlcblx0e1xuXHRcdHN1cGVyLmNvbmZpZ3VyZUJhY2tCdWZmZXIod2lkdGgsIGhlaWdodCwgYW50aUFsaWFzLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXG5cdFx0Ly9UT0RPOiBhZGQgQW5pdGFsaWFzIHNldHRpbmdcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuY29uZmlndXJlQmFja0J1ZmZlcikgKyB3aWR0aCArIFwiLFwiICsgaGVpZ2h0ICsgXCIsXCIpO1xuXHR9XG5cblx0cHVibGljIGRyYXdUb0JpdG1hcERhdGEoZGVzdGluYXRpb246Qml0bWFwRGF0YSlcblx0e1xuXHRcdC8vVE9ET1xuXHR9XG5cblx0cHVibGljIHNldFZlcnRleEJ1ZmZlckF0KGluZGV4Om51bWJlciwgYnVmZmVyOlZlcnRleEJ1ZmZlckZsYXNoLCBidWZmZXJPZmZzZXQ6bnVtYmVyID0gMCwgZm9ybWF0OnN0cmluZyA9IG51bGwpXG5cdHtcblx0XHRpZiAoYnVmZmVyKSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0VmVydGV4QnVmZmVyQXQsIGluZGV4ICsgT3BDb2Rlcy5pbnRNYXNrKSArIGJ1ZmZlci5pZCArIFwiLFwiICsgYnVmZmVyT2Zmc2V0ICsgXCIsXCIgKyBmb3JtYXQgKyBcIiRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5jbGVhclZlcnRleEJ1ZmZlckF0LCBpbmRleCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdH1cblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHNldENvbG9yTWFzayhyZWQ6Ym9vbGVhbiwgZ3JlZW46Ym9vbGVhbiwgYmx1ZTpib29sZWFuLCBhbHBoYTpib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldENvbG9yTWFzaywgcmVkPyBPcENvZGVzLnRydWVWYWx1ZSA6IE9wQ29kZXMuZmFsc2VWYWx1ZSwgZ3JlZW4/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlLCBibHVlPyBPcENvZGVzLnRydWVWYWx1ZSA6IE9wQ29kZXMuZmFsc2VWYWx1ZSwgYWxwaGE/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlKSk7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRCbGVuZEZhY3RvcnMoc291cmNlRmFjdG9yOnN0cmluZywgZGVzdGluYXRpb25GYWN0b3I6c3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldEJsZW5kRmFjdG9ycykgKyBzb3VyY2VGYWN0b3IgKyBcIiRcIiArIGRlc3RpbmF0aW9uRmFjdG9yICsgXCIkXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVuZGVyVG9UZXh0dXJlKHRhcmdldDpSZXNvdXJjZUJhc2VGbGFzaCwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSBmYWxzZSwgYW50aUFsaWFzOm51bWJlciA9IDAsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cdFx0aWYgKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmNsZWFyUmVuZGVyVG9UZXh0dXJlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRSZW5kZXJUb1RleHR1cmUsIGVuYWJsZURlcHRoQW5kU3RlbmNpbD8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpICsgdGFyZ2V0LmlkICsgXCIsXCIgKyAoYW50aUFsaWFzIHx8IDApICsgXCIsXCIpO1xuXHRcdH1cblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblxuXHRwdWJsaWMgc2V0UmVuZGVyVG9CYWNrQnVmZmVyKClcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5jbGVhclJlbmRlclRvVGV4dHVyZSkpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2Npc3NvclJlY3RhbmdsZShyZWN0YW5nbGU6UmVjdGFuZ2xlKVxuXHR7XG5cdFx0aWYgKHJlY3RhbmdsZSkge1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldFNjaXNzb3JSZWN0KSArIHJlY3RhbmdsZS54ICsgXCIsXCIgKyByZWN0YW5nbGUueSArIFwiLFwiICsgcmVjdGFuZ2xlLndpZHRoICsgXCIsXCIgKyByZWN0YW5nbGUuaGVpZ2h0ICsgXCIsXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuY2xlYXJTY2lzc29yUmVjdCkpO1xuXHRcdH1cblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHNldERlcHRoVGVzdChkZXB0aE1hc2s6Ym9vbGVhbiwgcGFzc0NvbXBhcmVNb2RlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXREZXB0aFRlc3QsIGRlcHRoTWFzaz8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpICsgcGFzc0NvbXBhcmVNb2RlICsgXCIkXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRpZiAodGhpcy5fcENvbnRhaW5lciA9PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc29sZS5sb2coXCJDb250ZXh0M0QgZGlzcG9zZSwgcmVsZWFzaW5nIFwiICsgdGhpcy5fcmVzb3VyY2VzLmxlbmd0aCArIFwiIHJlc291cmNlcy5cIik7XG5cblx0XHR3aGlsZSAodGhpcy5fcmVzb3VyY2VzLmxlbmd0aClcblx0XHRcdHRoaXMuX3Jlc291cmNlc1swXS5kaXNwb3NlKCk7XG5cblx0XHRpZiAodGhpcy5fcENvbnRhaW5lcikge1xuXHRcdFx0Ly8gZW5jb2RlIGNvbW1hbmRcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kaXNwb3NlQ29udGV4dCkpO1xuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdFx0XHRzd2ZvYmplY3QucmVtb3ZlU1dGKHRoaXMuX29sZENhbnZhcy5pZCk7XG5cdFx0XHRpZiAodGhpcy5fb2xkQ2FudmFzICYmIHRoaXMuX29sZFBhcmVudCkge1xuXHRcdFx0XHR0aGlzLl9vbGRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5fb2xkQ2FudmFzKTtcblx0XHRcdFx0dGhpcy5fb2xkUGFyZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3BDb250YWluZXIgPSBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMuX29sZENhbnZhcyA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgYWRkU3RyZWFtKHN0cmVhbTpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9jbWRTdHJlYW0gKz0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGUoKTpudW1iZXJcblx0e1xuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5sb2dTdHJlYW0pXG5cdFx0XHRjb25zb2xlLmxvZyh0aGlzLl9jbWRTdHJlYW0pO1xuXG5cdFx0dmFyIHJlc3VsdDpudW1iZXIgPSB0aGlzLl9wQ29udGFpbmVyW1wiQ2FsbEZ1bmN0aW9uXCJdKFwiPGludm9rZSBuYW1lPVxcXCJleGVjU3RhZ2UzZE9wU3RyZWFtXFxcIiByZXR1cm50eXBlPVxcXCJqYXZhc2NyaXB0XFxcIj48YXJndW1lbnRzPjxzdHJpbmc+XCIgKyB0aGlzLl9jbWRTdHJlYW0gKyBcIjwvc3RyaW5nPjwvYXJndW1lbnRzPjwvaW52b2tlPlwiKTtcblxuXHRcdGlmIChOdW1iZXIocmVzdWx0KSA8PSAtMylcblx0XHRcdHRocm93IFwiRXhlYyBzdHJlYW0gZmFpbGVkXCI7XG5cblx0XHR0aGlzLl9jbWRTdHJlYW0gPSBcIlwiO1xuXG5cdFx0cmV0dXJuIE51bWJlcihyZXN1bHQpO1xuXHR9XG59XG5cbmV4cG9ydCA9IENvbnRleHRTdGFnZTNEO1xuXG4vKipcbiogZ2xvYmFsIGZ1bmN0aW9uIGZvciBmbGFzaCBjYWxsYmFja1xuKi9cbmZ1bmN0aW9uIG1vdW50YWluX2pzX2NvbnRleHRfYXZhaWxhYmxlKGlkLCBkcml2ZXJJbmZvKVxue1xuXHR2YXIgY3R4OkNvbnRleHRTdGFnZTNEID0gQ29udGV4dFN0YWdlM0QuY29udGV4dHNbaWRdO1xuXHRpZiAoY3R4Ll9pQ2FsbGJhY2spIHtcblx0XHRjdHguX2lEcml2ZXJJbmZvID0gZHJpdmVySW5mbztcblx0XHQvLyBnZXQgb3V0IG9mIHRoZSBjdXJyZW50IEpTIHN0YWNrIGZyYW1lIGFuZCBjYWxsIGJhY2sgZnJvbSBmbGFzaCBwbGF5ZXJcblx0XHR2YXIgdGltZU91dElkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKClcblx0XHR7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVPdXRJZCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjdHguX2lDYWxsYmFjayhjdHgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkNhbGxiYWNrIGZhaWxlZCBkdXJpbmcgZmxhc2ggaW5pdGlhbGl6YXRpb24gd2l0aCAnXCIgKyBlLnRvU3RyaW5nKCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSwgMSk7XG5cdH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextStage3D.ts b/lib/base/ContextStage3D.ts similarity index 91% rename from lib/core/stagegl/ContextStage3D.ts rename to lib/base/ContextStage3D.ts index 35ae0147..a61d75e9 100755 --- a/lib/core/stagegl/ContextStage3D.ts +++ b/lib/base/ContextStage3D.ts @@ -4,17 +4,17 @@ import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import swfobject = require("awayjs-stagegl/lib/swfobject"); import Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import CubeTextureFlash = require("awayjs-stagegl/lib/core/stagegl/CubeTextureFlash"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import IndexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/IndexBufferFlash"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ProgramFlash = require("awayjs-stagegl/lib/core/stagegl/ProgramFlash"); -import TextureFlash = require("awayjs-stagegl/lib/core/stagegl/TextureFlash"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -import VertexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/VertexBufferFlash"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import CubeTextureFlash = require("awayjs-stagegl/lib/base/CubeTextureFlash"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import IndexBufferFlash = require("awayjs-stagegl/lib/base/IndexBufferFlash"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ProgramFlash = require("awayjs-stagegl/lib/base/ProgramFlash"); +import TextureFlash = require("awayjs-stagegl/lib/base/TextureFlash"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +import VertexBufferFlash = require("awayjs-stagegl/lib/base/VertexBufferFlash"); class ContextStage3D extends ContextGLBase implements IContextStageGL { @@ -112,7 +112,7 @@ class ContextStage3D extends ContextGLBase implements IContextStageGL context3dObj._iCallback = callback; } - swfobject.embedSWF("../libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); + swfobject.embedSWF("libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); } public _iAddResource(resource:ResourceBaseFlash) diff --git a/lib/base/ContextWebGL.js b/lib/base/ContextWebGL.js new file mode 100755 index 00000000..6944a11b --- /dev/null +++ b/lib/base/ContextWebGL.js @@ -0,0 +1,375 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var ByteArray = require("awayjs-core/lib/utils/ByteArray"); +var ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +var CubeTextureWebGL = require("awayjs-stagegl/lib/base/CubeTextureWebGL"); +var IndexBufferWebGL = require("awayjs-stagegl/lib/base/IndexBufferWebGL"); +var ProgramWebGL = require("awayjs-stagegl/lib/base/ProgramWebGL"); +var TextureWebGL = require("awayjs-stagegl/lib/base/TextureWebGL"); +var SamplerState = require("awayjs-stagegl/lib/base/SamplerState"); +var VertexBufferWebGL = require("awayjs-stagegl/lib/base/VertexBufferWebGL"); +var ContextWebGL = (function (_super) { + __extends(ContextWebGL, _super); + function ContextWebGL(canvas, stageIndex) { + _super.call(this, stageIndex); + this._blendFactorDictionary = new Object(); + this._depthTestDictionary = new Object(); + this._textureIndexDictionary = new Array(8); + this._textureTypeDictionary = new Object(); + this._wrapDictionary = new Object(); + this._filterDictionary = new Object(); + this._mipmapFilterDictionary = new Object(); + this._uniformLocationNameDictionary = new Object(); + this._vertexBufferDimensionDictionary = new Object(); + this._indexBufferList = new Array(); + this._vertexBufferList = new Array(); + this._textureList = new Array(); + this._programList = new Array(); + this._samplerStates = new Array(8); + this._pContainer = canvas; + try { + this._gl = canvas.getContext("experimental-webgl", { premultipliedAlpha: false, alpha: false }); + if (!this._gl) + this._gl = canvas.getContext("webgl", { premultipliedAlpha: false, alpha: false }); + } + catch (e) { + } + if (this._gl) { + //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) ); + //setup shortcut dictionaries + this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; + this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA; + this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR; + this._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO; + this._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS; + this._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL; + this._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER; + this._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL; + this._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS; + this._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL; + this._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER; + this._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL; + this._textureIndexDictionary[0] = this._gl.TEXTURE0; + this._textureIndexDictionary[1] = this._gl.TEXTURE1; + this._textureIndexDictionary[2] = this._gl.TEXTURE2; + this._textureIndexDictionary[3] = this._gl.TEXTURE3; + this._textureIndexDictionary[4] = this._gl.TEXTURE4; + this._textureIndexDictionary[5] = this._gl.TEXTURE5; + this._textureIndexDictionary[6] = this._gl.TEXTURE6; + this._textureIndexDictionary[7] = this._gl.TEXTURE7; + this._textureTypeDictionary["texture2d"] = this._gl.TEXTURE_2D; + this._textureTypeDictionary["textureCube"] = this._gl.TEXTURE_CUBE_MAP; + this._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT; + this._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE; + this._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR; + this._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object(); + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object(); + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR; + this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST; + this._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = "vc"; + this._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = "fc"; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4; + this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4; + } + else { + //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) ); + alert("WebGL is not available."); + } + for (var i = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) { + this._samplerStates[i] = new SamplerState(); + this._samplerStates[i].wrap = this._gl.REPEAT; + this._samplerStates[i].filter = this._gl.LINEAR; + this._samplerStates[i].mipfilter = this._gl.LINEAR; + } + } + Object.defineProperty(ContextWebGL.prototype, "container", { + get: function () { + return this._pContainer; + }, + enumerable: true, + configurable: true + }); + ContextWebGL.prototype.gl = function () { + return this._gl; + }; + ContextWebGL.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { + if (red === void 0) { red = 0; } + if (green === void 0) { green = 0; } + if (blue === void 0) { blue = 0; } + if (alpha === void 0) { alpha = 1; } + if (depth === void 0) { depth = 1; } + if (stencil === void 0) { stencil = 0; } + if (mask === void 0) { mask = ContextGLClearMask.ALL; } + if (!this._drawing) { + this.updateBlendStatus(); + this._drawing = true; + } + var glmask = 0; + if (mask & ContextGLClearMask.COLOR) + glmask |= this._gl.COLOR_BUFFER_BIT; + if (mask & ContextGLClearMask.STENCIL) + glmask |= this._gl.STENCIL_BUFFER_BIT; + if (mask & ContextGLClearMask.DEPTH) + glmask |= this._gl.DEPTH_BUFFER_BIT; + this._gl.clearColor(red, green, blue, alpha); + this._gl.clearDepth(depth); + this._gl.clearStencil(stencil); + this._gl.clear(glmask); + }; + ContextWebGL.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } + _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); + if (enableDepthAndStencil) { + this._gl.enable(this._gl.STENCIL_TEST); + this._gl.enable(this._gl.DEPTH_TEST); + } + this._gl.viewport['width'] = width; + this._gl.viewport['height'] = height; + this._gl.viewport(0, 0, width, height); + }; + ContextWebGL.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + var texture = new CubeTextureWebGL(this._gl, size); + this._textureList.push(texture); + return texture; + }; + ContextWebGL.prototype.createIndexBuffer = function (numIndices) { + var indexBuffer = new IndexBufferWebGL(this._gl, numIndices); + this._indexBufferList.push(indexBuffer); + return indexBuffer; + }; + ContextWebGL.prototype.createProgram = function () { + var program = new ProgramWebGL(this._gl); + this._programList.push(program); + return program; + }; + ContextWebGL.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { + if (streamingLevels === void 0) { streamingLevels = 0; } + //TODO streaming + var texture = new TextureWebGL(this._gl, width, height); + this._textureList.push(texture); + return texture; + }; + ContextWebGL.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { + var vertexBuffer = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex); + this._vertexBufferList.push(vertexBuffer); + return vertexBuffer; + }; + ContextWebGL.prototype.dispose = function () { + var i; + for (i = 0; i < this._indexBufferList.length; ++i) + this._indexBufferList[i].dispose(); + this._indexBufferList = null; + for (i = 0; i < this._vertexBufferList.length; ++i) + this._vertexBufferList[i].dispose(); + this._vertexBufferList = null; + for (i = 0; i < this._textureList.length; ++i) + this._textureList[i].dispose(); + this._textureList = null; + for (i = 0; i < this._programList.length; ++i) + this._programList[i].dispose(); + for (i = 0; i < this._samplerStates.length; ++i) + this._samplerStates[i] = null; + this._programList = null; + }; + ContextWebGL.prototype.drawToBitmapData = function (destination) { + var arrayBuffer = new ArrayBuffer(destination.width * destination.height * 4); + this._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer)); + var byteArray = new ByteArray(); + byteArray.setArrayBuffer(arrayBuffer); + destination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray); + }; + ContextWebGL.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { + if (firstIndex === void 0) { firstIndex = 0; } + if (numTriangles === void 0) { numTriangles = -1; } + if (!this._drawing) + throw "Need to clear before drawing if the buffer has not been cleared since the last present() call."; + this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer); + this._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1) ? indexBuffer.numIndices : numTriangles * 3, this._gl.UNSIGNED_SHORT, firstIndex); + }; + ContextWebGL.prototype.present = function () { + this._drawing = false; + }; + ContextWebGL.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { + this._blendEnabled = true; + this._blendSourceFactor = this._blendFactorDictionary[sourceFactor]; + this._blendDestinationFactor = this._blendFactorDictionary[destinationFactor]; + this.updateBlendStatus(); + }; + ContextWebGL.prototype.setColorMask = function (red, green, blue, alpha) { + this._gl.colorMask(red, green, blue, alpha); + }; + ContextWebGL.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { + if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } + if (triangleFaceToCull == ContextGLTriangleFace.NONE) { + this._gl.disable(this._gl.CULL_FACE); + } + else { + this._gl.enable(this._gl.CULL_FACE); + switch (triangleFaceToCull) { + case ContextGLTriangleFace.BACK: + this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.FRONT : this._gl.BACK); + break; + case ContextGLTriangleFace.FRONT: + this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.BACK : this._gl.FRONT); + break; + case ContextGLTriangleFace.FRONT_AND_BACK: + this._gl.cullFace(this._gl.FRONT_AND_BACK); + break; + default: + throw "Unknown ContextGLTriangleFace type."; + } + } + }; + // TODO ContextGLCompareMode + ContextWebGL.prototype.setDepthTest = function (depthMask, passCompareMode) { + this._gl.depthFunc(this._depthTestDictionary[passCompareMode]); + this._gl.depthMask(depthMask); + }; + ContextWebGL.prototype.setProgram = function (program) { + //TODO decide on construction/reference resposibilities + this._currentProgram = program; + program.focusProgram(); + }; + ContextWebGL.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { + //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); + if (transposedMatrix === void 0) { transposedMatrix = false; } + //TODO remove special case for WebGL matrix calls? + var d = matrix.rawData; + if (transposedMatrix) { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); + } + else { + this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); + this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); + } + }; + ContextWebGL.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { + if (numRegisters === void 0) { numRegisters = -1; } + var locationName = this._uniformLocationNameDictionary[programType]; + var startIndex; + for (var i = 0; i < numRegisters; i++) { + startIndex = i * 4; + this._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]); + } + }; + ContextWebGL.prototype.setScissorRectangle = function (rectangle) { + if (!rectangle) { + this._gl.disable(this._gl.SCISSOR_TEST); + return; + } + this._gl.enable(this._gl.SCISSOR_TEST); + this._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height); + }; + ContextWebGL.prototype.setTextureAt = function (sampler, texture) { + var samplerState = this._samplerStates[sampler]; + if (this._activeTexture != sampler && (texture || samplerState.type)) { + this._activeTexture = sampler; + this._gl.activeTexture(this._textureIndexDictionary[sampler]); + } + if (!texture) { + if (samplerState.type) { + this._gl.bindTexture(samplerState.type, null); + samplerState.type = null; + } + return; + } + var textureType = this._textureTypeDictionary[texture.textureType]; + samplerState.type = textureType; + this._gl.bindTexture(textureType, texture.glTexture); + this._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, "fs" + sampler), sampler); + this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap); + this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap); + this._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter); + this._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter); + }; + ContextWebGL.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { + if (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) { + this._samplerStates[sampler].wrap = this._wrapDictionary[wrap]; + this._samplerStates[sampler].filter = this._filterDictionary[filter]; + this._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter]; + } + else { + throw "Sampler is out of bounds."; + } + }; + ContextWebGL.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { + if (bufferOffset === void 0) { bufferOffset = 0; } + if (format === void 0) { format = null; } + var location = this._currentProgram ? this._gl.getAttribLocation(this._currentProgram.glProgram, "va" + index) : -1; + if (!buffer) { + if (location > -1) + this._gl.disableVertexAttribArray(location); + return; + } + this._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer); + this._gl.enableVertexAttribArray(location); + this._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex * 4, bufferOffset * 4); + }; + ContextWebGL.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { + if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } + if (antiAlias === void 0) { antiAlias = 0; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + var texture = target; + var frameBuffer = texture.frameBuffer; + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer); + if (enableDepthAndStencil) { + this._gl.enable(this._gl.STENCIL_TEST); + this._gl.enable(this._gl.DEPTH_TEST); + } + this._gl.viewport(0, 0, texture.width, texture.height); + }; + ContextWebGL.prototype.setRenderToBackBuffer = function () { + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); + }; + ContextWebGL.prototype.updateBlendStatus = function () { + if (this._blendEnabled) { + this._gl.enable(this._gl.BLEND); + this._gl.blendEquation(this._gl.FUNC_ADD); + this._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor); + } + else { + this._gl.disable(this._gl.BLEND); + } + }; + ContextWebGL.MAX_SAMPLERS = 8; + ContextWebGL.modulo = 0; + return ContextWebGL; +})(ContextGLBase); +module.exports = ContextWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2NvbnRleHR3ZWJnbC50cyJdLCJuYW1lcyI6WyJDb250ZXh0V2ViR0wiLCJDb250ZXh0V2ViR0wuY29uc3RydWN0b3IiLCJDb250ZXh0V2ViR0wuY29udGFpbmVyIiwiQ29udGV4dFdlYkdMLmdsIiwiQ29udGV4dFdlYkdMLmNsZWFyIiwiQ29udGV4dFdlYkdMLmNvbmZpZ3VyZUJhY2tCdWZmZXIiLCJDb250ZXh0V2ViR0wuY3JlYXRlQ3ViZVRleHR1cmUiLCJDb250ZXh0V2ViR0wuY3JlYXRlSW5kZXhCdWZmZXIiLCJDb250ZXh0V2ViR0wuY3JlYXRlUHJvZ3JhbSIsIkNvbnRleHRXZWJHTC5jcmVhdGVUZXh0dXJlIiwiQ29udGV4dFdlYkdMLmNyZWF0ZVZlcnRleEJ1ZmZlciIsIkNvbnRleHRXZWJHTC5kaXNwb3NlIiwiQ29udGV4dFdlYkdMLmRyYXdUb0JpdG1hcERhdGEiLCJDb250ZXh0V2ViR0wuZHJhd1RyaWFuZ2xlcyIsIkNvbnRleHRXZWJHTC5wcmVzZW50IiwiQ29udGV4dFdlYkdMLnNldEJsZW5kRmFjdG9ycyIsIkNvbnRleHRXZWJHTC5zZXRDb2xvck1hc2siLCJDb250ZXh0V2ViR0wuc2V0Q3VsbGluZyIsIkNvbnRleHRXZWJHTC5zZXREZXB0aFRlc3QiLCJDb250ZXh0V2ViR0wuc2V0UHJvZ3JhbSIsIkNvbnRleHRXZWJHTC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeCIsIkNvbnRleHRXZWJHTC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5IiwiQ29udGV4dFdlYkdMLnNldFNjaXNzb3JSZWN0YW5nbGUiLCJDb250ZXh0V2ViR0wuc2V0VGV4dHVyZUF0IiwiQ29udGV4dFdlYkdMLnNldFNhbXBsZXJTdGF0ZUF0IiwiQ29udGV4dFdlYkdMLnNldFZlcnRleEJ1ZmZlckF0IiwiQ29udGV4dFdlYkdMLnNldFJlbmRlclRvVGV4dHVyZSIsIkNvbnRleHRXZWJHTC5zZXRSZW5kZXJUb0Jh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Q0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDaEZBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQTtZQUNyRUEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxvQkFBb0JBLENBQUNBLFVBQVVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLENBQUNBO1lBQzdFQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0E7WUFDdkVBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxTQUFTQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUU5RUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUNwREEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxDQUFDQTtZQUVwREEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxXQUFXQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQTtZQUMvREEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxhQUFhQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBO1lBRXZFQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxpQkFBaUJBLENBQUNBLE1BQU1BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLENBQUNBO1lBQ2pFQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxpQkFBaUJBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBO1lBRXZFQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDeEVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxPQUFPQSxDQUFDQTtZQUUxRUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxzQkFBc0JBLENBQUNBLE1BQU1BLENBQUNBLEdBQUdBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1lBQzNFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxVQUFVQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxxQkFBcUJBLENBQUNBO1lBQzVIQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxTQUFTQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxvQkFBb0JBLENBQUNBO1lBQzFIQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUMxR0EsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxzQkFBc0JBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1lBQzVFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxVQUFVQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxzQkFBc0JBLENBQUNBO1lBQzlIQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxTQUFTQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxxQkFBcUJBLENBQUNBO1lBQzVIQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxPQUFPQSxD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QUFkQTtRQUVDVyxJQUFJQSxDQUFRQSxDQUFDQTtRQUNiQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQ2hEQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBRXBDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLElBQUlBLENBQUNBO1FBRTdCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQ2pEQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLEdBQUdBLElBQUlBLENBQUNBO1FBRTlCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxNQUFNQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUM1Q0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFaENBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLElBQUlBLENBQUNBO1FBRXpCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxNQUFNQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUM1Q0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFaENBLEdBQUdBLENBQUNBLENBQUNBLENB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Q0E7WUFDdEJBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDOUZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbEdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbkdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDcEdBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDN0ZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDakdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbkdBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsV0FBV0EsRUFBRUEsYUFBYUEsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdEdBLENBQUNBO0lBQ0ZBLENBQUNBO0lBSU1wQixt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O1lBRURBLE1BQU1BLENBQUNBO1FBQ1JBLENBQUNBO1FBRURBLElBQUlBLFdBQVdBLEdBQVVBLElBQUlBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFDMUVBLFlBQVlBLENBQUNBLElBQUlBLEdBQUdBLFdBQVdBLENBQUNBO1FBRWhDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxXQUFXQSxFQUFFQSxPQUFPQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQTtRQUVyREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxTQUFTQSxFQUFFQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxFQUFFQSxPQUFPQSxDQUFDQSxDQUFDQTtRQUV6R0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsRUFBRUEsWUFBWUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDaEZBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBLFdBQVdBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGNBQWNBLEVBQUVBLFlBQVlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRWhGQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxrQkFBa0JBLEVBQUVBLFlBQVlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBO1FBQ3RGQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxrQkFBa0JBLEVBQUVBLFlBQVlBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBO0lBQzFGQSxD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Q0E7UUFDM0VBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBQ2xDQSxDQUFDQTtJQUNGQSxDQUFDQTtJQTVaYTVCLHlCQUFZQSxHQUFVQSxDQUFDQSxDQUFDQTtJQThTeEJBLG1CQUFNQSxHQUFVQSxDQUFDQSxDQUFDQTtJQStHakNBLG1CQUFDQTtBQUFEQSxDQXJiQSxBQXFiQ0EsRUFyYjBCLGFBQWEsRUFxYnZDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImJhc2UvQ29udGV4dFdlYkdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xCbGVuZEZhY3Rvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTEJsZW5kRmFjdG9yXCIpO1xuaW1wb3J0IENvbnRleHRHTENsZWFyTWFza1x0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENsZWFyTWFza1wiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xQcm9ncmFtVHlwZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFByb2dyYW1UeXBlXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUcmlhbmdsZUZhY2VcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVHJpYW5nbGVGYWNlXCIpO1xuaW1wb3J0IENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgQ3ViZVRleHR1cmVXZWJHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ3ViZVRleHR1cmVXZWJHTFwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBJbmRleEJ1ZmZlcldlYkdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JbmRleEJ1ZmZlcldlYkdMXCIpO1xuaW1wb3J0IFByb2dyYW1XZWJHTFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Qcm9ncmFtV2ViR0xcIik7XG5pbXBvcnQgVGV4dHVyZUJhc2VXZWJHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvVGV4dHVyZUJhc2VXZWJHTFwiKTtcbmltcG9ydCBUZXh0dXJlV2ViR0xcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvVGV4dHVyZVdlYkdMXCIpO1xuaW1wb3J0IFNhbXBsZXJTdGF0ZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TYW1wbGVyU3RhdGVcIik7XG5pbXBvcnQgVmVydGV4QnVmZmVyV2ViR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9WZXJ0ZXhCdWZmZXJXZWJHTFwiKTtcblxuY2xhc3MgQ29udGV4dFdlYkdMIGV4dGVuZHMgQ29udGV4dEdMQmFzZSBpbXBsZW1lbnRzIElDb250ZXh0U3RhZ2VHTFxue1xuXHRwcml2YXRlIF9ibGVuZEZhY3RvckRpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9kZXB0aFRlc3REaWN0aW9uYXJ5Ok9iamVjdCA9IG5ldyBPYmplY3QoKTtcblx0cHJpdmF0ZSBfdGV4dHVyZUluZGV4RGljdGlvbmFyeTpBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oOCk7XG5cdHByaXZhdGUgX3RleHR1cmVUeXBlRGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX3dyYXBEaWN0aW9uYXJ5Ok9iamVjdCA9IG5ldyBPYmplY3QoKTtcblx0cHJpdmF0ZSBfZmlsdGVyRGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX21pcG1hcEZpbHRlckRpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF91bmlmb3JtTG9jYXRpb25OYW1lRGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdHByaXZhdGUgX2RyYXdpbmc6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfYmxlbmRFbmFibGVkOmJvb2xlYW47XG5cdHByaXZhdGUgX2JsZW5kU291cmNlRmFjdG9yOm51bWJlcjtcblx0cHJpdmF0ZSBfYmxlbmREZXN0aW5hdGlvbkZhY3RvcjpudW1iZXI7XG5cblx0cHJpdmF0ZSBfaW5kZXhCdWZmZXJMaXN0OkFycmF5PEluZGV4QnVmZmVyV2ViR0w+ID0gbmV3IEFycmF5PEluZGV4QnVmZmVyV2ViR0w+KCk7XG5cdHByaXZhdGUgX3ZlcnRleEJ1ZmZlckxpc3Q6QXJyYXk8VmVydGV4QnVmZmVyV2ViR0w+ID0gbmV3IEFycmF5PFZlcnRleEJ1ZmZlcldlYkdMPigpO1xuXHRwcml2YXRlIF90ZXh0dXJlTGlzdDpBcnJheTxUZXh0dXJlQmFzZVdlYkdMPiA9IG5ldyBBcnJheTxUZXh0dXJlQmFzZVdlYkdMPigpO1xuXHRwcml2YXRlIF9wcm9ncmFtTGlzdDpBcnJheTxQcm9ncmFtV2ViR0w+ID0gbmV3IEFycmF5PFByb2dyYW1XZWJHTD4oKTtcblxuXHRwcml2YXRlIF9zYW1wbGVyU3RhdGVzOkFycmF5PFNhbXBsZXJTdGF0ZT4gPSBuZXcgQXJyYXk8U2FtcGxlclN0YXRlPig4KTtcblxuXHRwdWJsaWMgc3RhdGljIE1BWF9TQU1QTEVSUzpudW1iZXIgPSA4O1xuXG5cdC8vQHByb3RlY3RlZFxuXHRwdWJsaWMgX2dsOldlYkdMUmVuZGVyaW5nQ29udGV4dDtcblxuXHQvL0Bwcm90ZWN0ZWRcblx0cHVibGljIF9jdXJyZW50UHJvZ3JhbTpQcm9ncmFtV2ViR0w7XG5cdHByaXZhdGUgX2FjdGl2ZVRleHR1cmU6bnVtYmVyO1xuXG5cblx0cHVibGljIGdldCBjb250YWluZXIoKTpIVE1MRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BDb250YWluZXI7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihjYW52YXM6SFRNTENhbnZhc0VsZW1lbnQsIHN0YWdlSW5kZXg6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoc3RhZ2VJbmRleCk7XG5cblx0XHR0aGlzLl9wQ29udGFpbmVyID0gY2FudmFzO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2dsID0gPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIiwgeyBwcmVtdWx0aXBsaWVkQWxwaGE6ZmFsc2UsIGFscGhhOmZhbHNlIH0pO1xuXG5cdFx0XHRpZiAoIXRoaXMuX2dsKVxuXHRcdFx0XHR0aGlzLl9nbCA9IDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIiwgeyBwcmVtdWx0aXBsaWVkQWxwaGE6ZmFsc2UsIGFscGhhOmZhbHNlIH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vdGhpcy5kaXNwYXRjaEV2ZW50KCBuZXcgYXdheS5ldmVudHMuQXdheUV2ZW50KCBhd2F5LmV2ZW50cy5Bd2F5RXZlbnQuSU5JVElBTElaRV9GQUlMRUQsIGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9nbCkge1xuXHRcdFx0Ly90aGlzLmRpc3BhdGNoRXZlbnQoIG5ldyBhd2F5LmV2ZW50cy5Bd2F5RXZlbnQoIGF3YXkuZXZlbnRzLkF3YXlFdmVudC5JTklUSUFMSVpFX1NVQ0NFU1MgKSApO1xuXHRcdFx0Ly9zZXR1cCBzaG9ydGN1dCBkaWN0aW9uYXJpZXNcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5PTkVdID0gdGhpcy5fZ2wuT05FO1xuXHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W0NvbnRleHRHTEJsZW5kRmFjdG9yLkRFU1RJTkFUSU9OX0FMUEhBXSA9IHRoaXMuX2dsLkRTVF9BTFBIQTtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5ERVNUSU5BVElPTl9DT0xPUl0gPSB0aGlzLl9nbC5EU1RfQ09MT1I7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FXSA9IHRoaXMuX2dsLk9ORTtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5PTkVfTUlOVVNfREVTVElOQVRJT05fQUxQSEFdID0gdGhpcy5fZ2wuT05FX01JTlVTX0RTVF9BTFBIQTtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5PTkVfTUlOVVNfREVTVElOQVRJT05fQ09MT1JdID0gdGhpcy5fZ2wuT05FX01JTlVTX0RTVF9DT0xPUjtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5PTkVfTUlOVVNfU09VUkNFX0FMUEhBXSA9IHRoaXMuX2dsLk9ORV9NSU5VU19TUkNfQUxQSEE7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FX01JTlVTX1NPVVJDRV9DT0xPUl0gPSB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0NPTE9SO1xuXHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W0NvbnRleHRHTEJsZW5kRmFjdG9yLlNPVVJDRV9BTFBIQV0gPSB0aGlzLl9nbC5TUkNfQUxQSEE7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuU09VUkNFX0NPTE9SXSA9IHRoaXMuX2dsLlNSQ19DT0xPUjtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPXSA9IHRoaXMuX2dsLlpFUk87XG5cblx0XHRcdHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbQ29udGV4dEdMQ29tcGFyZU1vZGUuQUxXQVlTXSA9IHRoaXMuX2dsLkFMV0FZUztcblx0XHRcdHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbQ29udGV4dEdMQ29tcGFyZU1vZGUuRVFVQUxdID0gdGhpcy5fZ2wuRVFVQUw7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkdSRUFURVJdID0gdGhpcy5fZ2wuR1JFQVRFUjtcblx0XHRcdHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbQ29udGV4dEdMQ29tcGFyZU1vZGUuR1JFQVRFUl9FUVVBTF0gPSB0aGlzLl9nbC5HRVFVQUw7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NdID0gdGhpcy5fZ2wuTEVTUztcblx0XHRcdHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTF0gPSB0aGlzLl9nbC5MRVFVQUw7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLk5FVkVSXSA9IHRoaXMuX2dsLk5FVkVSO1xuXHRcdFx0dGhpcy5fZGVwdGhUZXN0RGljdGlvbmFyeVtDb250ZXh0R0xDb21wYXJlTW9kZS5OT1RfRVFVQUxdID0gdGhpcy5fZ2wuTk9URVFVQUw7XG5cblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbMF0gPSB0aGlzLl9nbC5URVhUVVJFMDtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbMV0gPSB0aGlzLl9nbC5URVhUVVJFMTtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbMl0gPSB0aGlzLl9nbC5URVhUVVJFMjtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbM10gPSB0aGlzLl9nbC5URVhUVVJFMztcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbNF0gPSB0aGlzLl9nbC5URVhUVVJFNDtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbNV0gPSB0aGlzLl9nbC5URVhUVVJFNTtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbNl0gPSB0aGlzLl9nbC5URVhUVVJFNjtcblx0XHRcdHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbN10gPSB0aGlzLl9nbC5URVhUVVJFNztcblxuXHRcdFx0dGhpcy5fdGV4dHVyZVR5cGVEaWN0aW9uYXJ5W1widGV4dHVyZTJkXCJdID0gdGhpcy5fZ2wuVEVYVFVSRV8yRDtcblx0XHRcdHRoaXMuX3RleHR1cmVUeXBlRGljdGlvbmFyeVtcInRleHR1cmVDdWJlXCJdID0gdGhpcy5fZ2wuVEVYVFVSRV9DVUJFX01BUDtcblxuXHRcdFx0dGhpcy5fd3JhcERpY3Rpb25hcnlbQ29udGV4dEdMV3JhcE1vZGUuUkVQRUFUXSA9IHRoaXMuX2dsLlJFUEVBVDtcblx0XHRcdHRoaXMuX3dyYXBEaWN0aW9uYXJ5W0NvbnRleHRHTFdyYXBNb2RlLkNMQU1QXSA9IHRoaXMuX2dsLkNMQU1QX1RPX0VER0U7XG5cblx0XHRcdHRoaXMuX2ZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVJdID0gdGhpcy5fZ2wuTElORUFSO1xuXHRcdFx0dGhpcy5fZmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1RdID0gdGhpcy5fZ2wuTkVBUkVTVDtcblxuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUl0gPSBuZXcgT2JqZWN0KCk7XG5cdFx0XHR0aGlzLl9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5W0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSXVtDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTkVBUkVTVF0gPSB0aGlzLl9nbC5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XG5cdFx0XHR0aGlzLl9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5W0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSXVtDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTElORUFSXSA9IHRoaXMuX2dsLkxJTkVBUl9NSVBNQVBfTElORUFSO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUl1bQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkVdID0gdGhpcy5fZ2wuTElORUFSO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1RdID0gbmV3IE9iamVjdCgpO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1RdW0NvbnRleHRHTE1pcEZpbHRlci5NSVBORUFSRVNUXSA9IHRoaXMuX2dsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1Q7XG5cdFx0XHR0aGlzLl9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5W0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVF1bQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUl0gPSB0aGlzLl9nbC5ORUFSRVNUX01JUE1BUF9MSU5FQVI7XG5cdFx0XHR0aGlzLl9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5W0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVF1bQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkVdID0gdGhpcy5fZ2wuTkVBUkVTVDtcblxuXHRcdFx0dGhpcy5fdW5pZm9ybUxvY2F0aW9uTmFtZURpY3Rpb25hcnlbQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYXSA9IFwidmNcIjtcblx0XHRcdHRoaXMuX3VuaWZvcm1Mb2NhdGlvbk5hbWVEaWN0aW9uYXJ5W0NvbnRleHRHTFByb2dyYW1UeXBlLkZSQUdNRU5UXSA9IFwiZmNcIjtcblxuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfMV0gPSAxO1xuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfMl0gPSAyO1xuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfM10gPSAzO1xuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfNF0gPSA0O1xuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuQllURVNfNF0gPSA0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL3RoaXMuZGlzcGF0Y2hFdmVudCggbmV3IGF3YXkuZXZlbnRzLkF3YXlFdmVudCggYXdheS5ldmVudHMuQXdheUV2ZW50LklOSVRJQUxJWkVfRkFJTEVELCBlICkgKTtcblx0XHRcdGFsZXJ0KFwiV2ViR0wgaXMgbm90IGF2YWlsYWJsZS5cIik7XG5cdFx0fVxuXG5cdFx0Ly9kZWZhdWx0c1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IENvbnRleHRXZWJHTC5NQVhfU0FNUExFUlM7ICsraSkge1xuXHRcdFx0dGhpcy5fc2FtcGxlclN0YXRlc1tpXSA9IG5ldyBTYW1wbGVyU3RhdGUoKTtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbaV0ud3JhcCA9IHRoaXMuX2dsLlJFUEVBVDtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbaV0uZmlsdGVyID0gdGhpcy5fZ2wuTElORUFSO1xuXHRcdFx0dGhpcy5fc2FtcGxlclN0YXRlc1tpXS5taXBmaWx0ZXIgPSB0aGlzLl9nbC5MSU5FQVI7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdsKCk6V2ViR0xSZW5kZXJpbmdDb250ZXh0XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZ2w7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIocmVkOm51bWJlciA9IDAsIGdyZWVuOm51bWJlciA9IDAsIGJsdWU6bnVtYmVyID0gMCwgYWxwaGE6bnVtYmVyID0gMSwgZGVwdGg6bnVtYmVyID0gMSwgc3RlbmNpbDpudW1iZXIgPSAwLCBtYXNrOm51bWJlciA9IENvbnRleHRHTENsZWFyTWFzay5BTEwpXG5cdHtcblx0XHRpZiAoIXRoaXMuX2RyYXdpbmcpIHtcblx0XHRcdHRoaXMudXBkYXRlQmxlbmRTdGF0dXMoKTtcblx0XHRcdHRoaXMuX2RyYXdpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHZhciBnbG1hc2s6bnVtYmVyID0gMDtcblx0XHRpZiAobWFzayAmIENvbnRleHRHTENsZWFyTWFzay5DT0xPUikgZ2xtYXNrIHw9IHRoaXMuX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XG5cdFx0aWYgKG1hc2sgJiBDb250ZXh0R0xDbGVhck1hc2suU1RFTkNJTCkgZ2xtYXNrIHw9IHRoaXMuX2dsLlNURU5DSUxfQlVGRkVSX0JJVDtcblx0XHRpZiAobWFzayAmIENvbnRleHRHTENsZWFyTWFzay5ERVBUSCkgZ2xtYXNrIHw9IHRoaXMuX2dsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cblx0XHR0aGlzLl9nbC5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTtcblx0XHR0aGlzLl9nbC5jbGVhckRlcHRoKGRlcHRoKTtcblx0XHR0aGlzLl9nbC5jbGVhclN0ZW5jaWwoc3RlbmNpbCk7XG5cdFx0dGhpcy5fZ2wuY2xlYXIoZ2xtYXNrKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmVCYWNrQnVmZmVyKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgYW50aUFsaWFzOm51bWJlciwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSB0cnVlKVxuXHR7XG5cdFx0c3VwZXIuY29uZmlndXJlQmFja0J1ZmZlcih3aWR0aCwgaGVpZ2h0LCBhbnRpQWxpYXMsIGVuYWJsZURlcHRoQW5kU3RlbmNpbCk7XG5cblx0XHRpZiAoZW5hYmxlRGVwdGhBbmRTdGVuY2lsKSB7XG5cdFx0XHR0aGlzLl9nbC5lbmFibGUodGhpcy5fZ2wuU1RFTkNJTF9URVNUKTtcblx0XHRcdHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5ERVBUSF9URVNUKTtcblx0XHR9XG5cblx0XHR0aGlzLl9nbC52aWV3cG9ydFsnd2lkdGgnXSA9IHdpZHRoO1xuXHRcdHRoaXMuX2dsLnZpZXdwb3J0WydoZWlnaHQnXSA9IGhlaWdodDtcblxuXHRcdHRoaXMuX2dsLnZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUN1YmVUZXh0dXJlKHNpemU6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nLCBvcHRpbWl6ZUZvclJlbmRlclRvVGV4dHVyZTpib29sZWFuLCBzdHJlYW1pbmdMZXZlbHM6bnVtYmVyID0gMCk6Q3ViZVRleHR1cmVXZWJHTFxuXHR7XG5cdFx0dmFyIHRleHR1cmU6Q3ViZVRleHR1cmVXZWJHTCA9IG5ldyBDdWJlVGV4dHVyZVdlYkdMKHRoaXMuX2dsLCBzaXplKTtcblx0XHR0aGlzLl90ZXh0dXJlTGlzdC5wdXNoKHRleHR1cmUpO1xuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUluZGV4QnVmZmVyKG51bUluZGljZXM6bnVtYmVyKTpJbmRleEJ1ZmZlcldlYkdMXG5cdHtcblx0XHR2YXIgaW5kZXhCdWZmZXI6SW5kZXhCdWZmZXJXZWJHTCA9IG5ldyBJbmRleEJ1ZmZlcldlYkdMKHRoaXMuX2dsLCBudW1JbmRpY2VzKTtcblx0XHR0aGlzLl9pbmRleEJ1ZmZlckxpc3QucHVzaChpbmRleEJ1ZmZlcik7XG5cdFx0cmV0dXJuIGluZGV4QnVmZmVyO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVByb2dyYW0oKTpQcm9ncmFtV2ViR0xcblx0e1xuXHRcdHZhciBwcm9ncmFtOlByb2dyYW1XZWJHTCA9IG5ldyBQcm9ncmFtV2ViR0wodGhpcy5fZ2wpO1xuXHRcdHRoaXMuX3Byb2dyYW1MaXN0LnB1c2gocHJvZ3JhbSk7XG5cdFx0cmV0dXJuIHByb2dyYW07XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlVGV4dHVyZSh3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlOmJvb2xlYW4sIHN0cmVhbWluZ0xldmVsczpudW1iZXIgPSAwKTpUZXh0dXJlV2ViR0xcblx0e1xuXHRcdC8vVE9ETyBzdHJlYW1pbmdcblx0XHR2YXIgdGV4dHVyZTpUZXh0dXJlV2ViR0wgPSBuZXcgVGV4dHVyZVdlYkdMKHRoaXMuX2dsLCB3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzLl90ZXh0dXJlTGlzdC5wdXNoKHRleHR1cmUpO1xuXHRcdHJldHVybiB0ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVZlcnRleEJ1ZmZlcihudW1WZXJ0aWNlczpudW1iZXIsIGRhdGEzMlBlclZlcnRleDpudW1iZXIpOlZlcnRleEJ1ZmZlcldlYkdMXG5cdHtcblx0XHR2YXIgdmVydGV4QnVmZmVyOlZlcnRleEJ1ZmZlcldlYkdMID0gbmV3IFZlcnRleEJ1ZmZlcldlYkdMKHRoaXMuX2dsLCBudW1WZXJ0aWNlcywgZGF0YTMyUGVyVmVydGV4KTtcblx0XHR0aGlzLl92ZXJ0ZXhCdWZmZXJMaXN0LnB1c2godmVydGV4QnVmZmVyKTtcblx0XHRyZXR1cm4gdmVydGV4QnVmZmVyO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dmFyIGk6bnVtYmVyO1xuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9pbmRleEJ1ZmZlckxpc3QubGVuZ3RoOyArK2kpXG5cdFx0XHR0aGlzLl9pbmRleEJ1ZmZlckxpc3RbaV0uZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5faW5kZXhCdWZmZXJMaXN0ID0gbnVsbDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl92ZXJ0ZXhCdWZmZXJMaXN0Lmxlbmd0aDsgKytpKVxuXHRcdFx0dGhpcy5fdmVydGV4QnVmZmVyTGlzdFtpXS5kaXNwb3NlKCk7XG5cblx0XHR0aGlzLl92ZXJ0ZXhCdWZmZXJMaXN0ID0gbnVsbDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl90ZXh0dXJlTGlzdC5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3RleHR1cmVMaXN0W2ldLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3RleHR1cmVMaXN0ID0gbnVsbDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9wcm9ncmFtTGlzdC5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3Byb2dyYW1MaXN0W2ldLmRpc3Bvc2UoKTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9zYW1wbGVyU3RhdGVzLmxlbmd0aDsgKytpKVxuXHRcdFx0dGhpcy5fc2FtcGxlclN0YXRlc1tpXSA9IG51bGw7XG5cblx0XHR0aGlzLl9wcm9ncmFtTGlzdCA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgZHJhd1RvQml0bWFwRGF0YShkZXN0aW5hdGlvbjpCaXRtYXBEYXRhKVxuXHR7XG5cdFx0dmFyIGFycmF5QnVmZmVyOkFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGRlc3RpbmF0aW9uLndpZHRoKmRlc3RpbmF0aW9uLmhlaWdodCo0KTtcblxuXHRcdHRoaXMuX2dsLnJlYWRQaXhlbHMoMCwgMCwgZGVzdGluYXRpb24ud2lkdGgsIGRlc3RpbmF0aW9uLmhlaWdodCwgdGhpcy5fZ2wuUkdCQSwgdGhpcy5fZ2wuVU5TSUdORURfQllURSwgbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcblxuXHRcdHZhciBieXRlQXJyYXk6Qnl0ZUFycmF5ID0gbmV3IEJ5dGVBcnJheSgpO1xuXHRcdGJ5dGVBcnJheS5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcik7XG5cblx0XHRkZXN0aW5hdGlvbi5zZXRQaXhlbHMobmV3IFJlY3RhbmdsZSgwLCAwLCBkZXN0aW5hdGlvbi53aWR0aCwgZGVzdGluYXRpb24uaGVpZ2h0KSwgYnl0ZUFycmF5KTtcblx0fVxuXG5cdHB1YmxpYyBkcmF3VHJpYW5nbGVzKGluZGV4QnVmZmVyOkluZGV4QnVmZmVyV2ViR0wsIGZpcnN0SW5kZXg6bnVtYmVyID0gMCwgbnVtVHJpYW5nbGVzOm51bWJlciA9IC0xKVxuXHR7XG5cdFx0aWYgKCF0aGlzLl9kcmF3aW5nKVxuXHRcdFx0dGhyb3cgXCJOZWVkIHRvIGNsZWFyIGJlZm9yZSBkcmF3aW5nIGlmIHRoZSBidWZmZXIgaGFzIG5vdCBiZWVuIGNsZWFyZWQgc2luY2UgdGhlIGxhc3QgcHJlc2VudCgpIGNhbGwuXCI7XG5cblx0XHR0aGlzLl9nbC5iaW5kQnVmZmVyKHRoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEJ1ZmZlci5nbEJ1ZmZlcik7XG5cdFx0dGhpcy5fZ2wuZHJhd0VsZW1lbnRzKHRoaXMuX2dsLlRSSUFOR0xFUywgKG51bVRyaWFuZ2xlcyA9PSAtMSk/IGluZGV4QnVmZmVyLm51bUluZGljZXMgOiBudW1UcmlhbmdsZXMqMywgdGhpcy5fZ2wuVU5TSUdORURfU0hPUlQsIGZpcnN0SW5kZXgpO1xuXHR9XG5cblx0cHVibGljIHByZXNlbnQoKVxuXHR7XG5cdFx0dGhpcy5fZHJhd2luZyA9IGZhbHNlO1xuXHR9XG5cblx0cHVibGljIHNldEJsZW5kRmFjdG9ycyhzb3VyY2VGYWN0b3I6c3RyaW5nLCBkZXN0aW5hdGlvbkZhY3RvcjpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9ibGVuZEVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5fYmxlbmRTb3VyY2VGYWN0b3IgPSB0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbc291cmNlRmFjdG9yXTtcblxuXHRcdHRoaXMuX2JsZW5kRGVzdGluYXRpb25GYWN0b3IgPSB0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbZGVzdGluYXRpb25GYWN0b3JdO1xuXG5cdFx0dGhpcy51cGRhdGVCbGVuZFN0YXR1cygpO1xuXHR9XG5cblx0cHVibGljIHNldENvbG9yTWFzayhyZWQ6Ym9vbGVhbiwgZ3JlZW46Ym9vbGVhbiwgYmx1ZTpib29sZWFuLCBhbHBoYTpib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5fZ2wuY29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDdWxsaW5nKHRyaWFuZ2xlRmFjZVRvQ3VsbDpzdHJpbmcsIGNvb3JkaW5hdGVTeXN0ZW06c3RyaW5nID0gXCJsZWZ0SGFuZGVkXCIpXG5cdHtcblx0XHRpZiAodHJpYW5nbGVGYWNlVG9DdWxsID09IENvbnRleHRHTFRyaWFuZ2xlRmFjZS5OT05FKSB7XG5cdFx0XHR0aGlzLl9nbC5kaXNhYmxlKHRoaXMuX2dsLkNVTExfRkFDRSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5DVUxMX0ZBQ0UpO1xuXHRcdFx0c3dpdGNoICh0cmlhbmdsZUZhY2VUb0N1bGwpIHtcblx0XHRcdFx0Y2FzZSBDb250ZXh0R0xUcmlhbmdsZUZhY2UuQkFDSzpcblx0XHRcdFx0XHR0aGlzLl9nbC5jdWxsRmFjZSgoY29vcmRpbmF0ZVN5c3RlbSA9PSBcImxlZnRIYW5kZWRcIik/IHRoaXMuX2dsLkZST05UIDogdGhpcy5fZ2wuQkFDSyk7XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSBDb250ZXh0R0xUcmlhbmdsZUZhY2UuRlJPTlQ6XG5cdFx0XHRcdFx0dGhpcy5fZ2wuY3VsbEZhY2UoKGNvb3JkaW5hdGVTeXN0ZW0gPT0gXCJsZWZ0SGFuZGVkXCIpPyB0aGlzLl9nbC5CQUNLIDogdGhpcy5fZ2wuRlJPTlQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIENvbnRleHRHTFRyaWFuZ2xlRmFjZS5GUk9OVF9BTkRfQkFDSzpcblx0XHRcdFx0XHR0aGlzLl9nbC5jdWxsRmFjZSh0aGlzLl9nbC5GUk9OVF9BTkRfQkFDSyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgXCJVbmtub3duIENvbnRleHRHTFRyaWFuZ2xlRmFjZSB0eXBlLlwiOyAvLyBUT0RPIGVycm9yXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETyBDb250ZXh0R0xDb21wYXJlTW9kZVxuXHRwdWJsaWMgc2V0RGVwdGhUZXN0KGRlcHRoTWFzazpib29sZWFuLCBwYXNzQ29tcGFyZU1vZGU6c3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVwdGhGdW5jKHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbcGFzc0NvbXBhcmVNb2RlXSk7XG5cblx0XHR0aGlzLl9nbC5kZXB0aE1hc2soZGVwdGhNYXNrKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRQcm9ncmFtKHByb2dyYW06UHJvZ3JhbVdlYkdMKVxuXHR7XG5cdFx0Ly9UT0RPIGRlY2lkZSBvbiBjb25zdHJ1Y3Rpb24vcmVmZXJlbmNlIHJlc3Bvc2liaWxpdGllc1xuXHRcdHRoaXMuX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTtcblx0XHRwcm9ncmFtLmZvY3VzUHJvZ3JhbSgpO1xuXHR9XG5cblx0cHVibGljIHNldFByb2dyYW1Db25zdGFudHNGcm9tTWF0cml4KHByb2dyYW1UeXBlOnN0cmluZywgZmlyc3RSZWdpc3RlcjpudW1iZXIsIG1hdHJpeDpNYXRyaXgzRCwgdHJhbnNwb3NlZE1hdHJpeDpib29sZWFuID0gZmFsc2UpXG5cdHtcblx0XHQvL3RoaXMuX2dsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5fZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuX2N1cnJlbnRQcm9ncmFtLmdsUHJvZ3JhbSwgdGhpcy5fdW5pZm9ybUxvY2F0aW9uTmFtZURpY3Rpb25hcnlbcHJvZ3JhbVR5cGVdKSwgIXRyYW5zcG9zZWRNYXRyaXgsIG5ldyBGbG9hdDMyQXJyYXkobWF0cml4LnJhd0RhdGEpKTtcblxuXHRcdC8vVE9ETyByZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBXZWJHTCBtYXRyaXggY2FsbHM/XG5cdFx0dmFyIGQ6bnVtYmVyW10gPSBtYXRyaXgucmF3RGF0YTtcblx0XHRpZiAodHJhbnNwb3NlZE1hdHJpeCkge1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyLCBbIGRbMF0sIGRbNF0sIGRbOF0sIGRbMTJdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMSwgWyBkWzFdLCBkWzVdLCBkWzldLCBkWzEzXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDIsIFsgZFsyXSwgZFs2XSwgZFsxMF0sIGRbMTRdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMywgWyBkWzNdLCBkWzddLCBkWzExXSwgZFsxNV0gXSwgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciwgWyBkWzBdLCBkWzFdLCBkWzJdLCBkWzNdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMSwgWyBkWzRdLCBkWzVdLCBkWzZdLCBkWzddIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMiwgWyBkWzhdLCBkWzldLCBkWzEwXSwgZFsxMV0gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAzLCBbIGRbMTJdLCBkWzEzXSwgZFsxNF0sIGRbMTVdIF0sIDEpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgbW9kdWxvOm51bWJlciA9IDA7XG5cblx0cHVibGljIHNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGU6c3RyaW5nLCBmaXJzdFJlZ2lzdGVyOm51bWJlciwgZGF0YTpudW1iZXJbXSwgbnVtUmVnaXN0ZXJzOm51bWJlciA9IC0xKVxuXHR7XG5cdFx0dmFyIGxvY2F0aW9uTmFtZTpzdHJpbmcgPSB0aGlzLl91bmlmb3JtTG9jYXRpb25OYW1lRGljdGlvbmFyeVtwcm9ncmFtVHlwZV07XG5cdFx0dmFyIHN0YXJ0SW5kZXg6bnVtYmVyO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IG51bVJlZ2lzdGVyczsgaSsrKSB7XG5cdFx0XHRzdGFydEluZGV4ID0gaSo0O1xuXHRcdFx0dGhpcy5fZ2wudW5pZm9ybTRmKHRoaXMuX2dsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9jdXJyZW50UHJvZ3JhbS5nbFByb2dyYW0sIGxvY2F0aW9uTmFtZSArIChmaXJzdFJlZ2lzdGVyICsgaSkpLCBkYXRhW3N0YXJ0SW5kZXhdLCBkYXRhW3N0YXJ0SW5kZXggKyAxXSwgZGF0YVtzdGFydEluZGV4ICsgMl0sIGRhdGFbc3RhcnRJbmRleCArIDNdKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U2Npc3NvclJlY3RhbmdsZShyZWN0YW5nbGU6UmVjdGFuZ2xlKVxuXHR7XG5cdFx0aWYgKCFyZWN0YW5nbGUpIHtcblx0XHRcdHRoaXMuX2dsLmRpc2FibGUodGhpcy5fZ2wuU0NJU1NPUl9URVNUKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9nbC5lbmFibGUodGhpcy5fZ2wuU0NJU1NPUl9URVNUKTtcblx0XHR0aGlzLl9nbC5zY2lzc29yKHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRUZXh0dXJlQXQoc2FtcGxlcjpudW1iZXIsIHRleHR1cmU6VGV4dHVyZUJhc2VXZWJHTClcblx0e1xuXHRcdHZhciBzYW1wbGVyU3RhdGU6U2FtcGxlclN0YXRlID0gdGhpcy5fc2FtcGxlclN0YXRlc1tzYW1wbGVyXTtcblxuXHRcdGlmICh0aGlzLl9hY3RpdmVUZXh0dXJlICE9IHNhbXBsZXIgJiYgKHRleHR1cmUgfHwgc2FtcGxlclN0YXRlLnR5cGUpKSB7XG5cdFx0XHR0aGlzLl9hY3RpdmVUZXh0dXJlID0gc2FtcGxlcjtcblx0XHRcdHRoaXMuX2dsLmFjdGl2ZVRleHR1cmUodGhpcy5fdGV4dHVyZUluZGV4RGljdGlvbmFyeVtzYW1wbGVyXSk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0ZXh0dXJlKSB7XG5cdFx0XHRpZiAoc2FtcGxlclN0YXRlLnR5cGUpIHtcblx0XHRcdFx0dGhpcy5fZ2wuYmluZFRleHR1cmUoc2FtcGxlclN0YXRlLnR5cGUsIG51bGwpO1xuXHRcdFx0XHRzYW1wbGVyU3RhdGUudHlwZSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgdGV4dHVyZVR5cGU6bnVtYmVyID0gdGhpcy5fdGV4dHVyZVR5cGVEaWN0aW9uYXJ5W3RleHR1cmUudGV4dHVyZVR5cGVdO1xuXHRcdHNhbXBsZXJTdGF0ZS50eXBlID0gdGV4dHVyZVR5cGU7XG5cblx0XHR0aGlzLl9nbC5iaW5kVGV4dHVyZSh0ZXh0dXJlVHlwZSwgdGV4dHVyZS5nbFRleHR1cmUpO1xuXG5cdFx0dGhpcy5fZ2wudW5pZm9ybTFpKHRoaXMuX2dsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9jdXJyZW50UHJvZ3JhbS5nbFByb2dyYW0sIFwiZnNcIiArIHNhbXBsZXIpLCBzYW1wbGVyKTtcblxuXHRcdHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9TLCBzYW1wbGVyU3RhdGUud3JhcCk7XG5cdFx0dGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgdGhpcy5fZ2wuVEVYVFVSRV9XUkFQX1QsIHNhbXBsZXJTdGF0ZS53cmFwKTtcblxuXHRcdHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIHRoaXMuX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgc2FtcGxlclN0YXRlLmZpbHRlcik7XG5cdFx0dGhpcy5fZ2wudGV4UGFyYW1ldGVyaSh0ZXh0dXJlVHlwZSwgdGhpcy5fZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBzYW1wbGVyU3RhdGUubWlwZmlsdGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRTYW1wbGVyU3RhdGVBdChzYW1wbGVyOm51bWJlciwgd3JhcDpzdHJpbmcsIGZpbHRlcjpzdHJpbmcsIG1pcGZpbHRlcjpzdHJpbmcpOnZvaWRcblx0e1xuXHRcdGlmICgwIDw9IHNhbXBsZXIgJiYgc2FtcGxlciA8IENvbnRleHRXZWJHTC5NQVhfU0FNUExFUlMpIHtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbc2FtcGxlcl0ud3JhcCA9IHRoaXMuX3dyYXBEaWN0aW9uYXJ5W3dyYXBdO1xuXHRcdFx0dGhpcy5fc2FtcGxlclN0YXRlc1tzYW1wbGVyXS5maWx0ZXIgPSB0aGlzLl9maWx0ZXJEaWN0aW9uYXJ5W2ZpbHRlcl07XG5cdFx0XHR0aGlzLl9zYW1wbGVyU3RhdGVzW3NhbXBsZXJdLm1pcGZpbHRlciA9IHRoaXMuX21pcG1hcEZpbHRlckRpY3Rpb25hcnlbZmlsdGVyXVttaXBmaWx0ZXJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcIlNhbXBsZXIgaXMgb3V0IG9mIGJvdW5kcy5cIjtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VmVydGV4QnVmZmVyQXQoaW5kZXg6bnVtYmVyLCBidWZmZXI6VmVydGV4QnVmZmVyV2ViR0wsIGJ1ZmZlck9mZnNldDpudW1iZXIgPSAwLCBmb3JtYXQ6c3RyaW5nID0gbnVsbClcblx0e1xuXHRcdHZhciBsb2NhdGlvbjpudW1iZXIgPSB0aGlzLl9jdXJyZW50UHJvZ3JhbT8gdGhpcy5fZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5fY3VycmVudFByb2dyYW0uZ2xQcm9ncmFtLCBcInZhXCIgKyBpbmRleCkgOiAtMTtcblxuXHRcdGlmICghYnVmZmVyKSB7XG5cdFx0XHRpZiAobG9jYXRpb24gPiAtMSlcblx0XHRcdFx0dGhpcy5fZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvY2F0aW9uKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2dsLmJpbmRCdWZmZXIodGhpcy5fZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIuZ2xCdWZmZXIpO1xuXHRcdHRoaXMuX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvY2F0aW9uKTtcblx0XHR0aGlzLl9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvY2F0aW9uLCB0aGlzLl92ZXJ0ZXhCdWZmZXJEaW1lbnNpb25EaWN0aW9uYXJ5W2Zvcm1hdF0sIHRoaXMuX2dsLkZMT0FULCBmYWxzZSwgYnVmZmVyLmRhdGEzMlBlclZlcnRleCo0LCBidWZmZXJPZmZzZXQqNCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVuZGVyVG9UZXh0dXJlKHRhcmdldDpUZXh0dXJlQmFzZVdlYkdMLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbiA9IGZhbHNlLCBhbnRpQWxpYXM6bnVtYmVyID0gMCwgc3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDApXG5cdHtcblx0XHR2YXIgdGV4dHVyZTpUZXh0dXJlV2ViR0wgPSA8VGV4dHVyZVdlYkdMPiB0YXJnZXQ7XG5cdFx0dmFyIGZyYW1lQnVmZmVyOldlYkdMRnJhbWVidWZmZXIgPSB0ZXh0dXJlLmZyYW1lQnVmZmVyO1xuXHRcdHRoaXMuX2dsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXIpO1xuXG5cdFx0aWYgKGVuYWJsZURlcHRoQW5kU3RlbmNpbCkge1xuXHRcdFx0dGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLlNURU5DSUxfVEVTVCk7XG5cdFx0XHR0aGlzLl9nbC5lbmFibGUodGhpcy5fZ2wuREVQVEhfVEVTVCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZ2wudmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQgKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUb0JhY2tCdWZmZXIoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMuX2dsLkZSQU1FQlVGRkVSLCBudWxsKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQmxlbmRTdGF0dXMoKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2JsZW5kRW5hYmxlZCkge1xuXHRcdFx0dGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLkJMRU5EKTtcblx0XHRcdHRoaXMuX2dsLmJsZW5kRXF1YXRpb24odGhpcy5fZ2wuRlVOQ19BREQpO1xuXHRcdFx0dGhpcy5fZ2wuYmxlbmRGdW5jKHRoaXMuX2JsZW5kU291cmNlRmFjdG9yLCB0aGlzLl9ibGVuZERlc3RpbmF0aW9uRmFjdG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZ2wuZGlzYWJsZSh0aGlzLl9nbC5CTEVORCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCA9IENvbnRleHRXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextWebGL.ts b/lib/base/ContextWebGL.ts similarity index 91% rename from lib/core/stagegl/ContextWebGL.ts rename to lib/base/ContextWebGL.ts index 52ddbca2..18f229b1 100644 --- a/lib/core/stagegl/ContextWebGL.ts +++ b/lib/base/ContextWebGL.ts @@ -3,24 +3,24 @@ import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import Rectangle = require("awayjs-core/lib/geom/Rectangle"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -import ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); -import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import CubeTextureWebGL = require("awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import IndexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL"); -import ProgramWebGL = require("awayjs-stagegl/lib/core/stagegl/ProgramWebGL"); -import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); -import TextureWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureWebGL"); -import SamplerState = require("awayjs-stagegl/lib/core/stagegl/SamplerState"); -import VertexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +import ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); +import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import CubeTextureWebGL = require("awayjs-stagegl/lib/base/CubeTextureWebGL"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import IndexBufferWebGL = require("awayjs-stagegl/lib/base/IndexBufferWebGL"); +import ProgramWebGL = require("awayjs-stagegl/lib/base/ProgramWebGL"); +import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); +import TextureWebGL = require("awayjs-stagegl/lib/base/TextureWebGL"); +import SamplerState = require("awayjs-stagegl/lib/base/SamplerState"); +import VertexBufferWebGL = require("awayjs-stagegl/lib/base/VertexBufferWebGL"); class ContextWebGL extends ContextGLBase implements IContextStageGL { diff --git a/lib/core/stagegl/CubeTextureFlash.js b/lib/base/CubeTextureFlash.js similarity index 51% rename from lib/core/stagegl/CubeTextureFlash.js rename to lib/base/CubeTextureFlash.js index 33d26509..fd57ebb5 100755 --- a/lib/core/stagegl/CubeTextureFlash.js +++ b/lib/base/CubeTextureFlash.js @@ -6,8 +6,8 @@ var __extends = this.__extends || function (d, b) { }; var BitmapData = require("awayjs-core/lib/base/BitmapData"); var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); var CubeTextureFlash = (function (_super) { __extends(CubeTextureFlash, _super); function CubeTextureFlash(context, size, format, forRTT, streaming) { @@ -61,4 +61,4 @@ var CubeTextureFlash = (function (_super) { })(ResourceBaseFlash); module.exports = CubeTextureFlash; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY3ViZXRleHR1cmVmbGFzaC50cyJdLCJuYW1lcyI6WyJDdWJlVGV4dHVyZUZsYXNoIiwiQ3ViZVRleHR1cmVGbGFzaC5jb25zdHJ1Y3RvciIsIkN1YmVUZXh0dXJlRmxhc2guc2l6ZSIsIkN1YmVUZXh0dXJlRmxhc2guZGlzcG9zZSIsIkN1YmVUZXh0dXJlRmxhc2gudXBsb2FkRnJvbURhdGEiLCJDdWJlVGV4dHVyZUZsYXNoLnVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxVQUFVLFdBQWUsaUNBQWlDLENBQUMsQ0FBQztBQUVuRSxJQUFPLGFBQWEsV0FBYyxxQ0FBcUMsQ0FBQyxDQUFDO0FBSXpFLElBQU8sT0FBTyxXQUFnQix5Q0FBeUMsQ0FBQyxDQUFDO0FBQ3pFLElBQU8saUJBQWlCLFdBQWEsbURBQW1ELENBQUMsQ0FBQztBQUUxRixJQUFNLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUEwQkE7SUFVL0NBLFNBVktBLGdCQUFnQkEsQ0FVVEEsT0FBc0JBLEVBQUVBLElBQVdBLEVBQUVBLE1BQWFBLEVBQUVBLE1BQWNBLEVBQUVBLFNBQXlCQTtRQUF6QkMseUJBQXlCQSxHQUF6QkEsaUJBQXlCQTtRQUV4R0EsaUJBQU9BLENBQUNBO1FBRVJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVsQkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsZUFBZUEsRUFBRUEsQ0FBQ0EsTUFBTUEsR0FBRUEsT0FBT0EsQ0FBQ0EsU0FBU0EsR0FBR0EsT0FBT0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsR0FBR0EsR0FBR0EsR0FBR0EsU0FBU0EsR0FBR0EsR0FBR0EsR0FBR0EsTUFBTUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDdEtBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUNuQ0EsQ0FBQ0E7SUFmREQsc0JBQVdBLGtDQUFJQTthQUFmQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQTtRQUNuQkEsQ0FBQ0E7OztPQUFBRjtJQWNNQSxrQ0FBT0EsR0FBZEE7UUFFQ0csSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxFQUFFQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN0R0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUlNSCx5Q0FBY0EsR0FBckJBLFVBQXNCQSxJQUFRQSxFQUFFQSxJQUFXQSxFQUFFQSxRQUFtQkE7UUFBbkJJLHdCQUFtQkEsR0FBbkJBLFlBQW1CQTtRQUUvREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsWUFBWUEsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLEdBQWlCQSxJQUFLQSxDQUFDQSxTQUFTQSxDQUFDQSxJQUFJQSxDQUFDQTtRQUMzQ0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsWUFBWUEsZ0JBQWdCQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM3Q0EsSUFBSUEsR0FBR0EsR0FBR0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7WUFDM0NBLElBQUlBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO1lBQ25CQSxJQUFJQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUNwQkEsR0FBR0EsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDZEEsR0FBR0EsQ0FBQ0EsTUFBTUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDZkEsSUFBSUEsR0FBR0EsR0FBR0EsR0FBR0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDL0JBLEdBQUdBLENBQUNBLFNBQVNBLENBQUNBLElBQUlBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1lBQzFCQSxJQUFJQSxHQUFHQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQTtRQUMxQ0EsQ0FBQ0E7UUFFREEsSUFBSUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDWkEsSUFBSUEsS0FBS0EsR0FBR0EsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQTtZQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVUQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxzQkFBc0JBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLFFBQVFBLEdBQUdBLEdBQUdBLEdBQUdBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLElBQUlBLFFBQVFBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUdBLEtBQUtBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQzNLQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFTUosK0RBQW9DQSxHQUEzQ0EsVUFBNENBLElBQWNBLEVBQUVBLGVBQWVBLENBQVFBLFFBQURBLEFBQVNBLEVBQUVBLEtBQXFCQTtRQUFyQksscUJBQXFCQSxHQUFyQkEsYUFBcUJBO0lBR2xIQSxDQUFDQTtJQUNGTCx1QkFBQ0E7QUFBREEsQ0E3REEsQUE2RENBLEVBN0Q4QixpQkFBaUIsRUE2RC9DO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9DdWJlVGV4dHVyZUZsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5pbXBvcnQgQnl0ZUFycmF5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheUJhc2VcIik7XG5cbmltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0U3RhZ2UzRFwiKTtcbmltcG9ydCBJQ3ViZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ3ViZVRleHR1cmVcIik7XG5pbXBvcnQgT3BDb2Rlc1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvT3BDb2Rlc1wiKTtcbmltcG9ydCBSZXNvdXJjZUJhc2VGbGFzaFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5cbmNsYXNzIEN1YmVUZXh0dXJlRmxhc2ggZXh0ZW5kcyBSZXNvdXJjZUJhc2VGbGFzaCBpbXBsZW1lbnRzIElDdWJlVGV4dHVyZVxue1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRTdGFnZTNEO1xuXHRwcml2YXRlIF9zaXplOm51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IHNpemUoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zaXplO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0U3RhZ2UzRCwgc2l6ZTpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIGZvclJUVDpib29sZWFuLCBzdHJlYW1pbmc6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX3NpemUgPSBzaXplO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmluaXRDdWJlVGV4dHVyZSwgKGZvclJUVD8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpKSArIHNpemUgKyBcIixcIiArIHN0cmVhbWluZyArIFwiLFwiICsgZm9ybWF0ICsgXCIkXCIpO1xuXHRcdHRoaXMuX3BJZCA9IHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lBZGRSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kaXNwb3NlQ3ViZVRleHR1cmUpICsgdGhpcy5fcElkLnRvU3RyaW5nKCkgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5faVJlbW92ZVJlc291cmNlKHRoaXMpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShpbWFnZTpIVE1MSW1hZ2VFbGVtZW50LCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShkYXRhOmFueSwgc2lkZTpudW1iZXIsIG1pcGxldmVsOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEJpdG1hcERhdGEpIHtcblx0XHRcdGRhdGEgPSAoPEJpdG1hcERhdGE+IGRhdGEpLmltYWdlRGF0YS5kYXRhO1xuXHRcdH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdHZhciBjYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRcdFx0dmFyIHcgPSBkYXRhLndpZHRoO1xuXHRcdFx0dmFyIGggPSBkYXRhLmhlaWdodDtcblx0XHRcdGNhbi53aWR0aCA9IHc7XG5cdFx0XHRjYW4uaGVpZ2h0ID0gaDtcblx0XHRcdHZhciBjdHggPSBjYW4uZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdFx0Y3R4LmRyYXdJbWFnZShkYXRhLCAwLCAwKTtcblx0XHRcdGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHcsIGgpLmRhdGE7XG5cdFx0fVxuXG5cdFx0dmFyIHBvcyA9IDA7XG5cdFx0dmFyIGJ5dGVzID0gQnl0ZUFycmF5QmFzZS5pbnRlcm5hbEdldEJhc2U2NFN0cmluZyhkYXRhLmxlbmd0aCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGRhdGFbcG9zKytdO1xuXHRcdH0sIG51bGwpO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEJ5dGVzQ3ViZVRleHR1cmUpICsgdGhpcy5fcElkICsgXCIsXCIgKyBtaXBsZXZlbCArIFwiLFwiICsgc2lkZSArIFwiLFwiICsgKHRoaXMuc2l6ZSA+PiBtaXBsZXZlbCkgKyBcIixcIiArIGJ5dGVzICsgXCIlXCIpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheShkYXRhOkJ5dGVBcnJheSwgYnl0ZUFycmF5T2Zmc2V0Om51bWJlciAvKnVpbnQqLywgYXN5bmM6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cblx0fVxufVxuXG5leHBvcnQgPSBDdWJlVGV4dHVyZUZsYXNoOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2N1YmV0ZXh0dXJlZmxhc2gudHMiXSwibmFtZXMiOlsiQ3ViZVRleHR1cmVGbGFzaCIsIkN1YmVUZXh0dXJlRmxhc2guY29uc3RydWN0b3IiLCJDdWJlVGV4dHVyZUZsYXNoLnNpemUiLCJDdWJlVGV4dHVyZUZsYXNoLmRpc3Bvc2UiLCJDdWJlVGV4dHVyZUZsYXNoLnVwbG9hZEZyb21EYXRhIiwiQ3ViZVRleHR1cmVGbGFzaC51cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sVUFBVSxXQUFlLGlDQUFpQyxDQUFDLENBQUM7QUFFbkUsSUFBTyxhQUFhLFdBQWMscUNBQXFDLENBQUMsQ0FBQztBQUl6RSxJQUFPLE9BQU8sV0FBZ0IsaUNBQWlDLENBQUMsQ0FBQztBQUNqRSxJQUFPLGlCQUFpQixXQUFhLDJDQUEyQyxDQUFDLENBQUM7QUFFbEYsSUFBTSxnQkFBZ0I7SUFBU0EsVUFBekJBLGdCQUFnQkEsVUFBMEJBO0lBVS9DQSxTQVZLQSxnQkFBZ0JBLENBVVRBLE9BQXNCQSxFQUFFQSxJQUFXQSxFQUFFQSxNQUFhQSxFQUFFQSxNQUFjQSxFQUFFQSxTQUF5QkE7UUFBekJDLHlCQUF5QkEsR0FBekJBLGlCQUF5QkE7UUFFeEdBLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFbEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLGVBQWVBLEVBQUVBLENBQUNBLE1BQU1BLEdBQUVBLE9BQU9BLENBQUNBLFNBQVNBLEdBQUdBLE9BQU9BLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLFNBQVNBLEdBQUdBLEdBQUdBLEdBQUdBLE1BQU1BLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3RLQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUNwQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDbkNBLENBQUNBO0lBZkRELHNCQUFXQSxrQ0FBSUE7YUFBZkE7WUFFQ0UsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0E7UUFDbkJBLENBQUNBOzs7T0FBQUY7SUFjTUEsa0NBQU9BLEdBQWRBO1FBRUNHLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLGtCQUFrQkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDdEdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN0QkEsQ0FBQ0E7SUFJTUgseUNBQWNBLEdBQXJCQSxVQUFzQkEsSUFBUUEsRUFBRUEsSUFBV0EsRUFBRUEsUUFBbUJBO1FBQW5CSSx3QkFBbUJBLEdBQW5CQSxZQUFtQkE7UUFFL0RBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLFlBQVlBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hDQSxJQUFJQSxHQUFpQkEsSUFBS0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDM0NBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLFlBQVlBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDN0NBLElBQUlBLEdBQUdBLEdBQUdBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1lBQzNDQSxJQUFJQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUNuQkEsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDcEJBLEdBQUdBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBO1lBQ2RBLEdBQUdBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBO1lBQ2ZBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQy9CQSxHQUFHQSxDQUFDQSxTQUFTQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUMxQkEsSUFBSUEsR0FBR0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDMUNBLENBQUNBO1FBRURBLElBQUlBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQ1pBLElBQUlBLEtBQUtBLEdBQUdBLGFBQWFBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUE7WUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFVEEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxHQUFHQSxHQUFHQSxRQUFRQSxHQUFHQSxHQUFHQSxHQUFHQSxJQUFJQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxJQUFJQSxRQUFRQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFHQSxLQUFLQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUMzS0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRU1KLCtEQUFvQ0EsR0FBM0NBLFVBQTRDQSxJQUFjQSxFQUFFQSxlQUFlQSxDQUFRQSxRQUFEQSxBQUFTQSxFQUFFQSxLQUFxQkE7UUFBckJLLHFCQUFxQkEsR0FBckJBLGFBQXFCQTtJQUdsSEEsQ0FBQ0E7SUFDRkwsdUJBQUNBO0FBQURBLENBN0RBLEFBNkRDQSxFQTdEOEIsaUJBQWlCLEVBNkQvQztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJiYXNlL0N1YmVUZXh0dXJlRmxhc2guanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdG1hcERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcbmltcG9ydCBCeXRlQXJyYXlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5QmFzZVwiKTtcblxuaW1wb3J0IENvbnRleHRTdGFnZTNEXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0U3RhZ2UzRFwiKTtcbmltcG9ydCBJQ3ViZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUN1YmVUZXh0dXJlXCIpO1xuaW1wb3J0IE9wQ29kZXNcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9PcENvZGVzXCIpO1xuaW1wb3J0IFJlc291cmNlQmFzZUZsYXNoXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5cbmNsYXNzIEN1YmVUZXh0dXJlRmxhc2ggZXh0ZW5kcyBSZXNvdXJjZUJhc2VGbGFzaCBpbXBsZW1lbnRzIElDdWJlVGV4dHVyZVxue1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRTdGFnZTNEO1xuXHRwcml2YXRlIF9zaXplOm51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IHNpemUoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zaXplO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0U3RhZ2UzRCwgc2l6ZTpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIGZvclJUVDpib29sZWFuLCBzdHJlYW1pbmc6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX3NpemUgPSBzaXplO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmluaXRDdWJlVGV4dHVyZSwgKGZvclJUVD8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpKSArIHNpemUgKyBcIixcIiArIHN0cmVhbWluZyArIFwiLFwiICsgZm9ybWF0ICsgXCIkXCIpO1xuXHRcdHRoaXMuX3BJZCA9IHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lBZGRSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kaXNwb3NlQ3ViZVRleHR1cmUpICsgdGhpcy5fcElkLnRvU3RyaW5nKCkgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5faVJlbW92ZVJlc291cmNlKHRoaXMpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShpbWFnZTpIVE1MSW1hZ2VFbGVtZW50LCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShkYXRhOmFueSwgc2lkZTpudW1iZXIsIG1pcGxldmVsOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEJpdG1hcERhdGEpIHtcblx0XHRcdGRhdGEgPSAoPEJpdG1hcERhdGE+IGRhdGEpLmltYWdlRGF0YS5kYXRhO1xuXHRcdH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdHZhciBjYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRcdFx0dmFyIHcgPSBkYXRhLndpZHRoO1xuXHRcdFx0dmFyIGggPSBkYXRhLmhlaWdodDtcblx0XHRcdGNhbi53aWR0aCA9IHc7XG5cdFx0XHRjYW4uaGVpZ2h0ID0gaDtcblx0XHRcdHZhciBjdHggPSBjYW4uZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdFx0Y3R4LmRyYXdJbWFnZShkYXRhLCAwLCAwKTtcblx0XHRcdGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHcsIGgpLmRhdGE7XG5cdFx0fVxuXG5cdFx0dmFyIHBvcyA9IDA7XG5cdFx0dmFyIGJ5dGVzID0gQnl0ZUFycmF5QmFzZS5pbnRlcm5hbEdldEJhc2U2NFN0cmluZyhkYXRhLmxlbmd0aCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGRhdGFbcG9zKytdO1xuXHRcdH0sIG51bGwpO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEJ5dGVzQ3ViZVRleHR1cmUpICsgdGhpcy5fcElkICsgXCIsXCIgKyBtaXBsZXZlbCArIFwiLFwiICsgc2lkZSArIFwiLFwiICsgKHRoaXMuc2l6ZSA+PiBtaXBsZXZlbCkgKyBcIixcIiArIGJ5dGVzICsgXCIlXCIpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheShkYXRhOkJ5dGVBcnJheSwgYnl0ZUFycmF5T2Zmc2V0Om51bWJlciAvKnVpbnQqLywgYXN5bmM6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cblx0fVxufVxuXG5leHBvcnQgPSBDdWJlVGV4dHVyZUZsYXNoOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/CubeTextureFlash.ts b/lib/base/CubeTextureFlash.ts similarity index 86% rename from lib/core/stagegl/CubeTextureFlash.ts rename to lib/base/CubeTextureFlash.ts index 754dcffc..7cb95915 100644 --- a/lib/core/stagegl/CubeTextureFlash.ts +++ b/lib/base/CubeTextureFlash.ts @@ -2,10 +2,10 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); import ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class CubeTextureFlash extends ResourceBaseFlash implements ICubeTexture { diff --git a/lib/base/CubeTextureWebGL.js b/lib/base/CubeTextureWebGL.js new file mode 100755 index 00000000..b71bda0b --- /dev/null +++ b/lib/base/CubeTextureWebGL.js @@ -0,0 +1,56 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); +var CubeTextureWebGL = (function (_super) { + __extends(CubeTextureWebGL, _super); + function CubeTextureWebGL(gl, size) { + _super.call(this, gl); + this._textureSelectorDictionary = new Array(6); + this.textureType = "textureCube"; + this._size = size; + this._texture = this._gl.createTexture(); + this._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X; + this._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X; + this._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y; + this._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y; + this._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z; + this._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z; + } + CubeTextureWebGL.prototype.dispose = function () { + this._gl.deleteTexture(this._texture); + }; + CubeTextureWebGL.prototype.uploadFromData = function (data, side, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) + data = data.imageData; + this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture); + this._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); + this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null); + }; + CubeTextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { + if (async === void 0) { async = false; } + }; + Object.defineProperty(CubeTextureWebGL.prototype, "size", { + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CubeTextureWebGL.prototype, "glTexture", { + get: function () { + return this._texture; + }, + enumerable: true, + configurable: true + }); + return CubeTextureWebGL; +})(TextureBaseWebGL); +module.exports = CubeTextureWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2N1YmV0ZXh0dXJld2ViZ2wudHMiXSwibmFtZXMiOlsiQ3ViZVRleHR1cmVXZWJHTCIsIkN1YmVUZXh0dXJlV2ViR0wuY29uc3RydWN0b3IiLCJDdWJlVGV4dHVyZVdlYkdMLmRpc3Bvc2UiLCJDdWJlVGV4dHVyZVdlYkdMLnVwbG9hZEZyb21EYXRhIiwiQ3ViZVRleHR1cmVXZWJHTC51cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkiLCJDdWJlVGV4dHVyZVdlYkdMLnNpemUiLCJDdWJlVGV4dHVyZVdlYkdMLmdsVGV4dHVyZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxVQUFVLFdBQWUsaUNBQWlDLENBQUMsQ0FBQztBQUluRSxJQUFPLGdCQUFnQixXQUFjLDBDQUEwQyxDQUFDLENBQUM7QUFFakYsSUFBTSxnQkFBZ0I7SUFBU0EsVUFBekJBLGdCQUFnQkEsVUFBeUJBO0lBUzlDQSxTQVRLQSxnQkFBZ0JBLENBU1RBLEVBQXdCQSxFQUFFQSxJQUFXQTtRQUVoREMsa0JBQU1BLEVBQUVBLENBQUNBLENBQUNBO1FBUkhBLCtCQUEwQkEsR0FBaUJBLElBQUlBLEtBQUtBLENBQVNBLENBQUNBLENBQUNBLENBQUNBO1FBRWpFQSxnQkFBV0EsR0FBVUEsYUFBYUEsQ0FBQ0E7UUFPekNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxFQUFFQSxDQUFDQTtRQUV6Q0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxDQUFDQSwyQkFBMkJBLENBQUNBO1FBQ3BFQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLENBQUNBLDJCQUEyQkEsQ0FBQ0E7UUFDcEVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0EsMkJBQTJCQSxDQUFDQTtRQUNwRUEsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxDQUFDQSwyQkFBMkJBLENBQUNBO1FBQ3BFQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLENBQUNBLDJCQUEyQkEsQ0FBQ0E7UUFDcEVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0EsMkJBQTJCQSxDQUFDQTtJQUNyRUEsQ0FBQ0E7SUFFTUQsa0NBQU9BLEdBQWRBO1FBRUNFLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO0lBQ3ZDQSxDQUFDQTtJQUlNRix5Q0FBY0EsR0FBckJBLFVBQXNCQSxJQUFRQSxFQUFFQSxJQUFXQSxFQUFFQSxRQUFtQkE7UUFBbkJHLHdCQUFtQkEsR0FBbkJBLFlBQW1CQTtRQUUvREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsWUFBWUEsVUFBVUEsQ0FBQ0E7WUFDOUJBLElBQUlBLEdBQWlCQSxJQUFLQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUV0Q0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUMvREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxJQUFJQSxDQUFDQSxFQUFFQSxRQUFRQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUNqSUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUN2REEsQ0FBQ0E7SUFFTUgsK0RBQW9DQSxHQUEzQ0EsVUFBNENBLElBQWNBLEVBQUVBLGVBQWVBLENBQVFBLFFBQURBLEFBQVNBLEVBQUVBLEtBQXFCQTtRQUFyQkkscUJBQXFCQSxHQUFyQkEsYUFBcUJBO0lBR2xIQSxDQUFDQTtJQUVESixzQkFBV0Esa0NBQUlBO2FBQWZBO1lBRUNLLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO1FBQ25CQSxDQUFDQTs7O09BQUFMO0lBRURBLHNCQUFXQSx1Q0FBU0E7YUFBcEJBO1lBRUNNLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBO1FBQ3RCQSxDQUFDQTs7O09BQUFOO0lBQ0ZBLHVCQUFDQTtBQUFEQSxDQXREQSxBQXNEQ0EsRUF0RDhCLGdCQUFnQixFQXNEOUM7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiYmFzZS9DdWJlVGV4dHVyZVdlYkdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmltcG9ydCBJQ3ViZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUN1YmVUZXh0dXJlXCIpO1xuaW1wb3J0IFRleHR1cmVCYXNlV2ViR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1RleHR1cmVCYXNlV2ViR0xcIik7XG5cbmNsYXNzIEN1YmVUZXh0dXJlV2ViR0wgZXh0ZW5kcyBUZXh0dXJlQmFzZVdlYkdMIGltcGxlbWVudHMgSUN1YmVUZXh0dXJlXG57XG5cblx0cHJpdmF0ZSBfdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeTpBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oNik7XG5cblx0cHVibGljIHRleHR1cmVUeXBlOnN0cmluZyA9IFwidGV4dHVyZUN1YmVcIjtcblx0cHJpdmF0ZSBfdGV4dHVyZTpXZWJHTFRleHR1cmU7XG5cdHByaXZhdGUgX3NpemU6bnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dCwgc2l6ZTpudW1iZXIpXG5cdHtcblx0XHRzdXBlcihnbCk7XG5cdFx0dGhpcy5fc2l6ZSA9IHNpemU7XG5cdFx0dGhpcy5fdGV4dHVyZSA9IHRoaXMuX2dsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHRcdHRoaXMuX3RleHR1cmVTZWxlY3RvckRpY3Rpb25hcnlbMF0gPSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7XG5cdFx0dGhpcy5fdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeVsxXSA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDtcblx0XHR0aGlzLl90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5WzJdID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZO1xuXHRcdHRoaXMuX3RleHR1cmVTZWxlY3RvckRpY3Rpb25hcnlbM10gPSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k7XG5cdFx0dGhpcy5fdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeVs0XSA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjtcblx0XHR0aGlzLl90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5WzVdID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLl90ZXh0dXJlKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShiaXRtYXBEYXRhOkJpdG1hcERhdGEsIHNpZGU6bnVtYmVyLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIHNpZGU6bnVtYmVyLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGRhdGE6YW55LCBzaWRlOm51bWJlciwgbWlwbGV2ZWw6bnVtYmVyID0gMClcblx0e1xuXHRcdGlmIChkYXRhIGluc3RhbmNlb2YgQml0bWFwRGF0YSlcblx0XHRcdGRhdGEgPSAoPEJpdG1hcERhdGE+IGRhdGEpLmltYWdlRGF0YTtcblxuXHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX3RleHR1cmUpO1xuXHRcdHRoaXMuX2dsLnRleEltYWdlMkQodGhpcy5fdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeVtzaWRlXSwgbWlwbGV2ZWwsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGRhdGEpO1xuXHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheShkYXRhOkJ5dGVBcnJheSwgYnl0ZUFycmF5T2Zmc2V0Om51bWJlciAvKnVpbnQqLywgYXN5bmM6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBnZXQgc2l6ZSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NpemU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGdsVGV4dHVyZSgpOldlYkdMVGV4dHVyZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmU7XG5cdH1cbn1cblxuZXhwb3J0ID0gQ3ViZVRleHR1cmVXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/CubeTextureWebGL.ts b/lib/base/CubeTextureWebGL.ts similarity index 91% rename from lib/core/stagegl/CubeTextureWebGL.ts rename to lib/base/CubeTextureWebGL.ts index 36a839ed..d5f785ac 100644 --- a/lib/core/stagegl/CubeTextureWebGL.ts +++ b/lib/base/CubeTextureWebGL.ts @@ -1,8 +1,8 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); -import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); -import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); +import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); +import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); class CubeTextureWebGL extends TextureBaseWebGL implements ICubeTexture { diff --git a/lib/base/IContextStageGL.js b/lib/base/IContextStageGL.js new file mode 100755 index 00000000..2cb4a38e --- /dev/null +++ b/lib/base/IContextStageGL.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2ljb250ZXh0c3RhZ2VnbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzR3lCIiwiZmlsZSI6ImJhc2UvSUNvbnRleHRTdGFnZUdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IEN1YmVUZXh0dXJlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0N1YmVUZXh0dXJlQmFzZVwiKTtcbmltcG9ydCBSZW5kZXJUZXh0dXJlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvUmVuZGVyVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcbmltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcblxuaW1wb3J0IElDb250ZXh0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Rpc3BsYXkvSUNvbnRleHRcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEluZGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9JbmRleERhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IE1hdGVyaWFsRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbERhdGFcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBWZXJ0ZXhEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1ZlcnRleERhdGFcIik7XG5pbXBvcnQgSUN1YmVUZXh0dXJlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDdWJlVGV4dHVyZVwiKTtcbmltcG9ydCBJSW5kZXhCdWZmZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUluZGV4QnVmZmVyXCIpO1xuaW1wb3J0IElQcm9ncmFtXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVByb2dyYW1cIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZVwiKTtcbmltcG9ydCBJVGV4dHVyZUJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVRleHR1cmVCYXNlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lWZXJ0ZXhCdWZmZXJcIik7XG5cbmludGVyZmFjZSBJQ29udGV4dFN0YWdlR0wgZXh0ZW5kcyBJQ29udGV4dFxue1xuXHRzZXRSZW5kZXJUYXJnZXQodGFyZ2V0OlRleHR1cmVQcm94eUJhc2UsIGVuYWJsZURlcHRoQW5kU3RlbmNpbD86Ym9vbGVhbiwgc3VyZmFjZVNlbGVjdG9yPzpudW1iZXIpO1xuXG5cdGdldFJlbmRlclRleHR1cmUodGV4dHVyZVByb3h5OlJlbmRlclRleHR1cmUpOklUZXh0dXJlQmFzZTtcblxuXHRhY3RpdmF0ZUJ1ZmZlcihpbmRleDpudW1iZXIsIGJ1ZmZlcjpWZXJ0ZXhEYXRhLCBvZmZzZXQ6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nKTtcblxuXHRkaXNwb3NlVmVydGV4RGF0YShidWZmZXI6VmVydGV4RGF0YSk7XG5cblx0YWN0aXZhdGVNYXRlcmlhbFBhc3MobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSk7XG5cblx0YWN0aXZhdGVSZW5kZXJUZXh0dXJlKGluZGV4Om51bWJlciwgdGV4dHVyZVByb3h5OlJlbmRlclRleHR1cmUpO1xuXG5cdGFjdGl2YXRlVGV4dHVyZShpbmRleDpudW1iZXIsIHRleHR1cmVQcm94eTpUZXh0dXJlMkRCYXNlKTtcblxuXHRhY3RpdmF0ZUN1YmVUZXh0dXJlKGluZGV4Om51bWJlciwgdGV4dHVyZVByb3h5OkN1YmVUZXh0dXJlQmFzZSk7XG5cblx0Z2V0SW5kZXhCdWZmZXIoYnVmZmVyOkluZGV4RGF0YSk6SUluZGV4QnVmZmVyO1xuXG5cdGdldE1hdGVyaWFsKG1hdGVyaWFsOk1hdGVyaWFsQmFzZSwgcHJvZmlsZTpzdHJpbmcpOk1hdGVyaWFsRGF0YTtcblxuXHRkaXNwb3NlSW5kZXhEYXRhKGJ1ZmZlcjpJbmRleERhdGEpO1xuXG5cdGNsZWFyKHJlZD86bnVtYmVyLCBncmVlbj86bnVtYmVyLCBibHVlPzpudW1iZXIsIGFscGhhPzpudW1iZXIsIGRlcHRoPzpudW1iZXIsIHN0ZW5jaWw/Om51bWJlciwgbWFzaz86bnVtYmVyKTtcblxuXHRjb25maWd1cmVCYWNrQnVmZmVyKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgYW50aUFsaWFzOm51bWJlciwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsPzpib29sZWFuKTtcblxuXHRjcmVhdGVDdWJlVGV4dHVyZShzaXplOm51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzPzpudW1iZXIpOklDdWJlVGV4dHVyZTtcblxuXHRjcmVhdGVJbmRleEJ1ZmZlcihudW1JbmRpY2VzOm51bWJlcik6SUluZGV4QnVmZmVyO1xuXG5cdGNyZWF0ZVByb2dyYW0oKTpJUHJvZ3JhbTtcblxuXHRjcmVhdGVUZXh0dXJlKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzPzpudW1iZXIpOklUZXh0dXJlO1xuXG5cdGNyZWF0ZVZlcnRleEJ1ZmZlcihudW1WZXJ0aWNlczpudW1iZXIsIGRhdGEzMlBlclZlcnRleDpudW1iZXIpOklWZXJ0ZXhCdWZmZXI7XG5cblx0ZGVhY3RpdmF0ZU1hdGVyaWFsUGFzcyhtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlKTtcblxuXHRkaXNwb3NlKCk7XG5cblx0ZHJhd1RvQml0bWFwRGF0YShkZXN0aW5hdGlvbjpCaXRtYXBEYXRhKTtcblxuXHRkcmF3VHJpYW5nbGVzKGluZGV4QnVmZmVyOklJbmRleEJ1ZmZlciwgZmlyc3RJbmRleD86bnVtYmVyLCBudW1UcmlhbmdsZXM/Om51bWJlcik7XG5cblx0cHJlc2VudCgpO1xuXG5cdHNldEJsZW5kRmFjdG9ycyhzb3VyY2VGYWN0b3I6c3RyaW5nLCBkZXN0aW5hdGlvbkZhY3RvcjpzdHJpbmcpO1xuXG5cdHNldENvbG9yTWFzayhyZWQ6Ym9vbGVhbiwgZ3JlZW46Ym9vbGVhbiwgYmx1ZTpib29sZWFuLCBhbHBoYTpib29sZWFuKTtcblxuXHRzZXRDdWxsaW5nKHRyaWFuZ2xlRmFjZVRvQ3VsbDpzdHJpbmcsIGNvb3JkaW5hdGVTeXN0ZW0/OnN0cmluZyk7XG5cblx0c2V0RGVwdGhUZXN0KGRlcHRoTWFzazpib29sZWFuLCBwYXNzQ29tcGFyZU1vZGU6c3RyaW5nKTtcblxuXHRzZXRQcm9ncmFtKHByb2dyYW06SVByb2dyYW0pO1xuXG5cdHNldFByb2dyYW1Db25zdGFudHNGcm9tTWF0cml4KHByb2dyYW1UeXBlOnN0cmluZywgZmlyc3RSZWdpc3RlcjpudW1iZXIsIG1hdHJpeDpNYXRyaXgzRCwgdHJhbnNwb3NlZE1hdHJpeD86Ym9vbGVhbik7XG5cblx0c2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZTpzdHJpbmcsIGZpcnN0UmVnaXN0ZXI6bnVtYmVyLCBkYXRhOm51bWJlcltdLCBudW1SZWdpc3RlcnM/Om51bWJlcik7XG5cblx0c2V0U2FtcGxlclN0YXRlQXQoc2FtcGxlcjpudW1iZXIsIHdyYXA6c3RyaW5nLCBmaWx0ZXI6c3RyaW5nLCBtaXBmaWx0ZXI6c3RyaW5nKTtcblxuXHRzZXRTY2lzc29yUmVjdGFuZ2xlKHJlY3RhbmdsZTpSZWN0YW5nbGUpO1xuXG5cdHNldFRleHR1cmVBdChzYW1wbGVyOm51bWJlciwgdGV4dHVyZTpJVGV4dHVyZUJhc2UpO1xuXG5cdHNldFZlcnRleEJ1ZmZlckF0KGluZGV4Om51bWJlciwgYnVmZmVyOklWZXJ0ZXhCdWZmZXIsIGJ1ZmZlck9mZnNldD86bnVtYmVyLCBmb3JtYXQ/OnN0cmluZyk7XG5cblx0c2V0UmVuZGVyVG9UZXh0dXJlKHRhcmdldDpJVGV4dHVyZUJhc2UsIGVuYWJsZURlcHRoQW5kU3RlbmNpbD86Ym9vbGVhbiwgYW50aUFsaWFzPzpudW1iZXIsIHN1cmZhY2VTZWxlY3Rvcj86bnVtYmVyKTtcblxuXHRzZXRSZW5kZXJUb0JhY2tCdWZmZXIoKTtcblxuXHRjYWxjQW5pbWF0aW9uQ29kZShtYXRlcmlhbDpNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzc0RhdGE6TWF0ZXJpYWxQYXNzRGF0YSk7XG59XG5cbmV4cG9ydCA9IElDb250ZXh0U3RhZ2VHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/IContextStageGL.ts b/lib/base/IContextStageGL.ts similarity index 78% rename from lib/core/stagegl/IContextStageGL.ts rename to lib/base/IContextStageGL.ts index 670f814d..c7478505 100644 --- a/lib/core/stagegl/IContextStageGL.ts +++ b/lib/base/IContextStageGL.ts @@ -10,18 +10,18 @@ import IContext = require("awayjs-display/lib/display/IContext"); import Camera = require("awayjs-display/lib/entities/Camera"); import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); -import ICubeTexture = require("awayjs-stagegl/lib/core/stagegl/ICubeTexture"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); -import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); +import ICubeTexture = require("awayjs-stagegl/lib/base/ICubeTexture"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); +import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); interface IContextStageGL extends IContext { diff --git a/lib/base/ICubeTexture.js b/lib/base/ICubeTexture.js new file mode 100755 index 00000000..eadf1012 --- /dev/null +++ b/lib/base/ICubeTexture.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2ljdWJldGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlc0IiLCJmaWxlIjoiYmFzZS9JQ3ViZVRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdG1hcERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW1wb3J0IElUZXh0dXJlQmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZUJhc2VcIik7XG5cbmludGVyZmFjZSBJQ3ViZVRleHR1cmUgZXh0ZW5kcyBJVGV4dHVyZUJhc2Vcbntcblx0c2l6ZTpudW1iZXI7XG5cblx0dXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIHNpZGU6bnVtYmVyLCBtaXBsZXZlbD86bnVtYmVyKTtcblxuXHR1cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkoZGF0YTpCeXRlQXJyYXksIGJ5dGVBcnJheU9mZnNldDpudW1iZXIsIGFzeW5jOmJvb2xlYW4pO1xufVxuXG5leHBvcnQgPSBJQ3ViZVRleHR1cmU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ICubeTexture.ts b/lib/base/ICubeTexture.ts similarity index 84% rename from lib/core/stagegl/ICubeTexture.ts rename to lib/base/ICubeTexture.ts index 76d20fb5..4e678764 100644 --- a/lib/core/stagegl/ICubeTexture.ts +++ b/lib/base/ICubeTexture.ts @@ -1,7 +1,7 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); -import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); +import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); interface ICubeTexture extends ITextureBase { diff --git a/lib/base/IIndexBuffer.js b/lib/base/IIndexBuffer.js new file mode 100755 index 00000000..9f85ca8b --- /dev/null +++ b/lib/base/IIndexBuffer.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2lpbmRleGJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTc0IiLCJmaWxlIjoiYmFzZS9JSW5kZXhCdWZmZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElJbmRleEJ1ZmZlclxue1xuXHRudW1JbmRpY2VzOm51bWJlcjtcblxuXHR1cGxvYWRGcm9tQXJyYXkoZGF0YTpudW1iZXJbXSwgc3RhcnRPZmZzZXQ6bnVtYmVyLCBjb3VudDpudW1iZXIpO1xuXG5cdGRpc3Bvc2UoKTtcbn1cblxuZXhwb3J0ID0gSUluZGV4QnVmZmVyOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/IIndexBuffer.ts b/lib/base/IIndexBuffer.ts similarity index 100% rename from lib/core/stagegl/IIndexBuffer.ts rename to lib/base/IIndexBuffer.ts diff --git a/lib/base/IProgram.js b/lib/base/IProgram.js new file mode 100755 index 00000000..660f182e --- /dev/null +++ b/lib/base/IProgram.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2lwcm9ncmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNrQiIsImZpbGUiOiJiYXNlL0lQcm9ncmFtLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW50ZXJmYWNlIElQcm9ncmFtXG57XG5cdHVwbG9hZCh2ZXJ0ZXhQcm9ncmFtOkJ5dGVBcnJheSwgZnJhZ21lbnRQcm9ncmFtOkJ5dGVBcnJheSk7XG5cblx0ZGlzcG9zZSgpO1xufVxuXG5leHBvcnQgPSBJUHJvZ3JhbTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/IProgram.ts b/lib/base/IProgram.ts similarity index 100% rename from lib/core/stagegl/IProgram.ts rename to lib/base/IProgram.ts diff --git a/lib/base/ITexture.js b/lib/base/ITexture.js new file mode 100755 index 00000000..0d3ecaa8 --- /dev/null +++ b/lib/base/ITexture.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2l0ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVrQiIsImZpbGUiOiJiYXNlL0lUZXh0dXJlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5cbmltcG9ydCBJVGV4dHVyZUJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVRleHR1cmVCYXNlXCIpO1xuXG5pbnRlcmZhY2UgSVRleHR1cmUgZXh0ZW5kcyBJVGV4dHVyZUJhc2Vcbntcblx0d2lkdGg6bnVtYmVyO1xuXG5cdGhlaWdodDpudW1iZXI7XG5cblx0dXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0dXBsb2FkRnJvbURhdGEoaW1hZ2U6SFRNTEltYWdlRWxlbWVudCwgbWlwbGV2ZWw/Om51bWJlcik7XG5cbn1cblxuZXhwb3J0ID0gSVRleHR1cmU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ITexture.ts b/lib/base/ITexture.ts similarity index 77% rename from lib/core/stagegl/ITexture.ts rename to lib/base/ITexture.ts index bae93cf0..927063e8 100644 --- a/lib/core/stagegl/ITexture.ts +++ b/lib/base/ITexture.ts @@ -1,6 +1,6 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); -import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); +import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); interface ITexture extends ITextureBase { diff --git a/lib/base/ITextureBase.js b/lib/base/ITextureBase.js new file mode 100755 index 00000000..17a92bcd --- /dev/null +++ b/lib/base/ITextureBase.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2l0ZXh0dXJlYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLc0IiLCJmaWxlIjoiYmFzZS9JVGV4dHVyZUJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElUZXh0dXJlQmFzZVxue1xuXHRkaXNwb3NlKCk7XG59XG5cbmV4cG9ydCA9IElUZXh0dXJlQmFzZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ITextureBase.ts b/lib/base/ITextureBase.ts similarity index 100% rename from lib/core/stagegl/ITextureBase.ts rename to lib/base/ITextureBase.ts diff --git a/lib/base/IVertexBuffer.js b/lib/base/IVertexBuffer.js new file mode 100755 index 00000000..d2f2c840 --- /dev/null +++ b/lib/base/IVertexBuffer.js @@ -0,0 +1,3 @@ + + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2l2ZXJ0ZXhidWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV3VCIiwiZmlsZSI6ImJhc2UvSVZlcnRleEJ1ZmZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgSVZlcnRleEJ1ZmZlclxue1xuXHRudW1WZXJ0aWNlczpudW1iZXI7XG5cblx0ZGF0YTMyUGVyVmVydGV4Om51bWJlcjtcblxuXHR1cGxvYWRGcm9tQXJyYXkoZGF0YTpudW1iZXJbXSwgc3RhcnRWZXJ0ZXg6bnVtYmVyLCBudW1WZXJ0aWNlczpudW1iZXIpO1xuXG5cdGRpc3Bvc2UoKTtcbn1cblxuZXhwb3J0ID0gSVZlcnRleEJ1ZmZlcjsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/IVertexBuffer.ts b/lib/base/IVertexBuffer.ts similarity index 100% rename from lib/core/stagegl/IVertexBuffer.ts rename to lib/base/IVertexBuffer.ts diff --git a/lib/core/stagegl/IndexBufferFlash.js b/lib/base/IndexBufferFlash.js similarity index 52% rename from lib/core/stagegl/IndexBufferFlash.js rename to lib/base/IndexBufferFlash.js index caebb242..083572a2 100755 --- a/lib/core/stagegl/IndexBufferFlash.js +++ b/lib/base/IndexBufferFlash.js @@ -4,8 +4,8 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); var IndexBufferFlash = (function (_super) { __extends(IndexBufferFlash, _super); function IndexBufferFlash(context, numIndices) { @@ -37,4 +37,4 @@ var IndexBufferFlash = (function (_super) { })(ResourceBaseFlash); module.exports = IndexBufferFlash; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaW5kZXhidWZmZXJmbGFzaC50cyJdLCJuYW1lcyI6WyJJbmRleEJ1ZmZlckZsYXNoIiwiSW5kZXhCdWZmZXJGbGFzaC5jb25zdHJ1Y3RvciIsIkluZGV4QnVmZmVyRmxhc2gudXBsb2FkRnJvbUFycmF5IiwiSW5kZXhCdWZmZXJGbGFzaC5kaXNwb3NlIiwiSW5kZXhCdWZmZXJGbGFzaC5udW1JbmRpY2VzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFPLE9BQU8sV0FBZ0IseUNBQXlDLENBQUMsQ0FBQztBQUN6RSxJQUFPLGlCQUFpQixXQUFhLG1EQUFtRCxDQUFDLENBQUM7QUFFMUYsSUFBTSxnQkFBZ0I7SUFBU0EsVUFBekJBLGdCQUFnQkEsVUFBMEJBO0lBSy9DQSxTQUxLQSxnQkFBZ0JBLENBS1RBLE9BQXNCQSxFQUFFQSxVQUFpQkE7UUFFcERDLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsVUFBVUEsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLGVBQWVBLEVBQUVBLFVBQVVBLEdBQUdBLE9BQU9BLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBO1FBQ3BHQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUNwQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDbkNBLENBQUNBO0lBRU1ELDBDQUFlQSxHQUF0QkEsVUFBdUJBLElBQWFBLEVBQUVBLFdBQWtCQSxFQUFFQSxLQUFZQTtRQUVyRUUsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxFQUFFQSxHQUFHQSxHQUFHQSxHQUFHQSxXQUFXQSxHQUFHQSxHQUFHQSxHQUFHQSxLQUFLQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNoS0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRU1GLGtDQUFPQSxHQUFkQTtRQUVDRyxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxrQkFBa0JBLEVBQUVBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLE9BQU9BLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBO1FBQ3RHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVyQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDdEJBLENBQUNBO0lBRURILHNCQUFXQSx3Q0FBVUE7YUFBckJBO1lBRUNJLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBO1FBQ3pCQSxDQUFDQTs7O09BQUFKO0lBQ0ZBLHVCQUFDQTtBQUFEQSxDQW5DQSxBQW1DQ0EsRUFuQzhCLGlCQUFpQixFQW1DL0M7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0luZGV4QnVmZmVyRmxhc2guanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRleHRTdGFnZTNEXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRTdGFnZTNEXCIpO1xuaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lJbmRleEJ1ZmZlclwiKTtcbmltcG9ydCBPcENvZGVzXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9PcENvZGVzXCIpO1xuaW1wb3J0IFJlc291cmNlQmFzZUZsYXNoXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9SZXNvdXJjZUJhc2VGbGFzaFwiKTtcblxuY2xhc3MgSW5kZXhCdWZmZXJGbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSUluZGV4QnVmZmVyXG57XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dFN0YWdlM0Q7XG5cdHByaXZhdGUgX251bUluZGljZXM6bnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6Q29udGV4dFN0YWdlM0QsIG51bUluZGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX251bUluZGljZXMgPSBudW1JbmRpY2VzO1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0SW5kZXhCdWZmZXIsIG51bUluZGljZXMgKyBPcENvZGVzLmludE1hc2spKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0T2Zmc2V0Om51bWJlciwgY291bnQ6bnVtYmVyKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMudXBsb2FkQXJyYXlJbmRleEJ1ZmZlciwgdGhpcy5fcElkICsgT3BDb2Rlcy5pbnRNYXNrKSArIGRhdGEuam9pbigpICsgXCIjXCIgKyBzdGFydE9mZnNldCArIFwiLFwiICsgY291bnQgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpOnZvaWRcblx0e1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kaXNwb3NlSW5kZXhCdWZmZXIsIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG5cblx0cHVibGljIGdldCBudW1JbmRpY2VzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbnVtSW5kaWNlcztcblx0fVxufVxuXG5leHBvcnQgPSBJbmRleEJ1ZmZlckZsYXNoOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2luZGV4YnVmZmVyZmxhc2gudHMiXSwibmFtZXMiOlsiSW5kZXhCdWZmZXJGbGFzaCIsIkluZGV4QnVmZmVyRmxhc2guY29uc3RydWN0b3IiLCJJbmRleEJ1ZmZlckZsYXNoLnVwbG9hZEZyb21BcnJheSIsIkluZGV4QnVmZmVyRmxhc2guZGlzcG9zZSIsIkluZGV4QnVmZmVyRmxhc2gubnVtSW5kaWNlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxPQUFPLFdBQWdCLGlDQUFpQyxDQUFDLENBQUM7QUFDakUsSUFBTyxpQkFBaUIsV0FBYSwyQ0FBMkMsQ0FBQyxDQUFDO0FBRWxGLElBQU0sZ0JBQWdCO0lBQVNBLFVBQXpCQSxnQkFBZ0JBLFVBQTBCQTtJQUsvQ0EsU0FMS0EsZ0JBQWdCQSxDQUtUQSxPQUFzQkEsRUFBRUEsVUFBaUJBO1FBRXBEQyxpQkFBT0EsQ0FBQ0E7UUFFUkEsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLFVBQVVBLENBQUNBO1FBQzlCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxlQUFlQSxFQUFFQSxVQUFVQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNwR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ25DQSxDQUFDQTtJQUVNRCwwQ0FBZUEsR0FBdEJBLFVBQXVCQSxJQUFhQSxFQUFFQSxXQUFrQkEsRUFBRUEsS0FBWUE7UUFFckVFLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLHNCQUFzQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsRUFBRUEsR0FBR0EsR0FBR0EsR0FBR0EsV0FBV0EsR0FBR0EsR0FBR0EsR0FBR0EsS0FBS0EsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDaEtBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVNRixrQ0FBT0EsR0FBZEE7UUFFQ0csSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN0R0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUVESCxzQkFBV0Esd0NBQVVBO2FBQXJCQTtZQUVDSSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUN6QkEsQ0FBQ0E7OztPQUFBSjtJQUNGQSx1QkFBQ0E7QUFBREEsQ0FuQ0EsQUFtQ0NBLEVBbkM4QixpQkFBaUIsRUFtQy9DO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6ImJhc2UvSW5kZXhCdWZmZXJGbGFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGV4dFN0YWdlM0RcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRTdGFnZTNEXCIpO1xuaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JSW5kZXhCdWZmZXJcIik7XG5pbXBvcnQgT3BDb2Rlc1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL09wQ29kZXNcIik7XG5pbXBvcnQgUmVzb3VyY2VCYXNlRmxhc2hcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9SZXNvdXJjZUJhc2VGbGFzaFwiKTtcblxuY2xhc3MgSW5kZXhCdWZmZXJGbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSUluZGV4QnVmZmVyXG57XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dFN0YWdlM0Q7XG5cdHByaXZhdGUgX251bUluZGljZXM6bnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6Q29udGV4dFN0YWdlM0QsIG51bUluZGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX251bUluZGljZXMgPSBudW1JbmRpY2VzO1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0SW5kZXhCdWZmZXIsIG51bUluZGljZXMgKyBPcENvZGVzLmludE1hc2spKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0T2Zmc2V0Om51bWJlciwgY291bnQ6bnVtYmVyKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMudXBsb2FkQXJyYXlJbmRleEJ1ZmZlciwgdGhpcy5fcElkICsgT3BDb2Rlcy5pbnRNYXNrKSArIGRhdGEuam9pbigpICsgXCIjXCIgKyBzdGFydE9mZnNldCArIFwiLFwiICsgY291bnQgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpOnZvaWRcblx0e1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kaXNwb3NlSW5kZXhCdWZmZXIsIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG5cblx0cHVibGljIGdldCBudW1JbmRpY2VzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbnVtSW5kaWNlcztcblx0fVxufVxuXG5leHBvcnQgPSBJbmRleEJ1ZmZlckZsYXNoOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/IndexBufferFlash.ts b/lib/base/IndexBufferFlash.ts similarity index 75% rename from lib/core/stagegl/IndexBufferFlash.ts rename to lib/base/IndexBufferFlash.ts index 1b77781e..fd57207f 100644 --- a/lib/core/stagegl/IndexBufferFlash.ts +++ b/lib/base/IndexBufferFlash.ts @@ -1,7 +1,7 @@ -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class IndexBufferFlash extends ResourceBaseFlash implements IIndexBuffer { diff --git a/lib/base/IndexBufferWebGL.js b/lib/base/IndexBufferWebGL.js new file mode 100755 index 00000000..38cbf570 --- /dev/null +++ b/lib/base/IndexBufferWebGL.js @@ -0,0 +1,33 @@ +var IndexBufferWebGL = (function () { + function IndexBufferWebGL(gl, numIndices) { + this._gl = gl; + this._buffer = this._gl.createBuffer(); + this._numIndices = numIndices; + } + IndexBufferWebGL.prototype.uploadFromArray = function (data, startOffset, count) { + this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer); + // TODO add index offsets + this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW); + }; + IndexBufferWebGL.prototype.dispose = function () { + this._gl.deleteBuffer(this._buffer); + }; + Object.defineProperty(IndexBufferWebGL.prototype, "numIndices", { + get: function () { + return this._numIndices; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(IndexBufferWebGL.prototype, "glBuffer", { + get: function () { + return this._buffer; + }, + enumerable: true, + configurable: true + }); + return IndexBufferWebGL; +})(); +module.exports = IndexBufferWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL2luZGV4YnVmZmVyd2ViZ2wudHMiXSwibmFtZXMiOlsiSW5kZXhCdWZmZXJXZWJHTCIsIkluZGV4QnVmZmVyV2ViR0wuY29uc3RydWN0b3IiLCJJbmRleEJ1ZmZlcldlYkdMLnVwbG9hZEZyb21BcnJheSIsIkluZGV4QnVmZmVyV2ViR0wuZGlzcG9zZSIsIkluZGV4QnVmZmVyV2ViR0wubnVtSW5kaWNlcyIsIkluZGV4QnVmZmVyV2ViR0wuZ2xCdWZmZXIiXSwibWFwcGluZ3MiOiJBQUVBLElBQU0sZ0JBQWdCO0lBT3JCQSxTQVBLQSxnQkFBZ0JBLENBT1RBLEVBQXdCQSxFQUFFQSxVQUFpQkE7UUFFdERDLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBO1FBQ2RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLENBQUNBO1FBQ3ZDQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxVQUFVQSxDQUFDQTtJQUMvQkEsQ0FBQ0E7SUFFTUQsMENBQWVBLEdBQXRCQSxVQUF1QkEsSUFBYUEsRUFBRUEsV0FBa0JBLEVBQUVBLEtBQVlBO1FBRXJFRSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxvQkFBb0JBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1FBRWpFQSxBQUNBQSx5QkFEeUJBO1FBQ3pCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxvQkFBb0JBLEVBQUVBLElBQUlBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBO0lBQ2pHQSxDQUFDQTtJQUVNRixrQ0FBT0EsR0FBZEE7UUFFQ0csSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7SUFDckNBLENBQUNBO0lBRURILHNCQUFXQSx3Q0FBVUE7YUFBckJBO1lBRUNJLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBO1FBQ3pCQSxDQUFDQTs7O09BQUFKO0lBRURBLHNCQUFXQSxzQ0FBUUE7YUFBbkJBO1lBRUNLLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBO1FBQ3JCQSxDQUFDQTs7O09BQUFMO0lBQ0ZBLHVCQUFDQTtBQUFEQSxDQXBDQSxBQW9DQ0EsSUFBQTtBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJiYXNlL0luZGV4QnVmZmVyV2ViR0wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JSW5kZXhCdWZmZXJcIik7XG5cbmNsYXNzIEluZGV4QnVmZmVyV2ViR0wgaW1wbGVtZW50cyBJSW5kZXhCdWZmZXJcbntcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX251bUluZGljZXM6bnVtYmVyO1xuXHRwcml2YXRlIF9idWZmZXI6V2ViR0xCdWZmZXI7XG5cblx0Y29uc3RydWN0b3IoZ2w6V2ViR0xSZW5kZXJpbmdDb250ZXh0LCBudW1JbmRpY2VzOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2dsID0gZ2w7XG5cdFx0dGhpcy5fYnVmZmVyID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdFx0dGhpcy5fbnVtSW5kaWNlcyA9IG51bUluZGljZXM7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0T2Zmc2V0Om51bWJlciwgY291bnQ6bnVtYmVyKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9nbC5iaW5kQnVmZmVyKHRoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLl9idWZmZXIpO1xuXG5cdFx0Ly8gVE9ETyBhZGQgaW5kZXggb2Zmc2V0c1xuXHRcdHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBVaW50MTZBcnJheShkYXRhKSwgdGhpcy5fZ2wuU1RBVElDX0RSQVcpO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9nbC5kZWxldGVCdWZmZXIodGhpcy5fYnVmZmVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtSW5kaWNlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bUluZGljZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGdsQnVmZmVyKCk6V2ViR0xCdWZmZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXI7XG5cdH1cbn1cblxuZXhwb3J0ID0gSW5kZXhCdWZmZXJXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/IndexBufferWebGL.ts b/lib/base/IndexBufferWebGL.ts similarity index 90% rename from lib/core/stagegl/IndexBufferWebGL.ts rename to lib/base/IndexBufferWebGL.ts index e6cb3f55..6624da01 100644 --- a/lib/core/stagegl/IndexBufferWebGL.ts +++ b/lib/base/IndexBufferWebGL.ts @@ -1,4 +1,4 @@ -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); class IndexBufferWebGL implements IIndexBuffer { diff --git a/lib/base/OpCodes.js b/lib/base/OpCodes.js new file mode 100755 index 00000000..bce3e19f --- /dev/null +++ b/lib/base/OpCodes.js @@ -0,0 +1,52 @@ +var OpCodes = (function () { + function OpCodes() { + } + OpCodes.trueValue = 32; + OpCodes.falseValue = 33; + OpCodes.intMask = 63; + OpCodes.drawTriangles = 41; + OpCodes.setProgramConstant = 42; + OpCodes.setProgram = 43; + OpCodes.present = 44; + OpCodes.clear = 45; + OpCodes.initProgram = 46; + OpCodes.initVertexBuffer = 47; + OpCodes.initIndexBuffer = 48; + OpCodes.configureBackBuffer = 49; + OpCodes.uploadArrayIndexBuffer = 50; + OpCodes.uploadArrayVertexBuffer = 51; + OpCodes.uploadAGALBytesProgram = 52; + OpCodes.setVertexBufferAt = 53; + OpCodes.uploadBytesIndexBuffer = 54; + OpCodes.uploadBytesVertexBuffer = 55; + OpCodes.setColorMask = 56; + OpCodes.setDepthTest = 57; + OpCodes.disposeProgram = 58; + OpCodes.disposeContext = 59; + // must skip 60 '<' as it will invalidate xml being passed over the bridge + OpCodes.disposeVertexBuffer = 61; + // must skip 62 '>' as it will invalidate xml being passed over the bridge + OpCodes.disposeIndexBuffer = 63; + OpCodes.initTexture = 64; + OpCodes.setTextureAt = 65; + OpCodes.uploadBytesTexture = 66; + OpCodes.disposeTexture = 67; + OpCodes.setCulling = 68; + OpCodes.setScissorRect = 69; + OpCodes.clearScissorRect = 70; + OpCodes.setBlendFactors = 71; + OpCodes.setRenderToTexture = 72; + OpCodes.clearTextureAt = 73; + OpCodes.clearVertexBufferAt = 74; + OpCodes.setStencilActions = 75; + OpCodes.setStencilReferenceValue = 76; + OpCodes.initCubeTexture = 77; + OpCodes.disposeCubeTexture = 78; + OpCodes.uploadBytesCubeTexture = 79; + OpCodes.clearRenderToTexture = 80; + OpCodes.enableErrorChecking = 81; + return OpCodes; +})(); +module.exports = OpCodes; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL29wY29kZXMudHMiXSwibmFtZXMiOlsiT3BDb2RlcyIsIk9wQ29kZXMuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sT0FBTztJQUFiQSxTQUFNQSxPQUFPQTtJQThDYkMsQ0FBQ0E7SUE1Q2NELGlCQUFTQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUN0QkEsa0JBQVVBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3ZCQSxlQUFPQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNwQkEscUJBQWFBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzFCQSwwQkFBa0JBLEdBQVVBLEVBQUVBLENBQUNBO0lBQy9CQSxrQkFBVUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDdkJBLGVBQU9BLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3BCQSxhQUFLQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNsQkEsbUJBQVdBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3hCQSx3QkFBZ0JBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzdCQSx1QkFBZUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDNUJBLDJCQUFtQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDaENBLDhCQUFzQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDbkNBLCtCQUF1QkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDcENBLDhCQUFzQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDbkNBLHlCQUFpQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDOUJBLDhCQUFzQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDbkNBLCtCQUF1QkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDcENBLG9CQUFZQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUN6QkEsb0JBQVlBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3pCQSxzQkFBY0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDM0JBLHNCQUFjQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUN6Q0EsMEVBQTBFQTtJQUM1REEsMkJBQW1CQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM5Q0EsMEVBQTBFQTtJQUM1REEsMEJBQWtCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMvQkEsbUJBQVdBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3hCQSxvQkFBWUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDekJBLDBCQUFrQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDL0JBLHNCQUFjQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMzQkEsa0JBQVVBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3ZCQSxzQkFBY0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDM0JBLHdCQUFnQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDN0JBLHVCQUFlQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM1QkEsMEJBQWtCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMvQkEsc0JBQWNBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzNCQSwyQkFBbUJBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ2hDQSx5QkFBaUJBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzlCQSxnQ0FBd0JBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3JDQSx1QkFBZUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDNUJBLDBCQUFrQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDL0JBLDhCQUFzQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDbkNBLDRCQUFvQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDakNBLDJCQUFtQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDL0NBLGNBQUNBO0FBQURBLENBOUNBLEFBOENDQSxJQUFBO0FBRUQsQUFBaUIsaUJBQVIsT0FBTyxDQUFDIiwiZmlsZSI6ImJhc2UvT3BDb2Rlcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBPcENvZGVzXG57XG5cdHB1YmxpYyBzdGF0aWMgdHJ1ZVZhbHVlOm51bWJlciA9IDMyO1xuXHRwdWJsaWMgc3RhdGljIGZhbHNlVmFsdWU6bnVtYmVyID0gMzM7XG5cdHB1YmxpYyBzdGF0aWMgaW50TWFzazpudW1iZXIgPSA2Mztcblx0cHVibGljIHN0YXRpYyBkcmF3VHJpYW5nbGVzOm51bWJlciA9IDQxO1xuXHRwdWJsaWMgc3RhdGljIHNldFByb2dyYW1Db25zdGFudDpudW1iZXIgPSA0Mjtcblx0cHVibGljIHN0YXRpYyBzZXRQcm9ncmFtOm51bWJlciA9IDQzO1xuXHRwdWJsaWMgc3RhdGljIHByZXNlbnQ6bnVtYmVyID0gNDQ7XG5cdHB1YmxpYyBzdGF0aWMgY2xlYXI6bnVtYmVyID0gNDU7XG5cdHB1YmxpYyBzdGF0aWMgaW5pdFByb2dyYW06bnVtYmVyID0gNDY7XG5cdHB1YmxpYyBzdGF0aWMgaW5pdFZlcnRleEJ1ZmZlcjpudW1iZXIgPSA0Nztcblx0cHVibGljIHN0YXRpYyBpbml0SW5kZXhCdWZmZXI6bnVtYmVyID0gNDg7XG5cdHB1YmxpYyBzdGF0aWMgY29uZmlndXJlQmFja0J1ZmZlcjpudW1iZXIgPSA0OTtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRBcnJheUluZGV4QnVmZmVyOm51bWJlciA9IDUwO1xuXHRwdWJsaWMgc3RhdGljIHVwbG9hZEFycmF5VmVydGV4QnVmZmVyOm51bWJlciA9IDUxO1xuXHRwdWJsaWMgc3RhdGljIHVwbG9hZEFHQUxCeXRlc1Byb2dyYW06bnVtYmVyID0gNTI7XG5cdHB1YmxpYyBzdGF0aWMgc2V0VmVydGV4QnVmZmVyQXQ6bnVtYmVyID0gNTM7XG5cdHB1YmxpYyBzdGF0aWMgdXBsb2FkQnl0ZXNJbmRleEJ1ZmZlcjpudW1iZXIgPSA1NDtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRCeXRlc1ZlcnRleEJ1ZmZlcjpudW1iZXIgPSA1NTtcblx0cHVibGljIHN0YXRpYyBzZXRDb2xvck1hc2s6bnVtYmVyID0gNTY7XG5cdHB1YmxpYyBzdGF0aWMgc2V0RGVwdGhUZXN0Om51bWJlciA9IDU3O1xuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VQcm9ncmFtOm51bWJlciA9IDU4O1xuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VDb250ZXh0Om51bWJlciA9IDU5O1xuXHQvLyBtdXN0IHNraXAgNjAgJzwnIGFzIGl0IHdpbGwgaW52YWxpZGF0ZSB4bWwgYmVpbmcgcGFzc2VkIG92ZXIgdGhlIGJyaWRnZVxuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VWZXJ0ZXhCdWZmZXI6bnVtYmVyID0gNjE7XG5cdC8vIG11c3Qgc2tpcCA2MiAnPicgYXMgaXQgd2lsbCBpbnZhbGlkYXRlIHhtbCBiZWluZyBwYXNzZWQgb3ZlciB0aGUgYnJpZGdlXG5cdHB1YmxpYyBzdGF0aWMgZGlzcG9zZUluZGV4QnVmZmVyOm51bWJlciA9IDYzO1xuXHRwdWJsaWMgc3RhdGljIGluaXRUZXh0dXJlOm51bWJlciA9IDY0O1xuXHRwdWJsaWMgc3RhdGljIHNldFRleHR1cmVBdDpudW1iZXIgPSA2NTtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRCeXRlc1RleHR1cmU6bnVtYmVyID0gNjY7XG5cdHB1YmxpYyBzdGF0aWMgZGlzcG9zZVRleHR1cmU6bnVtYmVyID0gNjc7XG5cdHB1YmxpYyBzdGF0aWMgc2V0Q3VsbGluZzpudW1iZXIgPSA2ODtcblx0cHVibGljIHN0YXRpYyBzZXRTY2lzc29yUmVjdDpudW1iZXIgPSA2OTtcblx0cHVibGljIHN0YXRpYyBjbGVhclNjaXNzb3JSZWN0Om51bWJlciA9IDcwO1xuXHRwdWJsaWMgc3RhdGljIHNldEJsZW5kRmFjdG9yczpudW1iZXIgPSA3MTtcblx0cHVibGljIHN0YXRpYyBzZXRSZW5kZXJUb1RleHR1cmU6bnVtYmVyID0gNzI7XG5cdHB1YmxpYyBzdGF0aWMgY2xlYXJUZXh0dXJlQXQ6bnVtYmVyID0gNzM7XG5cdHB1YmxpYyBzdGF0aWMgY2xlYXJWZXJ0ZXhCdWZmZXJBdDpudW1iZXIgPSA3NDtcblx0cHVibGljIHN0YXRpYyBzZXRTdGVuY2lsQWN0aW9uczpudW1iZXIgPSA3NTtcblx0cHVibGljIHN0YXRpYyBzZXRTdGVuY2lsUmVmZXJlbmNlVmFsdWU6bnVtYmVyID0gNzY7XG5cdHB1YmxpYyBzdGF0aWMgaW5pdEN1YmVUZXh0dXJlOm51bWJlciA9IDc3O1xuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VDdWJlVGV4dHVyZTpudW1iZXIgPSA3ODtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRCeXRlc0N1YmVUZXh0dXJlOm51bWJlciA9IDc5O1xuXHRwdWJsaWMgc3RhdGljIGNsZWFyUmVuZGVyVG9UZXh0dXJlOm51bWJlciA9IDgwO1xuXHRwdWJsaWMgc3RhdGljIGVuYWJsZUVycm9yQ2hlY2tpbmc6bnVtYmVyID0gODE7XG59XG5cbmV4cG9ydCA9IE9wQ29kZXM7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/OpCodes.ts b/lib/base/OpCodes.ts similarity index 100% rename from lib/core/stagegl/OpCodes.ts rename to lib/base/OpCodes.ts diff --git a/lib/base/ProgramFlash.js b/lib/base/ProgramFlash.js new file mode 100755 index 00000000..9889d097 --- /dev/null +++ b/lib/base/ProgramFlash.js @@ -0,0 +1,34 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); +var ProgramFlash = (function (_super) { + __extends(ProgramFlash, _super); + function ProgramFlash(context) { + _super.call(this); + this._context = context; + this._context.addStream(String.fromCharCode(OpCodes.initProgram)); + this._pId = this._context.execute(); + this._context._iAddResource(this); + } + ProgramFlash.prototype.upload = function (vertexProgram, fragmentProgram) { + this._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + "%" + fragmentProgram.readBase64String(fragmentProgram.length) + "%"); + if (ContextStage3D.debug) + this._context.execute(); + }; + ProgramFlash.prototype.dispose = function () { + this._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask)); + this._context.execute(); + this._context._iRemoveResource(this); + this._context = null; + }; + return ProgramFlash; +})(ResourceBaseFlash); +module.exports = ProgramFlash; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3Byb2dyYW1mbGFzaC50cyJdLCJuYW1lcyI6WyJQcm9ncmFtRmxhc2giLCJQcm9ncmFtRmxhc2guY29uc3RydWN0b3IiLCJQcm9ncmFtRmxhc2gudXBsb2FkIiwiUHJvZ3JhbUZsYXNoLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQU8sY0FBYyxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFFN0UsSUFBTyxPQUFPLFdBQWdCLGlDQUFpQyxDQUFDLENBQUM7QUFDakUsSUFBTyxpQkFBaUIsV0FBYSwyQ0FBMkMsQ0FBQyxDQUFDO0FBRWxGLElBQU0sWUFBWTtJQUFTQSxVQUFyQkEsWUFBWUEsVUFBMEJBO0lBSTNDQSxTQUpLQSxZQUFZQSxDQUlMQSxPQUFzQkE7UUFFakNDLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDbEVBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUNuQ0EsQ0FBQ0E7SUFFTUQsNkJBQU1BLEdBQWJBLFVBQWNBLGFBQXVCQSxFQUFFQSxlQUF5QkE7UUFFL0RFLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLHNCQUFzQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsYUFBYUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxhQUFhQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFHQSxlQUFlQSxDQUFDQSxnQkFBZ0JBLENBQUNBLGVBQWVBLENBQUNBLE1BQU1BLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBRXhPQSxFQUFFQSxDQUFDQSxDQUFDQSxjQUFjQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUN4QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7SUFDMUJBLENBQUNBO0lBRU1GLDhCQUFPQSxHQUFkQTtRQUVDRyxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxjQUFjQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNsR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUNGSCxtQkFBQ0E7QUFBREEsQ0E5QkEsQUE4QkNBLEVBOUIwQixpQkFBaUIsRUE4QjNDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImJhc2UvUHJvZ3JhbUZsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW1wb3J0IENvbnRleHRTdGFnZTNEXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0U3RhZ2UzRFwiKTtcbmltcG9ydCBJUHJvZ3JhbVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lQcm9ncmFtXCIpO1xuaW1wb3J0IE9wQ29kZXNcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9PcENvZGVzXCIpO1xuaW1wb3J0IFJlc291cmNlQmFzZUZsYXNoXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5cbmNsYXNzIFByb2dyYW1GbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSVByb2dyYW1cbntcblx0cHJpdmF0ZSBfY29udGV4dDpDb250ZXh0U3RhZ2UzRDtcblxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OkNvbnRleHRTdGFnZTNEKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0UHJvZ3JhbSkpO1xuXHRcdHRoaXMuX3BJZCA9IHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lBZGRSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWQodmVydGV4UHJvZ3JhbTpCeXRlQXJyYXksIGZyYWdtZW50UHJvZ3JhbTpCeXRlQXJyYXkpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMudXBsb2FkQUdBTEJ5dGVzUHJvZ3JhbSwgdGhpcy5fcElkICsgT3BDb2Rlcy5pbnRNYXNrKSArIHZlcnRleFByb2dyYW0ucmVhZEJhc2U2NFN0cmluZyh2ZXJ0ZXhQcm9ncmFtLmxlbmd0aCkgKyBcIiVcIiArIGZyYWdtZW50UHJvZ3JhbS5yZWFkQmFzZTY0U3RyaW5nKGZyYWdtZW50UHJvZ3JhbS5sZW5ndGgpICsgXCIlXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZGlzcG9zZVByb2dyYW0sIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IFByb2dyYW1GbGFzaDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ProgramFlash.ts b/lib/base/ProgramFlash.ts similarity index 75% rename from lib/core/stagegl/ProgramFlash.ts rename to lib/base/ProgramFlash.ts index 56541dcd..74751f75 100644 --- a/lib/core/stagegl/ProgramFlash.ts +++ b/lib/base/ProgramFlash.ts @@ -1,9 +1,9 @@ import ByteArray = require("awayjs-core/lib/utils/ByteArray"); -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class ProgramFlash extends ResourceBaseFlash implements IProgram { diff --git a/lib/base/ProgramWebGL.js b/lib/base/ProgramWebGL.js new file mode 100755 index 00000000..10b09b6b --- /dev/null +++ b/lib/base/ProgramWebGL.js @@ -0,0 +1,51 @@ +var AGALTokenizer = require("awayjs-stagegl/lib/aglsl/AGALTokenizer"); +var AGLSLParser = require("awayjs-stagegl/lib/aglsl/AGLSLParser"); +var ProgramWebGL = (function () { + function ProgramWebGL(gl) { + this._gl = gl; + this._program = this._gl.createProgram(); + } + ProgramWebGL.prototype.upload = function (vertexProgram, fragmentProgram) { + var vertexString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram)); + var fragmentString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram)); + this._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER); + this._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER); + this._gl.shaderSource(this._vertexShader, vertexString); + this._gl.compileShader(this._vertexShader); + if (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) { + throw new Error(this._gl.getShaderInfoLog(this._vertexShader)); + return; + } + this._gl.shaderSource(this._fragmentShader, fragmentString); + this._gl.compileShader(this._fragmentShader); + if (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) { + throw new Error(this._gl.getShaderInfoLog(this._fragmentShader)); + return; + } + this._gl.attachShader(this._program, this._vertexShader); + this._gl.attachShader(this._program, this._fragmentShader); + this._gl.linkProgram(this._program); + if (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) { + throw new Error(this._gl.getProgramInfoLog(this._program)); + } + }; + ProgramWebGL.prototype.dispose = function () { + this._gl.deleteProgram(this._program); + }; + ProgramWebGL.prototype.focusProgram = function () { + this._gl.useProgram(this._program); + }; + Object.defineProperty(ProgramWebGL.prototype, "glProgram", { + get: function () { + return this._program; + }, + enumerable: true, + configurable: true + }); + ProgramWebGL._tokenizer = new AGALTokenizer(); + ProgramWebGL._aglslParser = new AGLSLParser(); + return ProgramWebGL; +})(); +module.exports = ProgramWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3Byb2dyYW13ZWJnbC50cyJdLCJuYW1lcyI6WyJQcm9ncmFtV2ViR0wiLCJQcm9ncmFtV2ViR0wuY29uc3RydWN0b3IiLCJQcm9ncmFtV2ViR0wudXBsb2FkIiwiUHJvZ3JhbVdlYkdMLmRpc3Bvc2UiLCJQcm9ncmFtV2ViR0wuZm9jdXNQcm9ncmFtIiwiUHJvZ3JhbVdlYkdMLmdsUHJvZ3JhbSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxhQUFhLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQUM1RSxJQUFPLFdBQVcsV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBSXpFLElBQU0sWUFBWTtJQVVqQkEsU0FWS0EsWUFBWUEsQ0FVTEEsRUFBd0JBO1FBRW5DQyxJQUFJQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxDQUFDQTtRQUNkQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxFQUFFQSxDQUFDQTtJQUMxQ0EsQ0FBQ0E7SUFFTUQsNkJBQU1BLEdBQWJBLFVBQWNBLGFBQXVCQSxFQUFFQSxlQUF5QkE7UUFFL0RFLElBQUlBLFlBQVlBLEdBQVVBLFlBQVlBLENBQUNBLFlBQVlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLFVBQVVBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdkhBLElBQUlBLGNBQWNBLEdBQVVBLFlBQVlBLENBQUNBLFlBQVlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLFVBQVVBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFM0hBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBO1FBQ25FQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUV2RUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsWUFBWUEsQ0FBQ0EsQ0FBQ0E7UUFDeERBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBO1FBRTNDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQy9FQSxNQUFNQSxJQUFJQSxLQUFLQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBLENBQUNBO1lBQy9EQSxNQUFNQSxDQUFDQTtRQUNSQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxFQUFFQSxjQUFjQSxDQUFDQSxDQUFDQTtRQUM1REEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFFN0NBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDakZBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDakVBLE1BQU1BLENBQUNBO1FBQ1JBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLENBQUNBLElBQUlBLENBQUNBLFFBQVFBLEVBQUVBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBO1FBQ3pEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxFQUFFQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUMzREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7UUFFcENBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDeEVBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDNURBLENBQUNBO0lBQ0ZBLENBQUNBO0lBRU1GLDhCQUFPQSxHQUFkQTtRQUVDRyxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtJQUN2Q0EsQ0FBQ0E7SUFFTUgsbUNBQVlBLEdBQW5CQTtRQUVDSSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtJQUNwQ0EsQ0FBQ0E7SUFFREosc0JBQVdBLG1DQUFTQTthQUFwQkE7WUFFQ0ssTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7UUFDdEJBLENBQUNBOzs7T0FBQUw7SUE1RGNBLHVCQUFVQSxHQUFpQkEsSUFBSUEsYUFBYUEsRUFBRUEsQ0FBQ0E7SUFDL0NBLHlCQUFZQSxHQUFlQSxJQUFJQSxXQUFXQSxFQUFFQSxDQUFDQTtJQTREN0RBLG1CQUFDQTtBQUFEQSxDQS9EQSxBQStEQ0EsSUFBQTtBQUVELEFBQXNCLGlCQUFiLFlBQVksQ0FBQyIsImZpbGUiOiJiYXNlL1Byb2dyYW1XZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmltcG9ydCBBR0FMVG9rZW5pemVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvQUdBTFRva2VuaXplclwiKTtcbmltcG9ydCBBR0xTTFBhcnNlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvQUdMU0xQYXJzZXJcIik7XG5pbXBvcnQgSVByb2dyYW1cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JUHJvZ3JhbVwiKTtcblxuXG5jbGFzcyBQcm9ncmFtV2ViR0wgaW1wbGVtZW50cyBJUHJvZ3JhbVxue1xuXHRwcml2YXRlIHN0YXRpYyBfdG9rZW5pemVyOkFHQUxUb2tlbml6ZXIgPSBuZXcgQUdBTFRva2VuaXplcigpO1xuXHRwcml2YXRlIHN0YXRpYyBfYWdsc2xQYXJzZXI6QUdMU0xQYXJzZXIgPSBuZXcgQUdMU0xQYXJzZXIoKTtcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX3Byb2dyYW06V2ViR0xQcm9ncmFtO1xuXHRwcml2YXRlIF92ZXJ0ZXhTaGFkZXI6V2ViR0xTaGFkZXI7XG5cdHByaXZhdGUgX2ZyYWdtZW50U2hhZGVyOldlYkdMU2hhZGVyO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dClcblx0e1xuXHRcdHRoaXMuX2dsID0gZ2w7XG5cdFx0dGhpcy5fcHJvZ3JhbSA9IHRoaXMuX2dsLmNyZWF0ZVByb2dyYW0oKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWQodmVydGV4UHJvZ3JhbTpCeXRlQXJyYXksIGZyYWdtZW50UHJvZ3JhbTpCeXRlQXJyYXkpXG5cdHtcblx0XHR2YXIgdmVydGV4U3RyaW5nOnN0cmluZyA9IFByb2dyYW1XZWJHTC5fYWdsc2xQYXJzZXIucGFyc2UoUHJvZ3JhbVdlYkdMLl90b2tlbml6ZXIuZGVjcmliZUFHQUxCeXRlQXJyYXkodmVydGV4UHJvZ3JhbSkpO1xuXHRcdHZhciBmcmFnbWVudFN0cmluZzpzdHJpbmcgPSBQcm9ncmFtV2ViR0wuX2FnbHNsUGFyc2VyLnBhcnNlKFByb2dyYW1XZWJHTC5fdG9rZW5pemVyLmRlY3JpYmVBR0FMQnl0ZUFycmF5KGZyYWdtZW50UHJvZ3JhbSkpO1xuXG5cdFx0dGhpcy5fdmVydGV4U2hhZGVyID0gdGhpcy5fZ2wuY3JlYXRlU2hhZGVyKHRoaXMuX2dsLlZFUlRFWF9TSEFERVIpO1xuXHRcdHRoaXMuX2ZyYWdtZW50U2hhZGVyID0gdGhpcy5fZ2wuY3JlYXRlU2hhZGVyKHRoaXMuX2dsLkZSQUdNRU5UX1NIQURFUik7XG5cblx0XHR0aGlzLl9nbC5zaGFkZXJTb3VyY2UodGhpcy5fdmVydGV4U2hhZGVyLCB2ZXJ0ZXhTdHJpbmcpO1xuXHRcdHRoaXMuX2dsLmNvbXBpbGVTaGFkZXIodGhpcy5fdmVydGV4U2hhZGVyKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX3ZlcnRleFNoYWRlciwgdGhpcy5fZ2wuQ09NUElMRV9TVEFUVVMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IodGhpcy5fZ2wuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl92ZXJ0ZXhTaGFkZXIpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9nbC5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U3RyaW5nKTtcblx0XHR0aGlzLl9nbC5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdtZW50U2hhZGVyKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdtZW50U2hhZGVyLCB0aGlzLl9nbC5DT01QSUxFX1NUQVRVUykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcih0aGlzLl9nbC5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdtZW50U2hhZGVyKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fZ2wuYXR0YWNoU2hhZGVyKHRoaXMuX3Byb2dyYW0sIHRoaXMuX3ZlcnRleFNoYWRlcik7XG5cdFx0dGhpcy5fZ2wuYXR0YWNoU2hhZGVyKHRoaXMuX3Byb2dyYW0sIHRoaXMuX2ZyYWdtZW50U2hhZGVyKTtcblx0XHR0aGlzLl9nbC5saW5rUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9wcm9ncmFtLCB0aGlzLl9nbC5MSU5LX1NUQVRVUykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcih0aGlzLl9nbC5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9wcm9ncmFtKSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblx0fVxuXG5cdHB1YmxpYyBmb2N1c1Byb2dyYW0oKVxuXHR7XG5cdFx0dGhpcy5fZ2wudXNlUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZ2xQcm9ncmFtKCk6V2ViR0xQcm9ncmFtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvZ3JhbTtcblx0fVxufVxuXG5leHBvcnQgPSBQcm9ncmFtV2ViR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ProgramWebGL.ts b/lib/base/ProgramWebGL.ts similarity index 96% rename from lib/core/stagegl/ProgramWebGL.ts rename to lib/base/ProgramWebGL.ts index 7114de15..ca77807b 100644 --- a/lib/core/stagegl/ProgramWebGL.ts +++ b/lib/base/ProgramWebGL.ts @@ -2,7 +2,7 @@ import ByteArray = require("awayjs-core/lib/utils/ByteArray"); import AGALTokenizer = require("awayjs-stagegl/lib/aglsl/AGALTokenizer"); import AGLSLParser = require("awayjs-stagegl/lib/aglsl/AGLSLParser"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); class ProgramWebGL implements IProgram diff --git a/lib/base/ResourceBaseFlash.js b/lib/base/ResourceBaseFlash.js new file mode 100755 index 00000000..37365150 --- /dev/null +++ b/lib/base/ResourceBaseFlash.js @@ -0,0 +1,17 @@ +var ResourceBaseFlash = (function () { + function ResourceBaseFlash() { + } + Object.defineProperty(ResourceBaseFlash.prototype, "id", { + get: function () { + return this._pId; + }, + enumerable: true, + configurable: true + }); + ResourceBaseFlash.prototype.dispose = function () { + }; + return ResourceBaseFlash; +})(); +module.exports = ResourceBaseFlash; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3Jlc291cmNlYmFzZWZsYXNoLnRzIl0sIm5hbWVzIjpbIlJlc291cmNlQmFzZUZsYXNoIiwiUmVzb3VyY2VCYXNlRmxhc2guY29uc3RydWN0b3IiLCJSZXNvdXJjZUJhc2VGbGFzaC5pZCIsIlJlc291cmNlQmFzZUZsYXNoLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0saUJBQWlCO0lBQXZCQSxTQUFNQSxpQkFBaUJBO0lBYXZCQyxDQUFDQTtJQVRBRCxzQkFBV0EsaUNBQUVBO2FBQWJBO1lBRUNFLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBO1FBQ2xCQSxDQUFDQTs7O09BQUFGO0lBRU1BLG1DQUFPQSxHQUFkQTtJQUdBRyxDQUFDQTtJQUNGSCx3QkFBQ0E7QUFBREEsQ0FiQSxBQWFDQSxJQUFBO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6ImJhc2UvUmVzb3VyY2VCYXNlRmxhc2guanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgUmVzb3VyY2VCYXNlRmxhc2hcbntcblx0cHVibGljIF9wSWQ6bnVtYmVyO1xuXG5cdHB1YmxpYyBnZXQgaWQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wSWQ7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblxuXHR9XG59XG5cbmV4cG9ydCA9IFJlc291cmNlQmFzZUZsYXNoOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ResourceBaseFlash.ts b/lib/base/ResourceBaseFlash.ts similarity index 100% rename from lib/core/stagegl/ResourceBaseFlash.ts rename to lib/base/ResourceBaseFlash.ts diff --git a/lib/base/SamplerState.js b/lib/base/SamplerState.js new file mode 100755 index 00000000..c82fc474 --- /dev/null +++ b/lib/base/SamplerState.js @@ -0,0 +1,8 @@ +var SamplerState = (function () { + function SamplerState() { + } + return SamplerState; +})(); +module.exports = SamplerState; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3NhbXBsZXJzdGF0ZS50cyJdLCJuYW1lcyI6WyJTYW1wbGVyU3RhdGUiLCJTYW1wbGVyU3RhdGUuY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBLElBQU0sWUFBWTtJQUFsQkEsU0FBTUEsWUFBWUE7SUFNbEJDLENBQUNBO0lBQURELG1CQUFDQTtBQUFEQSxDQU5BLEFBTUNBLElBQUE7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiYmFzZS9TYW1wbGVyU3RhdGUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgU2FtcGxlclN0YXRlXG57XG5cdHB1YmxpYyB0eXBlOm51bWJlcjtcblx0cHVibGljIHdyYXA6bnVtYmVyO1xuXHRwdWJsaWMgZmlsdGVyOm51bWJlcjtcblx0cHVibGljIG1pcGZpbHRlcjpudW1iZXI7XG59XG5cbmV4cG9ydCA9IFNhbXBsZXJTdGF0ZTsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/SamplerState.ts b/lib/base/SamplerState.ts similarity index 100% rename from lib/core/stagegl/SamplerState.ts rename to lib/base/SamplerState.ts diff --git a/lib/base/Stage.js b/lib/base/Stage.js new file mode 100755 index 00000000..06fe266d --- /dev/null +++ b/lib/base/Stage.js @@ -0,0 +1,491 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var Event = require("awayjs-core/lib/events/Event"); +var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); +var CSS = require("awayjs-core/lib/utils/CSS"); +var ContextMode = require("awayjs-display/lib/display/ContextMode"); +var StageEvent = require("awayjs-display/lib/events/StageEvent"); +var ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +var ContextWebGL = require("awayjs-stagegl/lib/base/ContextWebGL"); +/** + * Stage provides a proxy class to handle the creation and attachment of the Context + * (and in turn the back buffer) it uses. Stage should never be created directly, + * but requested through StageManager. + * + * @see away.managers.StageManager + * + */ +var Stage = (function (_super) { + __extends(Stage, _super); + function Stage(container, stageIndex, stageManager, forceSoftware, profile) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + _super.call(this); + this._x = 0; + this._y = 0; + //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame + this._stageIndex = -1; + this._antiAlias = 0; + //private var _activeVertexBuffers : Vector. = new Vector.(8, true); + //private var _activeTextures : Vector. = new Vector.(8, true); + this._renderTarget = null; + this._renderSurfaceSelector = 0; + //private _mouse3DManager:away.managers.Mouse3DManager; + //private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager + this._initialised = false; + this._container = container; + this._stageIndex = stageIndex; + this._stageManager = stageManager; + this._viewPort = new Rectangle(); + this._enableDepthAndStencil = true; + CSS.setElementX(this._container, 0); + CSS.setElementY(this._container, 0); + this.visible = true; + } + /** + * Requests a Context object to attach to the managed gl canvas. + */ + Stage.prototype.requestContext = function (forceSoftware, profile, mode) { + // If forcing software, we can be certain that the + // returned Context will be running software mode. + // If not, we can't be sure and should stick to the + // old value (will likely be same if re-requesting.) + var _this = this; + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } + if (this._usesSoftwareRendering != null) + this._usesSoftwareRendering = forceSoftware; + this._profile = profile; + try { + if (mode == ContextMode.FLASH) + new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); + else + this._context = new ContextWebGL(this._container, this._stageIndex); + } + catch (e) { + try { + if (mode == ContextMode.AUTO) + new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); + else + this.dispatchEvent(new Event(Event.ERROR)); + } + catch (e) { + this.dispatchEvent(new Event(Event.ERROR)); + } + } + if (this._context) + this._callback(this._context); + }; + Object.defineProperty(Stage.prototype, "width", { + /** + * The width of the gl canvas + */ + get: function () { + return this._width; + }, + set: function (val) { + if (this._width == val) + return; + CSS.setElementWidth(this._container, val); + this._width = this._viewPort.width = val; + this._backBufferDirty = true; + this.notifyViewportUpdated(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "height", { + /** + * The height of the gl canvas + */ + get: function () { + return this._height; + }, + set: function (val) { + if (this._height == val) + return; + CSS.setElementHeight(this._container, val); + this._height = this._viewPort.height = val; + this._backBufferDirty = true; + this.notifyViewportUpdated(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "x", { + /** + * The x position of the gl canvas + */ + get: function () { + return this._x; + }, + set: function (val) { + if (this._x == val) + return; + CSS.setElementX(this._container, val); + this._x = this._viewPort.x = val; + this.notifyViewportUpdated(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "y", { + /** + * The y position of the gl canvas + */ + get: function () { + return this._y; + }, + set: function (val) { + if (this._y == val) + return; + CSS.setElementY(this._container, val); + this._y = this._viewPort.y = val; + this.notifyViewportUpdated(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "visible", { + get: function () { + return CSS.getElementVisibility(this._container); + }, + set: function (val) { + CSS.setElementVisibility(this._container, val); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "container", { + get: function () { + return this._container; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "context", { + /** + * The Context object associated with the given stage object. + */ + get: function () { + return this._context; + }, + enumerable: true, + configurable: true + }); + Stage.prototype.notifyViewportUpdated = function () { + if (this._viewportDirty) + return; + this._viewportDirty = true; + //if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED)) + //return; + //if (!_viewportUpdated) + this._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED); + this.dispatchEvent(this._viewportUpdated); + }; + Stage.prototype.notifyEnterFrame = function () { + //if (!hasEventListener(Event.ENTER_FRAME)) + //return; + if (!this._enterFrame) + this._enterFrame = new Event(Event.ENTER_FRAME); + this.dispatchEvent(this._enterFrame); + }; + Stage.prototype.notifyExitFrame = function () { + //if (!hasEventListener(Event.EXIT_FRAME)) + //return; + if (!this._exitFrame) + this._exitFrame = new Event(Event.EXIT_FRAME); + this.dispatchEvent(this._exitFrame); + }; + Object.defineProperty(Stage.prototype, "profile", { + get: function () { + return this._profile; + }, + enumerable: true, + configurable: true + }); + /** + * Disposes the Stage object, freeing the Context attached to the Stage. + */ + Stage.prototype.dispose = function () { + this._stageManager.iRemoveStage(this); + this.freeContext(); + this._stageManager = null; + this._stageIndex = -1; + }; + /** + * Configures the back buffer associated with the Stage object. + * @param backBufferWidth The width of the backbuffer. + * @param backBufferHeight The height of the backbuffer. + * @param antiAlias The amount of anti-aliasing to use. + * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer. + */ + Stage.prototype.configureBackBuffer = function (backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil) { + this.width = backBufferWidth; + this.height = backBufferHeight; + this._antiAlias = antiAlias; + this._enableDepthAndStencil = enableDepthAndStencil; + if (this._context) + this._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil); + }; + Object.defineProperty(Stage.prototype, "enableDepthAndStencil", { + /* + * Indicates whether the depth and stencil buffer is used + */ + get: function () { + return this._enableDepthAndStencil; + }, + set: function (enableDepthAndStencil) { + this._enableDepthAndStencil = enableDepthAndStencil; + this._backBufferDirty = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "renderTarget", { + get: function () { + return this._renderTarget; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "renderSurfaceSelector", { + get: function () { + return this._renderSurfaceSelector; + }, + enumerable: true, + configurable: true + }); + /* + * Clear and reset the back buffer when using a shared context + */ + Stage.prototype.clear = function () { + if (!this._context) + return; + if (this._backBufferDirty) { + this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + this._backBufferDirty = false; + } + this._context.clear((this._color & 0xff000000) >>> 24, (this._color & 0xff0000) >>> 16, (this._color & 0xff00) >>> 8, this._color & 0xff); + this._bufferClear = true; + }; + /** + * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode. + * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority. + * + * @param type The type of event. + * @param listener The listener function that processes the event. + * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false. + * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0. + * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not. + */ + Stage.prototype.addEventListener = function (type, listener) { + _super.prototype.addEventListener.call(this, type, listener); + //away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame'); + //if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ + //_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); + //} + /* Original code + if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ + + _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); + + + } + */ + }; + /** + * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode. + * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect. + * + * @param type The type of event. + * @param listener The listener object to remove. + * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false. + */ + Stage.prototype.removeEventListener = function (type, listener) { + _super.prototype.removeEventListener.call(this, type, listener); + /* + // Remove the main rendering listener if no EnterFrame listeners remain + if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this ) + && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME)) + { + + //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this ); + + } + */ + }; + Object.defineProperty(Stage.prototype, "scissorRect", { + get: function () { + return this._scissorRect; + }, + set: function (value) { + this._scissorRect = value; + this._context.setScissorRectangle(this._scissorRect); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "stageIndex", { + /** + * The index of the Stage which is managed by this instance of StageProxy. + */ + get: function () { + return this._stageIndex; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "usesSoftwareRendering", { + /** + * Indicates whether the Stage managed by this proxy is running in software mode. + * Remember to wait for the CONTEXT_CREATED event before checking this property, + * as only then will it be guaranteed to be accurate. + */ + get: function () { + return this._usesSoftwareRendering; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "antiAlias", { + /** + * The antiAliasing of the Stage. + */ + get: function () { + return this._antiAlias; + }, + set: function (antiAlias) { + this._antiAlias = antiAlias; + this._backBufferDirty = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "viewPort", { + /** + * A viewPort rectangle equivalent of the Stage size and position. + */ + get: function () { + this._viewportDirty = false; + return this._viewPort; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "color", { + /** + * The background color of the Stage. + */ + get: function () { + return this._color; + }, + set: function (color) { + this._color = color; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Stage.prototype, "bufferClear", { + /** + * The freshly cleared state of the backbuffer before any rendering + */ + get: function () { + return this._bufferClear; + }, + set: function (newBufferClear) { + this._bufferClear = newBufferClear; + }, + enumerable: true, + configurable: true + }); + /* + * Access to fire mouseevents across multiple layered view3D instances + */ + // public get mouse3DManager():Mouse3DManager + // { + // return this._mouse3DManager; + // } + // + // public set mouse3DManager(value:Mouse3DManager) + // { + // this._mouse3DManager = value; + // } + /* TODO: implement dependency Touch3DManager + public get touch3DManager():Touch3DManager + { + return _touch3DManager; + } + + public set touch3DManager(value:Touch3DManager) + { + _touch3DManager = value; + } + */ + /** + * Frees the Context associated with this StageProxy. + */ + Stage.prototype.freeContext = function () { + if (this._context) { + this._context.dispose(); + this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); + } + this._context = null; + this._initialised = false; + }; + /** + * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers. + * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance. + */ + Stage.prototype.onEnterFrame = function (event) { + if (!this._context) + return; + // Clear the stage instance + this.clear(); + //notify the enterframe listeners + this.notifyEnterFrame(); + // Call the present() to render the frame + if (!this._context) + this._context.present(); + //notify the exitframe listeners + this.notifyExitFrame(); + }; + Stage.prototype.recoverFromDisposal = function () { + if (!this._context) + return false; + //away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' ); + /* + if (this._iContext.driverInfo == "Disposed") + { + this._iContext = null; + this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); + return false; + + } + */ + return true; + }; + Stage.prototype._callback = function (context) { + this._context = context; + this._container = this._context.container; + // Only configure back buffer if width and height have been set, + // which they may not have been if View.render() has yet to be + // invoked for the first time. + if (this._width && this._height) + this._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); + // Dispatch the appropriate event depending on whether context was + // created for the first time or recreated after a device loss. + this.dispatchEvent(new StageEvent(this._initialised ? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED)); + this._initialised = true; + }; + return Stage; +})(EventDispatcher); +module.exports = Stage; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3N0YWdlLnRzIl0sIm5hbWVzIjpbIlN0YWdlIiwiU3RhZ2UuY29uc3RydWN0b3IiLCJTdGFnZS5yZXF1ZXN0Q29udGV4dCIsIlN0YWdlLndpZHRoIiwiU3RhZ2UuaGVpZ2h0IiwiU3RhZ2UueCIsIlN0YWdlLnkiLCJTdGFnZS52aXNpYmxlIiwiU3RhZ2UuY29udGFpbmVyIiwiU3RhZ2UuY29udGV4dCIsIlN0YWdlLm5vdGlmeVZpZXdwb3J0VXBkYXRlZCIsIlN0YWdlLm5vdGlmeUVudGVyRnJhbWUiLCJTdGFnZS5ub3RpZnlFeGl0RnJhbWUiLCJTdGFnZS5wcm9maWxlIiwiU3RhZ2UuZGlzcG9zZSIsIlN0YWdlLmNvbmZpZ3VyZUJhY2tCdWZmZXIiLCJTdGFnZS5lbmFibGVEZXB0aEFuZFN0ZW5jaWwiLCJTdGFnZS5yZW5kZXJUYXJnZXQiLCJTdGFnZS5yZW5kZXJTdXJmYWNlU2VsZWN0b3IiLCJTdGFnZS5jbGVhciIsIlN0YWdlLmFkZEV2ZW50TGlzdGVuZXIiLCJTdGFnZS5yZW1vdmVFdmVudExpc3RlbmVyIiwiU3RhZ2Uuc2Npc3NvclJlY3QiLCJTdGFnZS5zdGFnZUluZGV4IiwiU3RhZ2UudXNlc1NvZnR3YXJlUmVuZGVyaW5nIiwiU3RhZ2UuYW50aUFsaWFzIiwiU3RhZ2Uudmlld1BvcnQiLCJTdGFnZS5jb2xvciIsIlN0YWdlLmJ1ZmZlckNsZWFyIiwiU3RhZ2UuZnJlZUNvbnRleHQiLCJTdGFnZS5vbkVudGVyRnJhbWUiLCJTdGFnZS5yZWNvdmVyRnJvbURpc3Bvc2FsIiwiU3RhZ2UuX2NhbGxiYWNrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFNBQVMsV0FBYyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2hFLElBQU8sS0FBSyxXQUFlLDhCQUE4QixDQUFDLENBQUM7QUFDM0QsSUFBTyxlQUFlLFdBQWEsd0NBQXdDLENBQUMsQ0FBQztBQUk3RSxJQUFPLEdBQUcsV0FBZ0IsMkJBQTJCLENBQUMsQ0FB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LEVBNmlCbEM7QUFFRCxBQUFlLGlCQUFOLEtBQUssQ0FBQyIsImZpbGUiOiJiYXNlL1N0YWdlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBFdmVudFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXZlbnRzL0V2ZW50XCIpO1xuaW1wb3J0IEV2ZW50RGlzcGF0Y2hlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IEN1YmVUZXh0dXJlQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgUmVuZGVyVGV4dHVyZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlXCIpO1xuaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcbmltcG9ydCBDU1NcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQ1NTXCIpO1xuXG5pbXBvcnQgQ29udGV4dE1vZGVcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9kaXNwbGF5L0NvbnRleHRNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9kaXNwbGF5L0lDb250ZXh0XCIpO1xuaW1wb3J0IFN0YWdlRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvU3RhZ2VFdmVudFwiKTtcblxuaW1wb3J0IFN0YWdlTWFuYWdlclx0XHRcdFx0PSByZXF1aXJlKFwibWFuYWdlcnMvU3RhZ2VNYW5hZ2VyXCIpO1xuaW1wb3J0IENvbnRleHRTdGFnZTNEXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dFN0YWdlM0RcIik7XG5pbXBvcnQgQ29udGV4dFdlYkdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0V2ViR0xcIik7XG5cbi8qKlxuICogU3RhZ2UgcHJvdmlkZXMgYSBwcm94eSBjbGFzcyB0byBoYW5kbGUgdGhlIGNyZWF0aW9uIGFuZCBhdHRhY2htZW50IG9mIHRoZSBDb250ZXh0XG4gKiAoYW5kIGluIHR1cm4gdGhlIGJhY2sgYnVmZmVyKSBpdCB1c2VzLiBTdGFnZSBzaG91bGQgbmV2ZXIgYmUgY3JlYXRlZCBkaXJlY3RseSxcbiAqIGJ1dCByZXF1ZXN0ZWQgdGhyb3VnaCBTdGFnZU1hbmFnZXIuXG4gKlxuICogQHNlZSBhd2F5Lm1hbmFnZXJzLlN0YWdlTWFuYWdlclxuICpcbiAqL1xuY2xhc3MgU3RhZ2UgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXJcbntcblx0cHJpdmF0ZSBfY29udGV4dDpJQ29udGV4dDtcblx0cHJpdmF0ZSBfY29udGFpbmVyOkhUTUxFbGVtZW50O1xuXHRwcml2YXRlIF93aWR0aDpudW1iZXI7XG5cdHByaXZhdGUgX2hlaWdodDpudW1iZXI7XG5cdHByaXZhdGUgX3g6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfeTpudW1iZXIgPSAwO1xuXG5cdC8vcHJpdmF0ZSBzdGF0aWMgX2ZyYW1lRXZlbnREcml2ZXI6U2hhcGUgPSBuZXcgU2hhcGUoKTsgLy8gVE9ETzogYWRkIGZyYW1lIGRyaXZlciAvIHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lXG5cblx0cHJpdmF0ZSBfc3RhZ2VJbmRleDpudW1iZXIgPSAtMTtcblxuXHRwcml2YXRlIF91c2VzU29mdHdhcmVSZW5kZXJpbmc6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfcHJvZmlsZTpzdHJpbmc7XG5cdHByaXZhdGUgX3N0YWdlTWFuYWdlcjpTdGFnZU1hbmFnZXI7XG5cdHByaXZhdGUgX2FudGlBbGlhczpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9lbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfY29udGV4dFJlcXVlc3RlZDpib29sZWFuO1xuXG5cdC8vcHJpdmF0ZSB2YXIgX2FjdGl2ZVZlcnRleEJ1ZmZlcnMgOiBWZWN0b3IuPFZlcnRleEJ1ZmZlcj4gPSBuZXcgVmVjdG9yLjxWZXJ0ZXhCdWZmZXI+KDgsIHRydWUpO1xuXHQvL3ByaXZhdGUgdmFyIF9hY3RpdmVUZXh0dXJlcyA6IFZlY3Rvci48VGV4dHVyZUJhc2U+ID0gbmV3IFZlY3Rvci48VGV4dHVyZUJhc2U+KDgsIHRydWUpO1xuXHRwcml2YXRlIF9yZW5kZXJUYXJnZXQ6VGV4dHVyZVByb3h5QmFzZSA9IG51bGw7XG5cdHByaXZhdGUgX3JlbmRlclN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9zY2lzc29yUmVjdDpSZWN0YW5nbGU7XG5cdHByaXZhdGUgX2NvbG9yOm51bWJlcjtcblx0cHJpdmF0ZSBfYmFja0J1ZmZlckRpcnR5OmJvb2xlYW47XG5cdHByaXZhdGUgX3ZpZXdQb3J0OlJlY3RhbmdsZTtcblx0cHJpdmF0ZSBfZW50ZXJGcmFtZTpFdmVudDtcblx0cHJpdmF0ZSBfZXhpdEZyYW1lOkV2ZW50O1xuXHRwcml2YXRlIF92aWV3cG9ydFVwZGF0ZWQ6U3RhZ2VFdmVudDtcblx0cHJpdmF0ZSBfdmlld3BvcnREaXJ0eTpib29sZWFuO1xuXHRwcml2YXRlIF9idWZmZXJDbGVhcjpib29sZWFuO1xuXG5cdC8vcHJpdmF0ZSBfbW91c2UzRE1hbmFnZXI6YXdheS5tYW5hZ2Vycy5Nb3VzZTNETWFuYWdlcjtcblx0Ly9wcml2YXRlIF90b3VjaDNETWFuYWdlcjpUb3VjaDNETWFuYWdlcjsgLy9UT0RPOiBpbWVwbGVtZW50IGRlcGVuZGVuY3kgVG91Y2gzRE1hbmFnZXJcblxuXHRwcml2YXRlIF9pbml0aWFsaXNlZDpib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoY29udGFpbmVyOkhUTUxDYW52YXNFbGVtZW50LCBzdGFnZUluZGV4Om51bWJlciwgc3RhZ2VNYW5hZ2VyOlN0YWdlTWFuYWdlciwgZm9yY2VTb2Z0d2FyZTpib29sZWFuID0gZmFsc2UsIHByb2ZpbGU6c3RyaW5nID0gXCJiYXNlbGluZVwiKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdHRoaXMuX3N0YWdlSW5kZXggPSBzdGFnZUluZGV4O1xuXG5cdFx0dGhpcy5fc3RhZ2VNYW5hZ2VyID0gc3RhZ2VNYW5hZ2VyO1xuXG5cdFx0dGhpcy5fdmlld1BvcnQgPSBuZXcgUmVjdGFuZ2xlKCk7XG5cblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlO1xuXG5cdFx0Q1NTLnNldEVsZW1lbnRYKHRoaXMuX2NvbnRhaW5lciwgMCk7XG5cdFx0Q1NTLnNldEVsZW1lbnRZKHRoaXMuX2NvbnRhaW5lciwgMCk7XG5cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIGEgQ29udGV4dCBvYmplY3QgdG8gYXR0YWNoIHRvIHRoZSBtYW5hZ2VkIGdsIGNhbnZhcy5cblx0ICovXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dChmb3JjZVNvZnR3YXJlOmJvb2xlYW4gPSBmYWxzZSwgcHJvZmlsZTpzdHJpbmcgPSBcImJhc2VsaW5lXCIsIG1vZGU6c3RyaW5nID0gXCJhdXRvXCIpXG5cdHtcblx0XHQvLyBJZiBmb3JjaW5nIHNvZnR3YXJlLCB3ZSBjYW4gYmUgY2VydGFpbiB0aGF0IHRoZVxuXHRcdC8vIHJldHVybmVkIENvbnRleHQgd2lsbCBiZSBydW5uaW5nIHNvZnR3YXJlIG1vZGUuXG5cdFx0Ly8gSWYgbm90LCB3ZSBjYW4ndCBiZSBzdXJlIGFuZCBzaG91bGQgc3RpY2sgdG8gdGhlXG5cdFx0Ly8gb2xkIHZhbHVlICh3aWxsIGxpa2VseSBiZSBzYW1lIGlmIHJlLXJlcXVlc3RpbmcuKVxuXG5cdFx0aWYgKHRoaXMuX3VzZXNTb2Z0d2FyZVJlbmRlcmluZyAhPSBudWxsKVxuXHRcdFx0dGhpcy5fdXNlc1NvZnR3YXJlUmVuZGVyaW5nID0gZm9yY2VTb2Z0d2FyZTtcblxuXHRcdHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2RlID09IENvbnRleHRNb2RlLkZMQVNIKVxuXHRcdFx0XHRuZXcgQ29udGV4dFN0YWdlM0QoPEhUTUxDYW52YXNFbGVtZW50PiB0aGlzLl9jb250YWluZXIsIHRoaXMuX3N0YWdlSW5kZXgsIChjb250ZXh0OklDb250ZXh0KSA9PiB0aGlzLl9jYWxsYmFjayhjb250ZXh0KSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRoaXMuX2NvbnRleHQgPSBuZXcgQ29udGV4dFdlYkdMKDxIVE1MQ2FudmFzRWxlbWVudD4gdGhpcy5fY29udGFpbmVyLCB0aGlzLl9zdGFnZUluZGV4KTtcblxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChtb2RlID09IENvbnRleHRNb2RlLkFVVE8pXG5cdFx0XHRcdFx0bmV3IENvbnRleHRTdGFnZTNEKDxIVE1MQ2FudmFzRWxlbWVudD4gdGhpcy5fY29udGFpbmVyLCB0aGlzLl9zdGFnZUluZGV4LCAoY29udGV4dDpJQ29udGV4dCkgPT4gdGhpcy5fY2FsbGJhY2soY29udGV4dCkpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5FUlJPUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KEV2ZW50LkVSUk9SKSk7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NhbGxiYWNrKHRoaXMuX2NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgZ2wgY2FudmFzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHdpZHRoKClcblx0e1xuXHRcdHJldHVybiB0aGlzLl93aWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgd2lkdGgodmFsOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl93aWR0aCA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudFdpZHRoKHRoaXMuX2NvbnRhaW5lciwgdmFsKTtcblxuXHRcdHRoaXMuX3dpZHRoID0gdGhpcy5fdmlld1BvcnQud2lkdGggPSB2YWw7XG5cblx0XHR0aGlzLl9iYWNrQnVmZmVyRGlydHkgPSB0cnVlO1xuXG5cdFx0dGhpcy5ub3RpZnlWaWV3cG9ydFVwZGF0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgaGVpZ2h0IG9mIHRoZSBnbCBjYW52YXNcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVpZ2h0KClcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGhlaWdodCh2YWw6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2hlaWdodCA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudEhlaWdodCh0aGlzLl9jb250YWluZXIsIHZhbCk7XG5cblx0XHR0aGlzLl9oZWlnaHQgPSB0aGlzLl92aWV3UG9ydC5oZWlnaHQgPSB2YWw7XG5cblx0XHR0aGlzLl9iYWNrQnVmZmVyRGlydHkgPSB0cnVlO1xuXG5cdFx0dGhpcy5ub3RpZnlWaWV3cG9ydFVwZGF0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgZ2wgY2FudmFzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHgoKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3g7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHgodmFsOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl94ID09IHZhbClcblx0XHRcdHJldHVybjtcblxuXHRcdENTUy5zZXRFbGVtZW50WCh0aGlzLl9jb250YWluZXIsIHZhbCk7XG5cblx0XHR0aGlzLl94ID0gdGhpcy5fdmlld1BvcnQueCA9IHZhbDtcblxuXHRcdHRoaXMubm90aWZ5Vmlld3BvcnRVcGRhdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGdsIGNhbnZhc1xuXHQgKi9cblx0cHVibGljIGdldCB5KClcblx0e1xuXHRcdHJldHVybiB0aGlzLl95O1xuXHR9XG5cblx0cHVibGljIHNldCB5KHZhbDpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5feSA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudFkodGhpcy5fY29udGFpbmVyLCB2YWwpO1xuXG5cdFx0dGhpcy5feSA9IHRoaXMuX3ZpZXdQb3J0LnkgPSB2YWw7XG5cblx0XHR0aGlzLm5vdGlmeVZpZXdwb3J0VXBkYXRlZCgpO1xuXHR9XG5cblx0cHVibGljIHNldCB2aXNpYmxlKHZhbDpib29sZWFuKVxuXHR7XG5cdFx0Q1NTLnNldEVsZW1lbnRWaXNpYmlsaXR5KHRoaXMuX2NvbnRhaW5lciwgdmFsKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdmlzaWJsZSgpXG5cdHtcblx0XHRyZXR1cm4gQ1NTLmdldEVsZW1lbnRWaXNpYmlsaXR5KHRoaXMuX2NvbnRhaW5lcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOkhUTUxFbGVtZW50XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHN0YWdlIG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpOklDb250ZXh0XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxuXG5cdHByaXZhdGUgbm90aWZ5Vmlld3BvcnRVcGRhdGVkKClcblx0e1xuXHRcdGlmICh0aGlzLl92aWV3cG9ydERpcnR5KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IHRydWU7XG5cblx0XHQvL2lmICghdGhpcy5oYXNFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuVklFV1BPUlRfVVBEQVRFRCkpXG5cdFx0Ly9yZXR1cm47XG5cblx0XHQvL2lmICghX3ZpZXdwb3J0VXBkYXRlZClcblx0XHR0aGlzLl92aWV3cG9ydFVwZGF0ZWQgPSBuZXcgU3RhZ2VFdmVudChTdGFnZUV2ZW50LlZJRVdQT1JUX1VQREFURUQpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuX3ZpZXdwb3J0VXBkYXRlZCk7XG5cdH1cblxuXHRwcml2YXRlIG5vdGlmeUVudGVyRnJhbWUoKVxuXHR7XG5cdFx0Ly9pZiAoIWhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKVxuXHRcdC8vcmV0dXJuO1xuXG5cdFx0aWYgKCF0aGlzLl9lbnRlckZyYW1lKVxuXHRcdFx0dGhpcy5fZW50ZXJGcmFtZSA9IG5ldyBFdmVudChFdmVudC5FTlRFUl9GUkFNRSk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fZW50ZXJGcmFtZSk7XG5cblx0fVxuXG5cdHByaXZhdGUgbm90aWZ5RXhpdEZyYW1lKClcblx0e1xuXHRcdC8vaWYgKCFoYXNFdmVudExpc3RlbmVyKEV2ZW50LkVYSVRfRlJBTUUpKVxuXHRcdC8vcmV0dXJuO1xuXG5cdFx0aWYgKCF0aGlzLl9leGl0RnJhbWUpXG5cdFx0XHR0aGlzLl9leGl0RnJhbWUgPSBuZXcgRXZlbnQoRXZlbnQuRVhJVF9GUkFNRSk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fZXhpdEZyYW1lKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcHJvZmlsZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2ZpbGU7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcG9zZXMgdGhlIFN0YWdlIG9iamVjdCwgZnJlZWluZyB0aGUgQ29udGV4dCBhdHRhY2hlZCB0byB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9zdGFnZU1hbmFnZXIuaVJlbW92ZVN0YWdlKHRoaXMpO1xuXHRcdHRoaXMuZnJlZUNvbnRleHQoKTtcblx0XHR0aGlzLl9zdGFnZU1hbmFnZXIgPSBudWxsO1xuXHRcdHRoaXMuX3N0YWdlSW5kZXggPSAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmVzIHRoZSBiYWNrIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN0YWdlIG9iamVjdC5cblx0ICogQHBhcmFtIGJhY2tCdWZmZXJXaWR0aCBUaGUgd2lkdGggb2YgdGhlIGJhY2tidWZmZXIuXG5cdCAqIEBwYXJhbSBiYWNrQnVmZmVySGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGJhY2tidWZmZXIuXG5cdCAqIEBwYXJhbSBhbnRpQWxpYXMgVGhlIGFtb3VudCBvZiBhbnRpLWFsaWFzaW5nIHRvIHVzZS5cblx0ICogQHBhcmFtIGVuYWJsZURlcHRoQW5kU3RlbmNpbCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYmFjayBidWZmZXIgY29udGFpbnMgYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIuXG5cdCAqL1xuXHRwdWJsaWMgY29uZmlndXJlQmFja0J1ZmZlcihiYWNrQnVmZmVyV2lkdGg6bnVtYmVyLCBiYWNrQnVmZmVySGVpZ2h0Om51bWJlciwgYW50aUFsaWFzOm51bWJlciwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLndpZHRoID0gYmFja0J1ZmZlcldpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gYmFja0J1ZmZlckhlaWdodDtcblxuXHRcdHRoaXMuX2FudGlBbGlhcyA9IGFudGlBbGlhcztcblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSBlbmFibGVEZXB0aEFuZFN0ZW5jaWw7XG5cblx0XHRpZiAodGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NvbnRleHQuY29uZmlndXJlQmFja0J1ZmZlcihiYWNrQnVmZmVyV2lkdGgsIGJhY2tCdWZmZXJIZWlnaHQsIGFudGlBbGlhcywgZW5hYmxlRGVwdGhBbmRTdGVuY2lsKTtcblx0fVxuXG5cdC8qXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIgaXMgdXNlZFxuXHQgKi9cblx0cHVibGljIGdldCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZW5hYmxlRGVwdGhBbmRTdGVuY2lsO1xuXHR9XG5cblx0cHVibGljIHNldCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwoZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSBlbmFibGVEZXB0aEFuZFN0ZW5jaWw7XG5cdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyVGFyZ2V0KCk6VGV4dHVyZVByb3h5QmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyU3VyZmFjZVNlbGVjdG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyU3VyZmFjZVNlbGVjdG9yO1xuXHR9XG5cblx0Lypcblx0ICogQ2xlYXIgYW5kIHJlc2V0IHRoZSBiYWNrIGJ1ZmZlciB3aGVuIHVzaW5nIGEgc2hhcmVkIGNvbnRleHRcblx0ICovXG5cdHB1YmxpYyBjbGVhcigpXG5cdHtcblx0XHRpZiAoIXRoaXMuX2NvbnRleHQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5fYmFja0J1ZmZlckRpcnR5KSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXHRcdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29udGV4dC5jbGVhcigoIHRoaXMuX2NvbG9yICYgMHhmZjAwMDAwMCApID4+PiAyNCwgLy8gPC0tLS0tLS0tLSBaZXJvLWZpbGwgcmlnaHQgc2hpZnRcblx0XHRcdFx0XHRcdFx0ICAoIHRoaXMuX2NvbG9yICYgMHhmZjAwMDAgKSA+Pj4gMTYsIC8vIDwtLS0tLS0tLS0tLS0tfFxuXHRcdFx0XHRcdFx0XHQgICggdGhpcy5fY29sb3IgJiAweGZmMDAgKSA+Pj4gOCwgLy8gPC0tLS0tLS0tLS0tLS0tLS18XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fY29sb3IgJiAweGZmKTtcblxuXHRcdHRoaXMuX2J1ZmZlckNsZWFyID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgb2JqZWN0IHdpdGggYW4gRXZlbnREaXNwYXRjaGVyIG9iamVjdCBzbyB0aGF0IHRoZSBsaXN0ZW5lciByZWNlaXZlcyBub3RpZmljYXRpb24gb2YgYW4gZXZlbnQuIFNwZWNpYWwgY2FzZSBmb3IgZW50ZXJmcmFtZSBhbmQgZXhpdGZyYW1lIGV2ZW50cyAtIHdpbGwgc3dpdGNoIFN0YWdlUHJveHkgaW50byBhdXRvbWF0aWMgcmVuZGVyIG1vZGUuXG5cdCAqIFlvdSBjYW4gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzIG9uIGFsbCBub2RlcyBpbiB0aGUgZGlzcGxheSBsaXN0IGZvciBhIHNwZWNpZmljIHR5cGUgb2YgZXZlbnQsIHBoYXNlLCBhbmQgcHJpb3JpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGV2ZW50LlxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIHRoZSBldmVudC5cblx0ICogQHBhcmFtIHVzZUNhcHR1cmUgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBsaXN0ZW5lciB3b3JrcyBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvciB0aGUgdGFyZ2V0IGFuZCBidWJibGluZyBwaGFzZXMuIElmIHVzZUNhcHR1cmUgaXMgc2V0IHRvIHRydWUsIHRoZSBsaXN0ZW5lciBwcm9jZXNzZXMgdGhlIGV2ZW50IG9ubHkgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlIGFuZCBub3QgaW4gdGhlIHRhcmdldCBvciBidWJibGluZyBwaGFzZS4gSWYgdXNlQ2FwdHVyZSBpcyBmYWxzZSwgdGhlIGxpc3RlbmVyIHByb2Nlc3NlcyB0aGUgZXZlbnQgb25seSBkdXJpbmcgdGhlIHRhcmdldCBvciBidWJibGluZyBwaGFzZS4gVG8gbGlzdGVuIGZvciB0aGUgZXZlbnQgaW4gYWxsIHRocmVlIHBoYXNlcywgY2FsbCBhZGRFdmVudExpc3RlbmVyIHR3aWNlLCBvbmNlIHdpdGggdXNlQ2FwdHVyZSBzZXQgdG8gdHJ1ZSwgdGhlbiBhZ2FpbiB3aXRoIHVzZUNhcHR1cmUgc2V0IHRvIGZhbHNlLlxuXHQgKiBAcGFyYW0gcHJpb3JpdHkgVGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBldmVudCBsaXN0ZW5lci4gVGhlIHByaW9yaXR5IGlzIGRlc2lnbmF0ZWQgYnkgYSBzaWduZWQgMzItYml0IGludGVnZXIuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIGhpZ2hlciB0aGUgcHJpb3JpdHkuIEFsbCBsaXN0ZW5lcnMgd2l0aCBwcmlvcml0eSBuIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGxpc3RlbmVycyBvZiBwcmlvcml0eSBuLTEuIElmIHR3byBvciBtb3JlIGxpc3RlbmVycyBzaGFyZSB0aGUgc2FtZSBwcmlvcml0eSwgdGhleSBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuIFRoZSBkZWZhdWx0IHByaW9yaXR5IGlzIDAuXG5cdCAqIEBwYXJhbSB1c2VXZWFrUmVmZXJlbmNlIERldGVybWluZXMgd2hldGhlciB0aGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0ZW5lciBpcyBzdHJvbmcgb3Igd2Vhay4gQSBzdHJvbmcgcmVmZXJlbmNlICh0aGUgZGVmYXVsdCkgcHJldmVudHMgeW91ciBsaXN0ZW5lciBmcm9tIGJlaW5nIGdhcmJhZ2UtY29sbGVjdGVkLiBBIHdlYWsgcmVmZXJlbmNlIGRvZXMgbm90LlxuXHQgKi9cblx0cHVibGljIGFkZEV2ZW50TGlzdGVuZXIodHlwZTpzdHJpbmcsIGxpc3RlbmVyOkZ1bmN0aW9uKVxuXHR7XG5cdFx0c3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XG5cblx0XHQvL2F3YXkuRGVidWcudGhyb3dQSVIoICdTdGFnZVByb3h5JyAsICdhZGRFdmVudExpc3RlbmVyJyAsICAnRW50ZXJGcmFtZSwgRXhpdEZyYW1lJyk7XG5cblx0XHQvL2lmICgodHlwZSA9PSBFdmVudC5FTlRFUl9GUkFNRSB8fCB0eXBlID09IEV2ZW50LkVYSVRfRlJBTUUpICl7Ly8mJiAhIHRoaXMuX2ZyYW1lRXZlbnREcml2ZXIuaGFzRXZlbnRMaXN0ZW5lcihFdmVudC5FTlRFUl9GUkFNRSkpe1xuXG5cdFx0Ly9fZnJhbWVFdmVudERyaXZlci5hZGRFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCBvbkVudGVyRnJhbWUsIHVzZUNhcHR1cmUsIHByaW9yaXR5LCB1c2VXZWFrUmVmZXJlbmNlKTtcblxuXHRcdC8vfVxuXG5cdFx0LyogT3JpZ2luYWwgY29kZVxuXHRcdCBpZiAoKHR5cGUgPT0gRXZlbnQuRU5URVJfRlJBTUUgfHwgdHlwZSA9PSBFdmVudC5FWElUX0ZSQU1FKSAmJiAhIF9mcmFtZUV2ZW50RHJpdmVyLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKXtcblxuXHRcdCBfZnJhbWVFdmVudERyaXZlci5hZGRFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCBvbkVudGVyRnJhbWUsIHVzZUNhcHR1cmUsIHByaW9yaXR5LCB1c2VXZWFrUmVmZXJlbmNlKTtcblxuXG5cdFx0IH1cblx0XHQgKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgRXZlbnREaXNwYXRjaGVyIG9iamVjdC4gU3BlY2lhbCBjYXNlIGZvciBlbnRlcmZyYW1lIGFuZCBleGl0ZnJhbWUgZXZlbnRzIC0gd2lsbCBzd2l0Y2ggU3RhZ2VQcm94eSBvdXQgb2YgYXV0b21hdGljIHJlbmRlciBtb2RlLlxuXHQgKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBsaXN0ZW5lciByZWdpc3RlcmVkIHdpdGggdGhlIEV2ZW50RGlzcGF0Y2hlciBvYmplY3QsIGEgY2FsbCB0byB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudC5cblx0ICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBvYmplY3QgdG8gcmVtb3ZlLlxuXHQgKiBAcGFyYW0gdXNlQ2FwdHVyZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgbGlzdGVuZXIgd2FzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjYXB0dXJlIHBoYXNlIG9yIHRoZSB0YXJnZXQgYW5kIGJ1YmJsaW5nIHBoYXNlcy4gSWYgdGhlIGxpc3RlbmVyIHdhcyByZWdpc3RlcmVkIGZvciBib3RoIHRoZSBjYXB0dXJlIHBoYXNlIGFuZCB0aGUgdGFyZ2V0IGFuZCBidWJibGluZyBwaGFzZXMsIHR3byBjYWxscyB0byByZW1vdmVFdmVudExpc3RlbmVyKCkgYXJlIHJlcXVpcmVkIHRvIHJlbW92ZSBib3RoLCBvbmUgY2FsbCB3aXRoIHVzZUNhcHR1cmUoKSBzZXQgdG8gdHJ1ZSwgYW5kIGFub3RoZXIgY2FsbCB3aXRoIHVzZUNhcHR1cmUoKSBzZXQgdG8gZmFsc2UuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOnN0cmluZywgbGlzdGVuZXI6RnVuY3Rpb24pXG5cdHtcblx0XHRzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcblxuXHRcdC8qXG5cdFx0IC8vIFJlbW92ZSB0aGUgbWFpbiByZW5kZXJpbmcgbGlzdGVuZXIgaWYgbm8gRW50ZXJGcmFtZSBsaXN0ZW5lcnMgcmVtYWluXG5cdFx0IGlmICggICAgISB0aGlzLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUgLCB0aGlzLm9uRW50ZXJGcmFtZSAsIHRoaXMgKVxuXHRcdCAmJiAgISB0aGlzLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRVhJVF9GUkFNRSAsIHRoaXMub25FbnRlckZyYW1lICwgdGhpcykgKSAvLyYmIF9mcmFtZUV2ZW50RHJpdmVyLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKVxuXHRcdCB7XG5cblx0XHQgLy9fZnJhbWVFdmVudERyaXZlci5yZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCB0aGlzLm9uRW50ZXJGcmFtZSwgdGhpcyApO1xuXG5cdFx0IH1cblx0XHQgKi9cblx0fVxuXG5cdHB1YmxpYyBnZXQgc2Npc3NvclJlY3QoKTpSZWN0YW5nbGVcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zY2lzc29yUmVjdDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgc2Npc3NvclJlY3QodmFsdWU6UmVjdGFuZ2xlKVxuXHR7XG5cdFx0dGhpcy5fc2Npc3NvclJlY3QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX2NvbnRleHQuc2V0U2Npc3NvclJlY3RhbmdsZSh0aGlzLl9zY2lzc29yUmVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGluZGV4IG9mIHRoZSBTdGFnZSB3aGljaCBpcyBtYW5hZ2VkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgU3RhZ2VQcm94eS5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3RhZ2VJbmRleCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YWdlSW5kZXg7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFN0YWdlIG1hbmFnZWQgYnkgdGhpcyBwcm94eSBpcyBydW5uaW5nIGluIHNvZnR3YXJlIG1vZGUuXG5cdCAqIFJlbWVtYmVyIHRvIHdhaXQgZm9yIHRoZSBDT05URVhUX0NSRUFURUQgZXZlbnQgYmVmb3JlIGNoZWNraW5nIHRoaXMgcHJvcGVydHksXG5cdCAqIGFzIG9ubHkgdGhlbiB3aWxsIGl0IGJlIGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHVzZXNTb2Z0d2FyZVJlbmRlcmluZygpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl91c2VzU29mdHdhcmVSZW5kZXJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFudGlBbGlhc2luZyBvZiB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFudGlBbGlhcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FudGlBbGlhcztcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW50aUFsaWFzKGFudGlBbGlhczpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9hbnRpQWxpYXMgPSBhbnRpQWxpYXM7XG5cdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHZpZXdQb3J0IHJlY3RhbmdsZSBlcXVpdmFsZW50IG9mIHRoZSBTdGFnZSBzaXplIGFuZCBwb3NpdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgdmlld1BvcnQoKTpSZWN0YW5nbGVcblx0e1xuXHRcdHRoaXMuX3ZpZXdwb3J0RGlydHkgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl92aWV3UG9ydDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGNvbG9yKGNvbG9yOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2NvbG9yID0gY29sb3I7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGZyZXNobHkgY2xlYXJlZCBzdGF0ZSBvZiB0aGUgYmFja2J1ZmZlciBiZWZvcmUgYW55IHJlbmRlcmluZ1xuXHQgKi9cblx0cHVibGljIGdldCBidWZmZXJDbGVhcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXJDbGVhcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYnVmZmVyQ2xlYXIobmV3QnVmZmVyQ2xlYXI6Ym9vbGVhbilcblx0e1xuXHRcdHRoaXMuX2J1ZmZlckNsZWFyID0gbmV3QnVmZmVyQ2xlYXI7XG5cdH1cblxuXHQvKlxuXHQgKiBBY2Nlc3MgdG8gZmlyZSBtb3VzZWV2ZW50cyBhY3Jvc3MgbXVsdGlwbGUgbGF5ZXJlZCB2aWV3M0QgaW5zdGFuY2VzXG5cdCAqL1xuXHQvL1x0XHRwdWJsaWMgZ2V0IG1vdXNlM0RNYW5hZ2VyKCk6TW91c2UzRE1hbmFnZXJcblx0Ly9cdFx0e1xuXHQvL1x0XHRcdHJldHVybiB0aGlzLl9tb3VzZTNETWFuYWdlcjtcblx0Ly9cdFx0fVxuXHQvL1xuXHQvL1x0XHRwdWJsaWMgc2V0IG1vdXNlM0RNYW5hZ2VyKHZhbHVlOk1vdXNlM0RNYW5hZ2VyKVxuXHQvL1x0XHR7XG5cdC8vXHRcdFx0dGhpcy5fbW91c2UzRE1hbmFnZXIgPSB2YWx1ZTtcblx0Ly9cdFx0fVxuXG5cdC8qIFRPRE86IGltcGxlbWVudCBkZXBlbmRlbmN5IFRvdWNoM0RNYW5hZ2VyXG5cdCBwdWJsaWMgZ2V0IHRvdWNoM0RNYW5hZ2VyKCk6VG91Y2gzRE1hbmFnZXJcblx0IHtcblx0IHJldHVybiBfdG91Y2gzRE1hbmFnZXI7XG5cdCB9XG5cblx0IHB1YmxpYyBzZXQgdG91Y2gzRE1hbmFnZXIodmFsdWU6VG91Y2gzRE1hbmFnZXIpXG5cdCB7XG5cdCBfdG91Y2gzRE1hbmFnZXIgPSB2YWx1ZTtcblx0IH1cblx0ICovXG5cblx0LyoqXG5cdCAqIEZyZWVzIHRoZSBDb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFN0YWdlUHJveHkuXG5cdCAqL1xuXHRwcml2YXRlIGZyZWVDb250ZXh0KClcblx0e1xuXHRcdGlmICh0aGlzLl9jb250ZXh0KSB7XG5cdFx0XHR0aGlzLl9jb250ZXh0LmRpc3Bvc2UoKTtcblxuXHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KFN0YWdlRXZlbnQuQ09OVEVYVF9ESVNQT1NFRCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXG5cdFx0dGhpcy5faW5pdGlhbGlzZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgRW50ZXJfRnJhbWUgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyB0aGUgcHJveHkuRU5URVJfRlJBTUUgYW5kIHByb3h5LkVYSVRfRlJBTUUgZXZlbnQgaGFuZGxlcnMuXG5cdCAqIFR5cGljYWxseSB0aGUgcHJveHkuRU5URVJfRlJBTUUgbGlzdGVuZXIgd291bGQgcmVuZGVyIHRoZSBsYXllcnMgZm9yIHRoaXMgU3RhZ2UgaW5zdGFuY2UuXG5cdCAqL1xuXHRwcml2YXRlIG9uRW50ZXJGcmFtZShldmVudDpFdmVudClcblx0e1xuXHRcdGlmICghdGhpcy5fY29udGV4dClcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIENsZWFyIHRoZSBzdGFnZSBpbnN0YW5jZVxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHQvL25vdGlmeSB0aGUgZW50ZXJmcmFtZSBsaXN0ZW5lcnNcblx0XHR0aGlzLm5vdGlmeUVudGVyRnJhbWUoKTtcblx0XHQvLyBDYWxsIHRoZSBwcmVzZW50KCkgdG8gcmVuZGVyIHRoZSBmcmFtZVxuXHRcdGlmICghdGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NvbnRleHQucHJlc2VudCgpO1xuXHRcdC8vbm90aWZ5IHRoZSBleGl0ZnJhbWUgbGlzdGVuZXJzXG5cdFx0dGhpcy5ub3RpZnlFeGl0RnJhbWUoKTtcblx0fVxuXG5cdHB1YmxpYyByZWNvdmVyRnJvbURpc3Bvc2FsKCk6Ym9vbGVhblxuXHR7XG5cdFx0aWYgKCF0aGlzLl9jb250ZXh0KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly9hd2F5LkRlYnVnLnRocm93UElSKCAnU3RhZ2VQcm94eScgLCAncmVjb3ZlckZyb21EaXNwb3NhbCcgLCAnJyApO1xuXG5cdFx0Lypcblx0XHQgaWYgKHRoaXMuX2lDb250ZXh0LmRyaXZlckluZm8gPT0gXCJEaXNwb3NlZFwiKVxuXHRcdCB7XG5cdFx0IHRoaXMuX2lDb250ZXh0ID0gbnVsbDtcblx0XHQgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KFN0YWdlRXZlbnQuQ09OVEVYVF9ESVNQT1NFRCkpO1xuXHRcdCByZXR1cm4gZmFsc2U7XG5cblx0XHQgfVxuXHRcdCAqL1xuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRwcml2YXRlIF9jYWxsYmFjayhjb250ZXh0OklDb250ZXh0KVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHR0aGlzLl9jb250YWluZXIgPSB0aGlzLl9jb250ZXh0LmNvbnRhaW5lcjtcblxuXHRcdC8vIE9ubHkgY29uZmlndXJlIGJhY2sgYnVmZmVyIGlmIHdpZHRoIGFuZCBoZWlnaHQgaGF2ZSBiZWVuIHNldCxcblx0XHQvLyB3aGljaCB0aGV5IG1heSBub3QgaGF2ZSBiZWVuIGlmIFZpZXcucmVuZGVyKCkgaGFzIHlldCB0byBiZVxuXHRcdC8vIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRcdGlmICh0aGlzLl93aWR0aCAmJiB0aGlzLl9oZWlnaHQpXG5cdFx0XHR0aGlzLl9jb250ZXh0LmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXG5cdFx0Ly8gRGlzcGF0Y2ggdGhlIGFwcHJvcHJpYXRlIGV2ZW50IGRlcGVuZGluZyBvbiB3aGV0aGVyIGNvbnRleHQgd2FzXG5cdFx0Ly8gY3JlYXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUgb3IgcmVjcmVhdGVkIGFmdGVyIGEgZGV2aWNlIGxvc3MuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KHRoaXMuX2luaXRpYWxpc2VkPyBTdGFnZUV2ZW50LkNPTlRFWFRfUkVDUkVBVEVEIDogU3RhZ2VFdmVudC5DT05URVhUX0NSRUFURUQpKTtcblxuXHRcdHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgPSBTdGFnZTsiXX0= \ No newline at end of file diff --git a/lib/core/base/Stage.ts b/lib/base/Stage.ts similarity index 98% rename from lib/core/base/Stage.ts rename to lib/base/Stage.ts index 3bde84f6..250496f7 100644 --- a/lib/core/base/Stage.ts +++ b/lib/base/Stage.ts @@ -10,9 +10,9 @@ import ContextMode = require("awayjs-display/lib/display/ContextMode"); import IContext = require("awayjs-display/lib/display/IContext"); import StageEvent = require("awayjs-display/lib/events/StageEvent"); -import StageManager = require("awayjs-stagegl/lib/managers/StageManager"); -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import ContextWebGL = require("awayjs-stagegl/lib/core/stagegl/ContextWebGL"); +import StageManager = require("managers/StageManager"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import ContextWebGL = require("awayjs-stagegl/lib/base/ContextWebGL"); /** * Stage provides a proxy class to handle the creation and attachment of the Context diff --git a/lib/base/TextureBaseWebGL.js b/lib/base/TextureBaseWebGL.js new file mode 100755 index 00000000..5646569e --- /dev/null +++ b/lib/base/TextureBaseWebGL.js @@ -0,0 +1,21 @@ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var TextureBaseWebGL = (function () { + function TextureBaseWebGL(gl) { + this.textureType = ""; + this._gl = gl; + } + TextureBaseWebGL.prototype.dispose = function () { + throw "Abstract method must be overridden."; + }; + Object.defineProperty(TextureBaseWebGL.prototype, "glTexture", { + get: function () { + throw new AbstractMethodError(); + }, + enumerable: true, + configurable: true + }); + return TextureBaseWebGL; +})(); +module.exports = TextureBaseWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3RleHR1cmViYXNld2ViZ2wudHMiXSwibmFtZXMiOlsiVGV4dHVyZUJhc2VXZWJHTCIsIlRleHR1cmVCYXNlV2ViR0wuY29uc3RydWN0b3IiLCJUZXh0dXJlQmFzZVdlYkdMLmRpc3Bvc2UiLCJUZXh0dXJlQmFzZVdlYkdMLmdsVGV4dHVyZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxtQkFBbUIsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBRXJGLElBQU0sZ0JBQWdCO0lBS3JCQSxTQUxLQSxnQkFBZ0JBLENBS1RBLEVBQXdCQTtRQUg3QkMsZ0JBQVdBLEdBQVVBLEVBQUVBLENBQUNBO1FBSzlCQSxJQUFJQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxDQUFDQTtJQUNmQSxDQUFDQTtJQUVNRCxrQ0FBT0EsR0FBZEE7UUFFQ0UsTUFBTUEscUNBQXFDQSxDQUFDQTtJQUM3Q0EsQ0FBQ0E7SUFFREYsc0JBQVdBLHVDQUFTQTthQUFwQkE7WUFFQ0csTUFBTUEsSUFBSUEsbUJBQW1CQSxFQUFFQSxDQUFDQTtRQUNqQ0EsQ0FBQ0E7OztPQUFBSDtJQUNGQSx1QkFBQ0E7QUFBREEsQ0FuQkEsQUFtQkNBLElBQUE7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiYmFzZS9UZXh0dXJlQmFzZVdlYkdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuXG5jbGFzcyBUZXh0dXJlQmFzZVdlYkdMXG57XG5cdHB1YmxpYyB0ZXh0dXJlVHlwZTpzdHJpbmcgPSBcIlwiO1xuXHRwdWJsaWMgX2dsOldlYkdMUmVuZGVyaW5nQ29udGV4dDtcblxuXHRjb25zdHJ1Y3RvcihnbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQpXG5cdHtcblx0XHR0aGlzLl9nbCA9IGdsO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKTp2b2lkXG5cdHtcblx0XHR0aHJvdyBcIkFic3RyYWN0IG1ldGhvZCBtdXN0IGJlIG92ZXJyaWRkZW4uXCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGdsVGV4dHVyZSgpOldlYkdMVGV4dHVyZVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxufVxuXG5leHBvcnQgPSBUZXh0dXJlQmFzZVdlYkdMOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/TextureBaseWebGL.ts b/lib/base/TextureBaseWebGL.ts similarity index 100% rename from lib/core/stagegl/TextureBaseWebGL.ts rename to lib/base/TextureBaseWebGL.ts diff --git a/lib/core/stagegl/TextureFlash.js b/lib/base/TextureFlash.js similarity index 52% rename from lib/core/stagegl/TextureFlash.js rename to lib/base/TextureFlash.js index b5a9c084..478d3512 100755 --- a/lib/core/stagegl/TextureFlash.js +++ b/lib/base/TextureFlash.js @@ -6,8 +6,8 @@ var __extends = this.__extends || function (d, b) { }; var BitmapData = require("awayjs-core/lib/base/BitmapData"); var ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); var TextureFlash = (function (_super) { __extends(TextureFlash, _super); function TextureFlash(context, width, height, format, forRTT, streaming) { @@ -66,4 +66,4 @@ var TextureFlash = (function (_super) { })(ResourceBaseFlash); module.exports = TextureFlash; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvdGV4dHVyZWZsYXNoLnRzIl0sIm5hbWVzIjpbIlRleHR1cmVGbGFzaCIsIlRleHR1cmVGbGFzaC5jb25zdHJ1Y3RvciIsIlRleHR1cmVGbGFzaC53aWR0aCIsIlRleHR1cmVGbGFzaC5oZWlnaHQiLCJUZXh0dXJlRmxhc2guZGlzcG9zZSIsIlRleHR1cmVGbGFzaC51cGxvYWRGcm9tRGF0YSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxVQUFVLFdBQWUsaUNBQWlDLENBQUMsQ0FBQztBQUNuRSxJQUFPLGFBQWEsV0FBYyxxQ0FBcUMsQ0FBQyxDQUFDO0FBSXpFLElBQU8sT0FBTyxXQUFnQix5Q0FBeUMsQ0FBQyxDQUFDO0FBQ3pFLElBQU8saUJBQWlCLFdBQWEsbURBQW1ELENBQUMsQ0FBQztBQUUxRixJQUFNLFlBQVk7SUFBU0EsVUFBckJBLFlBQVlBLFVBQTBCQTtJQWdCM0NBLFNBaEJLQSxZQUFZQSxDQWdCTEEsT0FBc0JBLEVBQUVBLEtBQVlBLEVBQUVBLE1BQWFBLEVBQUVBLE1BQWFBLEVBQUVBLE1BQWNBLEVBQUVBLFNBQXlCQTtRQUF6QkMseUJBQXlCQSxHQUF6QkEsaUJBQXlCQTtRQUV4SEEsaUJBQU9BLENBQUNBO1FBRVJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUNwQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsTUFBTUEsQ0FBQ0E7UUFFdEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLFdBQVdBLEVBQUVBLENBQUNBLE1BQU1BLEdBQUVBLE9BQU9BLENBQUNBLFNBQVNBLEdBQUdBLE9BQU9BLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLEdBQUdBLEtBQUtBLEdBQUdBLEdBQUdBLEdBQUdBLE1BQU1BLEdBQUdBLEdBQUdBLEdBQUdBLFNBQVNBLEdBQUdBLEdBQUdBLEdBQUdBLE1BQU1BLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2xMQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUNwQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDbkNBLENBQUNBO0lBckJERCxzQkFBV0EsK0JBQUtBO2FBQWhCQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUNwQkEsQ0FBQ0E7OztPQUFBRjtJQUVEQSxzQkFBV0EsZ0NBQU1BO2FBQWpCQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUNyQkEsQ0FBQ0E7OztPQUFBSDtJQWVNQSw4QkFBT0EsR0FBZEE7UUFFQ0ksSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDbEdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN0QkEsQ0FBQ0E7SUFJTUoscUNBQWNBLEdBQXJCQSxVQUFzQkEsSUFBUUEsRUFBRUEsUUFBbUJBO1FBQW5CSyx3QkFBbUJBLEdBQW5CQSxZQUFtQkE7UUFFbERBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLFlBQVlBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hDQSxJQUFJQSxHQUFpQkEsSUFBS0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDM0NBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLFlBQVlBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDN0NBLElBQUlBLEdBQUdBLEdBQUdBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1lBQzNDQSxJQUFJQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUNuQkEsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDcEJBLEdBQUdBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBO1lBQ2RBLEdBQUdBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBO1lBQ2ZBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQy9CQSxHQUFHQSxDQUFDQSxTQUFTQSxDQUFDQSxJQUFJQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUMxQkEsSUFBSUEsR0FBR0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDMUNBLENBQUNBO1FBRURBLElBQUlBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQ1pBLElBQUlBLEtBQUtBLEdBQUdBLGFBQWFBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUE7WUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFVEEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxHQUFHQSxHQUFHQSxRQUFRQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxJQUFJQSxRQUFRQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxJQUFJQSxRQUFRQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFHQSxLQUFLQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUMvTEEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBQ0ZMLG1CQUFDQTtBQUFEQSxDQS9EQSxBQStEQ0EsRUEvRDBCLGlCQUFpQixFQStEM0M7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL1RleHR1cmVGbGFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IEJ5dGVBcnJheUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlCYXNlXCIpO1xuXG5pbXBvcnQgQ29udGV4dFN0YWdlM0RcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dFN0YWdlM0RcIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lUZXh0dXJlXCIpO1xuaW1wb3J0IE9wQ29kZXNcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL09wQ29kZXNcIik7XG5pbXBvcnQgUmVzb3VyY2VCYXNlRmxhc2hcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1Jlc291cmNlQmFzZUZsYXNoXCIpO1xuXG5jbGFzcyBUZXh0dXJlRmxhc2ggZXh0ZW5kcyBSZXNvdXJjZUJhc2VGbGFzaCBpbXBsZW1lbnRzIElUZXh0dXJlXG57XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dFN0YWdlM0Q7XG5cdHByaXZhdGUgX3dpZHRoOm51bWJlcjtcblx0cHJpdmF0ZSBfaGVpZ2h0Om51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IHdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fd2lkdGg7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2hlaWdodDtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6Q29udGV4dFN0YWdlM0QsIHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgZm9ybWF0OnN0cmluZywgZm9yUlRUOmJvb2xlYW4sIHN0cmVhbWluZzpib29sZWFuID0gZmFsc2UpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cdFx0dGhpcy5fd2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG5cblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuaW5pdFRleHR1cmUsIChmb3JSVFQ/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlKSkgKyB3aWR0aCArIFwiLFwiICsgaGVpZ2h0ICsgXCIsXCIgKyBzdHJlYW1pbmcgKyBcIixcIiArIGZvcm1hdCArIFwiJFwiKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZGlzcG9zZVRleHR1cmUpICsgdGhpcy5fcElkLnRvU3RyaW5nKCkgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5faVJlbW92ZVJlc291cmNlKHRoaXMpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIG1pcGxldmVsPzpudW1iZXIpO1xuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoZGF0YTphbnksIG1pcGxldmVsOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEJpdG1hcERhdGEpIHtcblx0XHRcdGRhdGEgPSAoPEJpdG1hcERhdGE+IGRhdGEpLmltYWdlRGF0YS5kYXRhO1xuXHRcdH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdHZhciBjYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRcdFx0dmFyIHcgPSBkYXRhLndpZHRoO1xuXHRcdFx0dmFyIGggPSBkYXRhLmhlaWdodDtcblx0XHRcdGNhbi53aWR0aCA9IHc7XG5cdFx0XHRjYW4uaGVpZ2h0ID0gaDtcblx0XHRcdHZhciBjdHggPSBjYW4uZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdFx0Y3R4LmRyYXdJbWFnZShkYXRhLCAwLCAwKTtcblx0XHRcdGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHcsIGgpLmRhdGE7XG5cdFx0fVxuXG5cdFx0dmFyIHBvcyA9IDA7XG5cdFx0dmFyIGJ5dGVzID0gQnl0ZUFycmF5QmFzZS5pbnRlcm5hbEdldEJhc2U2NFN0cmluZyhkYXRhLmxlbmd0aCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGRhdGFbcG9zKytdO1xuXHRcdH0sIG51bGwpO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEJ5dGVzVGV4dHVyZSkgKyB0aGlzLl9wSWQgKyBcIixcIiArIG1pcGxldmVsICsgXCIsXCIgKyAodGhpcy5fd2lkdGggPj4gbWlwbGV2ZWwpICsgXCIsXCIgKyAodGhpcy5faGVpZ2h0ID4+IG1pcGxldmVsKSArIFwiLFwiICsgYnl0ZXMgKyBcIiVcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVGV4dHVyZUZsYXNoOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3RleHR1cmVmbGFzaC50cyJdLCJuYW1lcyI6WyJUZXh0dXJlRmxhc2giLCJUZXh0dXJlRmxhc2guY29uc3RydWN0b3IiLCJUZXh0dXJlRmxhc2gud2lkdGgiLCJUZXh0dXJlRmxhc2guaGVpZ2h0IiwiVGV4dHVyZUZsYXNoLmRpc3Bvc2UiLCJUZXh0dXJlRmxhc2gudXBsb2FkRnJvbURhdGEiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sVUFBVSxXQUFlLGlDQUFpQyxDQUFDLENBQUM7QUFDbkUsSUFBTyxhQUFhLFdBQWMscUNBQXFDLENBQUMsQ0FBQztBQUl6RSxJQUFPLE9BQU8sV0FBZ0IsaUNBQWlDLENBQUMsQ0FBQztBQUNqRSxJQUFPLGlCQUFpQixXQUFhLDJDQUEyQyxDQUFDLENBQUM7QUFFbEYsSUFBTSxZQUFZO0lBQVNBLFVBQXJCQSxZQUFZQSxVQUEwQkE7SUFnQjNDQSxTQWhCS0EsWUFBWUEsQ0FnQkxBLE9BQXNCQSxFQUFFQSxLQUFZQSxFQUFFQSxNQUFhQSxFQUFFQSxNQUFhQSxFQUFFQSxNQUFjQSxFQUFFQSxTQUF5QkE7UUFBekJDLHlCQUF5QkEsR0FBekJBLGlCQUF5QkE7UUFFeEhBLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDcEJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE1BQU1BLENBQUNBO1FBRXRCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxXQUFXQSxFQUFFQSxDQUFDQSxNQUFNQSxHQUFFQSxPQUFPQSxDQUFDQSxTQUFTQSxHQUFHQSxPQUFPQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxHQUFHQSxLQUFLQSxHQUFHQSxHQUFHQSxHQUFHQSxNQUFN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QUNBLGtCQUFrQkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsR0FBR0EsR0FBR0EsUUFBUUEsR0FBR0EsR0FBR0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsUUFBUUEsQ0FBQ0EsR0FBR0EsR0FBR0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsSUFBSUEsUUFBUUEsQ0FBQ0EsR0FBR0EsR0FBR0EsR0FBR0EsS0FBS0EsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDL0xBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUNGTCxtQkFBQ0E7QUFBREEsQ0EvREEsQUErRENBLEVBL0QwQixpQkFBaUIsRUErRDNDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImJhc2UvVGV4dHVyZUZsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgQnl0ZUFycmF5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheUJhc2VcIik7XG5cbmltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dFN0YWdlM0RcIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZVwiKTtcbmltcG9ydCBPcENvZGVzXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvT3BDb2Rlc1wiKTtcbmltcG9ydCBSZXNvdXJjZUJhc2VGbGFzaFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1Jlc291cmNlQmFzZUZsYXNoXCIpO1xuXG5jbGFzcyBUZXh0dXJlRmxhc2ggZXh0ZW5kcyBSZXNvdXJjZUJhc2VGbGFzaCBpbXBsZW1lbnRzIElUZXh0dXJlXG57XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dFN0YWdlM0Q7XG5cdHByaXZhdGUgX3dpZHRoOm51bWJlcjtcblx0cHJpdmF0ZSBfaGVpZ2h0Om51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IHdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fd2lkdGg7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2hlaWdodDtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6Q29udGV4dFN0YWdlM0QsIHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgZm9ybWF0OnN0cmluZywgZm9yUlRUOmJvb2xlYW4sIHN0cmVhbWluZzpib29sZWFuID0gZmFsc2UpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cdFx0dGhpcy5fd2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG5cblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuaW5pdFRleHR1cmUsIChmb3JSVFQ/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlKSkgKyB3aWR0aCArIFwiLFwiICsgaGVpZ2h0ICsgXCIsXCIgKyBzdHJlYW1pbmcgKyBcIixcIiArIGZvcm1hdCArIFwiJFwiKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZGlzcG9zZVRleHR1cmUpICsgdGhpcy5fcElkLnRvU3RyaW5nKCkgKyBcIixcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdFx0dGhpcy5fY29udGV4dC5faVJlbW92ZVJlc291cmNlKHRoaXMpO1xuXG5cdFx0dGhpcy5fY29udGV4dCA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIG1pcGxldmVsPzpudW1iZXIpO1xuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoZGF0YTphbnksIG1pcGxldmVsOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEJpdG1hcERhdGEpIHtcblx0XHRcdGRhdGEgPSAoPEJpdG1hcERhdGE+IGRhdGEpLmltYWdlRGF0YS5kYXRhO1xuXHRcdH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcblx0XHRcdHZhciBjYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRcdFx0dmFyIHcgPSBkYXRhLndpZHRoO1xuXHRcdFx0dmFyIGggPSBkYXRhLmhlaWdodDtcblx0XHRcdGNhbi53aWR0aCA9IHc7XG5cdFx0XHRjYW4uaGVpZ2h0ID0gaDtcblx0XHRcdHZhciBjdHggPSBjYW4uZ2V0Q29udGV4dChcIjJkXCIpO1xuXHRcdFx0Y3R4LmRyYXdJbWFnZShkYXRhLCAwLCAwKTtcblx0XHRcdGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHcsIGgpLmRhdGE7XG5cdFx0fVxuXG5cdFx0dmFyIHBvcyA9IDA7XG5cdFx0dmFyIGJ5dGVzID0gQnl0ZUFycmF5QmFzZS5pbnRlcm5hbEdldEJhc2U2NFN0cmluZyhkYXRhLmxlbmd0aCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGRhdGFbcG9zKytdO1xuXHRcdH0sIG51bGwpO1xuXG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEJ5dGVzVGV4dHVyZSkgKyB0aGlzLl9wSWQgKyBcIixcIiArIG1pcGxldmVsICsgXCIsXCIgKyAodGhpcy5fd2lkdGggPj4gbWlwbGV2ZWwpICsgXCIsXCIgKyAodGhpcy5faGVpZ2h0ID4+IG1pcGxldmVsKSArIFwiLFwiICsgYnl0ZXMgKyBcIiVcIik7XG5cdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVGV4dHVyZUZsYXNoOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/TextureFlash.ts b/lib/base/TextureFlash.ts similarity index 86% rename from lib/core/stagegl/TextureFlash.ts rename to lib/base/TextureFlash.ts index 80962be7..059c4c67 100644 --- a/lib/core/stagegl/TextureFlash.ts +++ b/lib/base/TextureFlash.ts @@ -1,10 +1,10 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArrayBase = require("awayjs-core/lib/utils/ByteArrayBase"); -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class TextureFlash extends ResourceBaseFlash implements ITexture { diff --git a/lib/base/TextureWebGL.js b/lib/base/TextureWebGL.js new file mode 100755 index 00000000..c6625ac4 --- /dev/null +++ b/lib/base/TextureWebGL.js @@ -0,0 +1,86 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var BitmapData = require("awayjs-core/lib/base/BitmapData"); +var TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); +var TextureWebGL = (function (_super) { + __extends(TextureWebGL, _super); + function TextureWebGL(gl, width, height) { + _super.call(this, gl); + this.textureType = "texture2d"; + this._width = width; + this._height = height; + this._glTexture = this._gl.createTexture(); + } + TextureWebGL.prototype.dispose = function () { + this._gl.deleteTexture(this._glTexture); + }; + Object.defineProperty(TextureWebGL.prototype, "width", { + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TextureWebGL.prototype, "height", { + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TextureWebGL.prototype, "frameBuffer", { + get: function () { + if (!this._frameBuffer) { + this._frameBuffer = this._gl.createFramebuffer(); + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer); + this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); + this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null); + var renderBuffer = this._gl.createRenderbuffer(); + this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer); + this._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height); + this._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0); + this._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer); + this._gl.bindTexture(this._gl.TEXTURE_2D, null); + this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null); + this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); + } + return this._frameBuffer; + }, + enumerable: true, + configurable: true + }); + TextureWebGL.prototype.uploadFromData = function (data, miplevel) { + if (miplevel === void 0) { miplevel = 0; } + if (data instanceof BitmapData) + data = data.imageData; + this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); + this._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); + this._gl.bindTexture(this._gl.TEXTURE_2D, null); + }; + TextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { + if (async === void 0) { async = false; } + var ext = this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + //this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this) + }; + Object.defineProperty(TextureWebGL.prototype, "glTexture", { + get: function () { + return this._glTexture; + }, + enumerable: true, + configurable: true + }); + TextureWebGL.prototype.generateMipmaps = function () { + //TODO: implement generating mipmaps + //this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture ); + //this._gl.generateMipmap(this._gl.TEXTURE_2D); + //this._gl.bindTexture( this._gl.TEXTURE_2D, null ); + }; + return TextureWebGL; +})(TextureBaseWebGL); +module.exports = TextureWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3RleHR1cmV3ZWJnbC50cyJdLCJuYW1lcyI6WyJUZXh0dXJlV2ViR0wiLCJUZXh0dXJlV2ViR0wuY29uc3RydWN0b3IiLCJUZXh0dXJlV2ViR0wuZGlzcG9zZSIsIlRleHR1cmVXZWJHTC53aWR0aCIsIlRleHR1cmVXZWJHTC5oZWlnaHQiLCJUZXh0dXJlV2ViR0wuZnJhbWVCdWZmZXIiLCJUZXh0dXJlV2ViR0wudXBsb2FkRnJvbURhdGEiLCJUZXh0dXJlV2ViR0wudXBsb2FkQ29tcHJlc3NlZFRleHR1cmVGcm9tQnl0ZUFycmF5IiwiVGV4dHVyZVdlYkdMLmdsVGV4dHVyZSIsIlRleHR1cmVXZWJHTC5nZW5lcmF0ZU1pcG1hcHMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sVUFBVSxXQUFlLGlDQUFpQyxDQUFDLENBQUM7QUFJbkUsSUFBTyxnQkFBZ0IsV0FBYywwQ0FBMEMsQ0FBQyxDQUFDO0FBRWpGLElBQU0sWUFBWTtJQUFTQSxVQUFyQkEsWUFBWUEsVUFBeUJBO0lBWTFDQSxTQVpLQSxZQUFZQSxDQVlMQSxFQUF3QkEsRUFBRUEsS0FBWUEsRUFBRUEsTUFBYUE7UUFFaEVDLGtCQUFNQSxFQUFFQSxDQUFDQSxDQUFDQTtRQVhKQSxnQkFBV0EsR0FBVUEsV0FBV0EsQ0FBQ0E7UUFZdkNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLEtBQUtBLENBQUNBO1FBQ3BCQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxNQUFNQSxDQUFDQTtRQUV0QkEsSUFBSUEsQ0FBQ0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsRUFBRUEsQ0FBQ0E7SUFDNUNBLENBQUNBO0lBRU1ELDhCQUFPQSxHQUFkQTtRQUVDRSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQTtJQUN6Q0EsQ0FBQ0E7SUFFREYsc0JBQVdBLCtCQUFLQTthQUFoQkE7WUFFQ0csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDcEJBLENBQUNBOzs7T0FBQUg7SUFFREEsc0JBQVdBLGdDQUFNQTthQUFqQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDckJBLENBQUNBOzs7T0FBQUo7SUFFREEsc0JBQVdBLHFDQUFXQTthQUF0QkE7WUFFQ0ssRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3hCQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxpQkFBaUJBLEVBQUVBLENBQUNBO2dCQUNqREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0E7Z0JBQ2xFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxFQUFFQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQTtnQkFDM0RBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLEVBQUVBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO2dCQUV0SUEsSUFBSUEsWUFBWUEsR0FBcUJBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGtCQUFrQkEsRUFBRUEsQ0FBQ0E7Z0JBQ25FQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBO2dCQUMvREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxpQkFBaUJBLEVBQUVBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO2dCQUUzR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxpQkFBaUJBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLFVBQVVBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO2dCQUN6SEEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBO2dCQUV2SEEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7Z0JBQ2hEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDdERBLENBQUNBO1lBRURBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBO1FBQzFCQSxDQUFDQTs7O09BQUFMO0lBSU1BLHFDQUFjQSxHQUFyQkEsVUFBc0JBLElBQVFBLEVBQUVBLFFBQW1CQTtRQUFuQk0sd0JBQW1CQSxHQUFuQkEsWUFBbUJBO1FBRWxEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxZQUFZQSxVQUFVQSxDQUFDQTtZQUM5QkEsSUFBSUEsR0FBaUJBLElBQUtBLENBQUNBLFNBQVNBLENBQUNBO1FBRXRDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxFQUFFQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQTtRQUMzREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsRUFBRUEsUUFBUUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDL0dBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO0lBQ2pEQSxDQUFDQTtJQUVNTiwyREFBb0NBLEdBQTNDQSxVQUE0Q0EsSUFBY0EsRUFBRUEsZUFBZUEsQ0FBUUEsUUFBREEsQUFBU0EsRUFBRUEsS0FBcUJBO1FBQXJCTyxxQkFBcUJBLEdBQXJCQSxhQUFxQkE7UUFFakhBLElBQUlBLEdBQUdBLEdBQVVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLENBQUNBLHNDQUFzQ0EsQ0FBQ0EsQ0FBQ0E7UUFDL0VBLDZEQUE2REE7SUFDOURBLENBQUNBO0lBRURQLHNCQUFXQSxtQ0FBU0E7YUFBcEJBO1lBRUNRLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBO1FBQ3hCQSxDQUFDQTs7O09BQUFSO0lBRU1BLHNDQUFlQSxHQUF0QkE7UUFFQ1Msb0NBQW9DQTtRQUNwQ0EsK0RBQStEQTtRQUMvREEsK0NBQStDQTtRQUMvQ0Esb0RBQW9EQTtJQUNyREEsQ0FBQ0E7SUFDRlQsbUJBQUNBO0FBQURBLENBekZBLEFBeUZDQSxFQXpGMEIsZ0JBQWdCLEVBeUYxQztBQUVELEFBQXNCLGlCQUFiLFlBQVksQ0FBQyIsImZpbGUiOiJiYXNlL1RleHR1cmVXZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlQmFzZVdlYkdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9UZXh0dXJlQmFzZVdlYkdMXCIpO1xuXG5jbGFzcyBUZXh0dXJlV2ViR0wgZXh0ZW5kcyBUZXh0dXJlQmFzZVdlYkdMIGltcGxlbWVudHMgSVRleHR1cmVcbntcblxuXHRwdWJsaWMgdGV4dHVyZVR5cGU6c3RyaW5nID0gXCJ0ZXh0dXJlMmRcIjtcblxuXHRwcml2YXRlIF93aWR0aDpudW1iZXI7XG5cdHByaXZhdGUgX2hlaWdodDpudW1iZXI7XG5cblx0cHJpdmF0ZSBfZnJhbWVCdWZmZXI6V2ViR0xGcmFtZWJ1ZmZlcjtcblxuXHRwcml2YXRlIF9nbFRleHR1cmU6V2ViR0xUZXh0dXJlO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dCwgd2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoZ2wpO1xuXHRcdHRoaXMuX3dpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdFx0dGhpcy5fZ2xUZXh0dXJlID0gdGhpcy5fZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLl9nbFRleHR1cmUpO1xuXHR9XG5cblx0cHVibGljIGdldCB3aWR0aCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3dpZHRoO1xuXHR9XG5cblx0cHVibGljIGdldCBoZWlnaHQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGZyYW1lQnVmZmVyKCk6V2ViR0xGcmFtZWJ1ZmZlclxuXHR7XG5cdFx0aWYgKCF0aGlzLl9mcmFtZUJ1ZmZlcikge1xuXHRcdFx0dGhpcy5fZnJhbWVCdWZmZXIgPSB0aGlzLl9nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcdFx0dGhpcy5fZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMuX2dsLkZSQU1FQlVGRkVSLCB0aGlzLl9mcmFtZUJ1ZmZlcik7XG5cdFx0XHR0aGlzLl9nbC5iaW5kVGV4dHVyZSh0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlzLl9nbFRleHR1cmUpO1xuXHRcdFx0dGhpcy5fZ2wudGV4SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0LCAwLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHRcdFx0dmFyIHJlbmRlckJ1ZmZlcjpXZWJHTFJlbmRlcmJ1ZmZlciA9IHRoaXMuX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuXHRcdFx0dGhpcy5fZ2wuYmluZFJlbmRlcmJ1ZmZlcih0aGlzLl9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlckJ1ZmZlcik7XG5cdFx0XHR0aGlzLl9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKHRoaXMuX2dsLlJFTkRFUkJVRkZFUiwgdGhpcy5fZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xuXG5cdFx0XHR0aGlzLl9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0aGlzLl9nbC5GUkFNRUJVRkZFUiwgdGhpcy5fZ2wuQ09MT1JfQVRUQUNITUVOVDAsIHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2dsVGV4dHVyZSwgMCk7XG5cdFx0XHR0aGlzLl9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgdGhpcy5fZ2wuREVQVEhfQVRUQUNITUVOVCwgdGhpcy5fZ2wuUkVOREVSQlVGRkVSLCByZW5kZXJCdWZmZXIpO1xuXG5cdFx0XHR0aGlzLl9nbC5iaW5kVGV4dHVyZSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTtcblx0XHRcdHRoaXMuX2dsLmJpbmRSZW5kZXJidWZmZXIodGhpcy5fZ2wuUkVOREVSQlVGRkVSLCBudWxsKTtcblx0XHRcdHRoaXMuX2dsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGJpdG1hcERhdGE6Qml0bWFwRGF0YSwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHB1YmxpYyB1cGxvYWRGcm9tRGF0YShpbWFnZTpIVE1MSW1hZ2VFbGVtZW50LCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGRhdGE6YW55LCBtaXBsZXZlbDpudW1iZXIgPSAwKVxuXHR7XG5cdFx0aWYgKGRhdGEgaW5zdGFuY2VvZiBCaXRtYXBEYXRhKVxuXHRcdFx0ZGF0YSA9ICg8Qml0bWFwRGF0YT4gZGF0YSkuaW1hZ2VEYXRhO1xuXG5cdFx0dGhpcy5fZ2wuYmluZFRleHR1cmUodGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2xUZXh0dXJlKTtcblx0XHR0aGlzLl9nbC50ZXhJbWFnZTJEKHRoaXMuX2dsLlRFWFRVUkVfMkQsIG1pcGxldmVsLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5SR0JBLCB0aGlzLl9nbC5VTlNJR05FRF9CWVRFLCBkYXRhKTtcblx0XHR0aGlzLl9nbC5iaW5kVGV4dHVyZSh0aGlzLl9nbC5URVhUVVJFXzJELCBudWxsKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkoZGF0YTpCeXRlQXJyYXksIGJ5dGVBcnJheU9mZnNldDpudW1iZXIgLyp1aW50Ki8sIGFzeW5jOmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdHZhciBleHQ6T2JqZWN0ID0gdGhpcy5fZ2wuZ2V0RXh0ZW5zaW9uKFwiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjXCIpO1xuXHRcdC8vdGhpcy5fZ2wuY29tcHJlc3NlZFRleEltYWdlMkQodGhpcy5fZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcylcblx0fVxuXG5cdHB1YmxpYyBnZXQgZ2xUZXh0dXJlKCk6V2ViR0xUZXh0dXJlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZ2xUZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIGdlbmVyYXRlTWlwbWFwcygpXG5cdHtcblx0XHQvL1RPRE86IGltcGxlbWVudCBnZW5lcmF0aW5nIG1pcG1hcHNcblx0XHQvL3RoaXMuX2dsLmJpbmRUZXh0dXJlKCB0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlzLl9nbFRleHR1cmUgKTtcblx0XHQvL3RoaXMuX2dsLmdlbmVyYXRlTWlwbWFwKHRoaXMuX2dsLlRFWFRVUkVfMkQpO1xuXHRcdC8vdGhpcy5fZ2wuYmluZFRleHR1cmUoIHRoaXMuX2dsLlRFWFRVUkVfMkQsIG51bGwgKTtcblx0fVxufVxuXG5leHBvcnQgPSBUZXh0dXJlV2ViR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/TextureWebGL.ts b/lib/base/TextureWebGL.ts similarity index 94% rename from lib/core/stagegl/TextureWebGL.ts rename to lib/base/TextureWebGL.ts index 0992a130..fe291fda 100644 --- a/lib/core/stagegl/TextureWebGL.ts +++ b/lib/base/TextureWebGL.ts @@ -1,8 +1,8 @@ import BitmapData = require("awayjs-core/lib/base/BitmapData"); import ByteArray = require("awayjs-core/lib/utils/ByteArray"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); -import TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); +import TextureBaseWebGL = require("awayjs-stagegl/lib/base/TextureBaseWebGL"); class TextureWebGL extends TextureBaseWebGL implements ITexture { diff --git a/lib/core/stagegl/VertexBufferFlash.js b/lib/base/VertexBufferFlash.js similarity index 52% rename from lib/core/stagegl/VertexBufferFlash.js rename to lib/base/VertexBufferFlash.js index 76b78f4c..7e832d0b 100755 --- a/lib/core/stagegl/VertexBufferFlash.js +++ b/lib/base/VertexBufferFlash.js @@ -4,8 +4,8 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +var OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +var ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); var VertexBufferFlash = (function (_super) { __extends(VertexBufferFlash, _super); function VertexBufferFlash(context, numVertices, data32PerVertex) { @@ -45,4 +45,4 @@ var VertexBufferFlash = (function (_super) { })(ResourceBaseFlash); module.exports = VertexBufferFlash; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvdmVydGV4YnVmZmVyZmxhc2gudHMiXSwibmFtZXMiOlsiVmVydGV4QnVmZmVyRmxhc2giLCJWZXJ0ZXhCdWZmZXJGbGFzaC5jb25zdHJ1Y3RvciIsIlZlcnRleEJ1ZmZlckZsYXNoLnVwbG9hZEZyb21BcnJheSIsIlZlcnRleEJ1ZmZlckZsYXNoLm51bVZlcnRpY2VzIiwiVmVydGV4QnVmZmVyRmxhc2guZGF0YTMyUGVyVmVydGV4IiwiVmVydGV4QnVmZmVyRmxhc2guZGlzcG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxPQUFPLFdBQWdCLHlDQUF5QyxDQUFDLENBQUM7QUFDekUsSUFBTyxpQkFBaUIsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBRTFGLElBQU0saUJBQWlCO0lBQVNBLFVBQTFCQSxpQkFBaUJBLFVBQTBCQTtJQU1oREEsU0FOS0EsaUJBQWlCQSxDQU1WQSxPQUFzQkEsRUFBRUEsV0FBa0JBLEVBQUVBLGVBQXNCQTtRQUU3RUMsaUJBQU9BLENBQUNBO1FBRVJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxXQUFXQSxDQUFDQTtRQUNoQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxlQUFlQSxDQUFDQTtRQUN4Q0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxlQUFlQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxXQUFXQSxDQUFDQSxRQUFRQSxFQUFFQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN6SUEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ25DQSxDQUFDQTtJQUVNRCwyQ0FBZUEsR0FBdEJBLFVBQXVCQSxJQUFhQSxFQUFFQSxXQUFrQkEsRUFBRUEsV0FBa0JBO1FBRTNFRSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSx1QkFBdUJBLEVBQUVBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLE9BQU9BLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLEVBQUVBLEdBQUdBLEdBQUdBLEdBQUdBLENBQUNBLFdBQVdBLEVBQUVBLFdBQVdBLENBQUNBLENBQUNBLElBQUlBLEVBQUVBLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3pLQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFREYsc0JBQVdBLDBDQUFXQTthQUF0QkE7WUFFQ0csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0E7UUFDMUJBLENBQUNBOzs7T0FBQUg7SUFFREEsc0JBQVdBLDhDQUFlQTthQUExQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtRQUM5QkEsQ0FBQ0E7OztPQUFBSjtJQUVNQSxtQ0FBT0EsR0FBZEE7UUFFQ0ssSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsbUJBQW1CQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN2R0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUNGTCx3QkFBQ0E7QUFBREEsQ0ExQ0EsQUEwQ0NBLEVBMUMrQixpQkFBaUIsRUEwQ2hEO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9WZXJ0ZXhCdWZmZXJGbGFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGV4dFN0YWdlM0RcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dFN0YWdlM0RcIik7XG5pbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVmVydGV4QnVmZmVyXCIpO1xuaW1wb3J0IE9wQ29kZXNcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL09wQ29kZXNcIik7XG5pbXBvcnQgUmVzb3VyY2VCYXNlRmxhc2hcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1Jlc291cmNlQmFzZUZsYXNoXCIpO1xuXG5jbGFzcyBWZXJ0ZXhCdWZmZXJGbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSVZlcnRleEJ1ZmZlclxue1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRTdGFnZTNEO1xuXHRwcml2YXRlIF9udW1WZXJ0aWNlczpudW1iZXI7XG5cdHByaXZhdGUgX2RhdGEzMlBlclZlcnRleDpudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0U3RhZ2UzRCwgbnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX251bVZlcnRpY2VzID0gbnVtVmVydGljZXM7XG5cdFx0dGhpcy5fZGF0YTMyUGVyVmVydGV4ID0gZGF0YTMyUGVyVmVydGV4O1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0VmVydGV4QnVmZmVyLCBkYXRhMzJQZXJWZXJ0ZXggKyBPcENvZGVzLmludE1hc2spICsgbnVtVmVydGljZXMudG9TdHJpbmcoKSArIFwiLFwiKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0VmVydGV4Om51bWJlciwgbnVtVmVydGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEFycmF5VmVydGV4QnVmZmVyLCB0aGlzLl9wSWQgKyBPcENvZGVzLmludE1hc2spICsgZGF0YS5qb2luKCkgKyBcIiNcIiArIFtzdGFydFZlcnRleCwgbnVtVmVydGljZXNdLmpvaW4oKSArIFwiLFwiKTtcblx0XHR0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtVmVydGljZXMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9udW1WZXJ0aWNlcztcblx0fVxuXG5cdHB1YmxpYyBnZXQgZGF0YTMyUGVyVmVydGV4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTMyUGVyVmVydGV4O1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmRpc3Bvc2VWZXJ0ZXhCdWZmZXIsIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IFZlcnRleEJ1ZmZlckZsYXNoOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3ZlcnRleGJ1ZmZlcmZsYXNoLnRzIl0sIm5hbWVzIjpbIlZlcnRleEJ1ZmZlckZsYXNoIiwiVmVydGV4QnVmZmVyRmxhc2guY29uc3RydWN0b3IiLCJWZXJ0ZXhCdWZmZXJGbGFzaC51cGxvYWRGcm9tQXJyYXkiLCJWZXJ0ZXhCdWZmZXJGbGFzaC5udW1WZXJ0aWNlcyIsIlZlcnRleEJ1ZmZlckZsYXNoLmRhdGEzMlBlclZlcnRleCIsIlZlcnRleEJ1ZmZlckZsYXNoLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQU8sT0FBTyxXQUFnQixpQ0FBaUMsQ0FBQyxDQUFDO0FBQ2pFLElBQU8saUJBQWlCLFdBQWEsMkNBQTJDLENBQUMsQ0FBQztBQUVsRixJQUFNLGlCQUFpQjtJQUFTQSxVQUExQkEsaUJBQWlCQSxVQUEwQkE7SUFNaERBLFNBTktBLGlCQUFpQkEsQ0FNVkEsT0FBc0JBLEVBQUVBLFdBQWtCQSxFQUFFQSxlQUFzQkE7UUFFN0VDLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsV0FBV0EsQ0FBQ0E7UUFDaENBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsZUFBZUEsQ0FBQ0E7UUFDeENBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLGdCQUFnQkEsRUFBRUEsZUFBZUEsR0FBR0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsV0FBV0EsQ0FBQ0EsUUFBUUEsRUFBRUEsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDeklBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUNuQ0EsQ0FBQ0E7SUFFTUQsMkNBQWVBLEdBQXRCQSxVQUF1QkEsSUFBYUEsRUFBRUEsV0FBa0JBLEVBQUVBLFdBQWtCQTtRQUUzRUUsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsdUJBQXVCQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxFQUFFQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxXQUFXQSxDQUFDQSxDQUFDQSxJQUFJQSxFQUFFQSxHQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN6S0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRURGLHNCQUFXQSwwQ0FBV0E7YUFBdEJBO1lBRUNHLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBO1FBQzFCQSxDQUFDQTs7O09BQUFIO0lBRURBLHNCQUFXQSw4Q0FBZUE7YUFBMUJBO1lBRUNJLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0E7UUFDOUJBLENBQUNBOzs7T0FBQUo7SUFFTUEsbUNBQU9BLEdBQWRBO1FBRUNLLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLG1CQUFtQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdkdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN0QkEsQ0FBQ0E7SUFDRkwsd0JBQUNBO0FBQURBLENBMUNBLEFBMENDQSxFQTFDK0IsaUJBQWlCLEVBMENoRDtBQUVELEFBQTJCLGlCQUFsQixpQkFBaUIsQ0FBQyIsImZpbGUiOiJiYXNlL1ZlcnRleEJ1ZmZlckZsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dFN0YWdlM0RcIik7XG5pbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVZlcnRleEJ1ZmZlclwiKTtcbmltcG9ydCBPcENvZGVzXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvT3BDb2Rlc1wiKTtcbmltcG9ydCBSZXNvdXJjZUJhc2VGbGFzaFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1Jlc291cmNlQmFzZUZsYXNoXCIpO1xuXG5jbGFzcyBWZXJ0ZXhCdWZmZXJGbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSVZlcnRleEJ1ZmZlclxue1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRTdGFnZTNEO1xuXHRwcml2YXRlIF9udW1WZXJ0aWNlczpudW1iZXI7XG5cdHByaXZhdGUgX2RhdGEzMlBlclZlcnRleDpudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0U3RhZ2UzRCwgbnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX251bVZlcnRpY2VzID0gbnVtVmVydGljZXM7XG5cdFx0dGhpcy5fZGF0YTMyUGVyVmVydGV4ID0gZGF0YTMyUGVyVmVydGV4O1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0VmVydGV4QnVmZmVyLCBkYXRhMzJQZXJWZXJ0ZXggKyBPcENvZGVzLmludE1hc2spICsgbnVtVmVydGljZXMudG9TdHJpbmcoKSArIFwiLFwiKTtcblx0XHR0aGlzLl9wSWQgPSB0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0XHR0aGlzLl9jb250ZXh0Ll9pQWRkUmVzb3VyY2UodGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0VmVydGV4Om51bWJlciwgbnVtVmVydGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnVwbG9hZEFycmF5VmVydGV4QnVmZmVyLCB0aGlzLl9wSWQgKyBPcENvZGVzLmludE1hc2spICsgZGF0YS5qb2luKCkgKyBcIiNcIiArIFtzdGFydFZlcnRleCwgbnVtVmVydGljZXNdLmpvaW4oKSArIFwiLFwiKTtcblx0XHR0aGlzLl9jb250ZXh0LmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtVmVydGljZXMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9udW1WZXJ0aWNlcztcblx0fVxuXG5cdHB1YmxpYyBnZXQgZGF0YTMyUGVyVmVydGV4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTMyUGVyVmVydGV4O1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dC5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmRpc3Bvc2VWZXJ0ZXhCdWZmZXIsIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IFZlcnRleEJ1ZmZlckZsYXNoOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/VertexBufferFlash.ts b/lib/base/VertexBufferFlash.ts similarity index 79% rename from lib/core/stagegl/VertexBufferFlash.ts rename to lib/base/VertexBufferFlash.ts index d6ccf9d0..8ddc6979 100644 --- a/lib/core/stagegl/VertexBufferFlash.ts +++ b/lib/base/VertexBufferFlash.ts @@ -1,7 +1,7 @@ -import ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); -import OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -import ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); +import ContextStage3D = require("awayjs-stagegl/lib/base/ContextStage3D"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); +import OpCodes = require("awayjs-stagegl/lib/base/OpCodes"); +import ResourceBaseFlash = require("awayjs-stagegl/lib/base/ResourceBaseFlash"); class VertexBufferFlash extends ResourceBaseFlash implements IVertexBuffer { diff --git a/lib/base/VertexBufferWebGL.js b/lib/base/VertexBufferWebGL.js new file mode 100755 index 00000000..0dbc3e99 --- /dev/null +++ b/lib/base/VertexBufferWebGL.js @@ -0,0 +1,42 @@ +var VertexBufferWebGL = (function () { + function VertexBufferWebGL(gl, numVertices, data32PerVertex) { + this._gl = gl; + this._buffer = this._gl.createBuffer(); + this._numVertices = numVertices; + this._data32PerVertex = data32PerVertex; + } + VertexBufferWebGL.prototype.uploadFromArray = function (vertices, startVertex, numVertices) { + this._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer); + //console.log( "** WARNING upload not fully implemented, startVertex & numVertices not considered." ); + // TODO add offsets , startVertex, numVertices * this._data32PerVertex + this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW); + }; + Object.defineProperty(VertexBufferWebGL.prototype, "numVertices", { + get: function () { + return this._numVertices; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VertexBufferWebGL.prototype, "data32PerVertex", { + get: function () { + return this._data32PerVertex; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VertexBufferWebGL.prototype, "glBuffer", { + get: function () { + return this._buffer; + }, + enumerable: true, + configurable: true + }); + VertexBufferWebGL.prototype.dispose = function () { + this._gl.deleteBuffer(this._buffer); + }; + return VertexBufferWebGL; +})(); +module.exports = VertexBufferWebGL; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL3ZlcnRleGJ1ZmZlcndlYmdsLnRzIl0sIm5hbWVzIjpbIlZlcnRleEJ1ZmZlcldlYkdMIiwiVmVydGV4QnVmZmVyV2ViR0wuY29uc3RydWN0b3IiLCJWZXJ0ZXhCdWZmZXJXZWJHTC51cGxvYWRGcm9tQXJyYXkiLCJWZXJ0ZXhCdWZmZXJXZWJHTC5udW1WZXJ0aWNlcyIsIlZlcnRleEJ1ZmZlcldlYkdMLmRhdGEzMlBlclZlcnRleCIsIlZlcnRleEJ1ZmZlcldlYkdMLmdsQnVmZmVyIiwiVmVydGV4QnVmZmVyV2ViR0wuZGlzcG9zZSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTSxpQkFBaUI7SUFRdEJBLFNBUktBLGlCQUFpQkEsQ0FRVkEsRUFBd0JBLEVBQUVBLFdBQWtCQSxFQUFFQSxlQUFzQkE7UUFFL0VDLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBO1FBQ2RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLENBQUNBO1FBQ3ZDQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxXQUFXQSxDQUFDQTtRQUNoQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxlQUFlQSxDQUFDQTtJQUN6Q0EsQ0FBQ0E7SUFFTUQsMkNBQWVBLEdBQXRCQSxVQUF1QkEsUUFBaUJBLEVBQUVBLFdBQWtCQSxFQUFFQSxXQUFrQkE7UUFFL0VFLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1FBRXpEQSxBQUVBQSxzR0FGc0dBO1FBQ3RHQSxzRUFBc0VBO1FBQ3RFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxFQUFFQSxJQUFJQSxZQUFZQSxDQUFDQSxRQUFRQSxDQUFDQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtJQUM5RkEsQ0FBQ0E7SUFFREYsc0JBQVdBLDBDQUFXQTthQUF0QkE7WUFFQ0csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0E7UUFDMUJBLENBQUNBOzs7T0FBQUg7SUFFREEsc0JBQVdBLDhDQUFlQTthQUExQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtRQUM5QkEsQ0FBQ0E7OztPQUFBSjtJQUVEQSxzQkFBV0EsdUNBQVFBO2FBQW5CQTtZQUVDSyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUNyQkEsQ0FBQ0E7OztPQUFBTDtJQUVNQSxtQ0FBT0EsR0FBZEE7UUFFQ00sSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7SUFDckNBLENBQUNBO0lBQ0ZOLHdCQUFDQTtBQUFEQSxDQTVDQSxBQTRDQ0EsSUFBQTtBQUVELEFBQTJCLGlCQUFsQixpQkFBaUIsQ0FBQyIsImZpbGUiOiJiYXNlL1ZlcnRleEJ1ZmZlcldlYkdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJVmVydGV4QnVmZmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVmVydGV4QnVmZmVyXCIpO1xuXG5jbGFzcyBWZXJ0ZXhCdWZmZXJXZWJHTCBpbXBsZW1lbnRzIElWZXJ0ZXhCdWZmZXJcbntcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX251bVZlcnRpY2VzOm51bWJlcjtcblx0cHJpdmF0ZSBfZGF0YTMyUGVyVmVydGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfYnVmZmVyOldlYkdMQnVmZmVyO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dCwgbnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fZ2wgPSBnbDtcblx0XHR0aGlzLl9idWZmZXIgPSB0aGlzLl9nbC5jcmVhdGVCdWZmZXIoKTtcblx0XHR0aGlzLl9udW1WZXJ0aWNlcyA9IG51bVZlcnRpY2VzO1xuXHRcdHRoaXMuX2RhdGEzMlBlclZlcnRleCA9IGRhdGEzMlBlclZlcnRleDtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWRGcm9tQXJyYXkodmVydGljZXM6bnVtYmVyW10sIHN0YXJ0VmVydGV4Om51bWJlciwgbnVtVmVydGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fZ2wuYmluZEJ1ZmZlcih0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIHRoaXMuX2J1ZmZlcik7XG5cblx0XHQvL2NvbnNvbGUubG9nKCBcIioqIFdBUk5JTkcgdXBsb2FkIG5vdCBmdWxseSBpbXBsZW1lbnRlZCwgc3RhcnRWZXJ0ZXggJiBudW1WZXJ0aWNlcyBub3QgY29uc2lkZXJlZC5cIiApO1xuXHRcdC8vIFRPRE8gYWRkIG9mZnNldHMgLCBzdGFydFZlcnRleCwgbnVtVmVydGljZXMgKiB0aGlzLl9kYXRhMzJQZXJWZXJ0ZXhcblx0XHR0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcyksIHRoaXMuX2dsLlNUQVRJQ19EUkFXKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtVmVydGljZXMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9udW1WZXJ0aWNlcztcblx0fVxuXG5cdHB1YmxpYyBnZXQgZGF0YTMyUGVyVmVydGV4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTMyUGVyVmVydGV4O1xuXHR9XG5cblx0cHVibGljIGdldCBnbEJ1ZmZlcigpOldlYkdMQnVmZmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlQnVmZmVyKHRoaXMuX2J1ZmZlcik7XG5cdH1cbn1cblxuZXhwb3J0ID0gVmVydGV4QnVmZmVyV2ViR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/VertexBufferWebGL.ts b/lib/base/VertexBufferWebGL.ts similarity index 93% rename from lib/core/stagegl/VertexBufferWebGL.ts rename to lib/base/VertexBufferWebGL.ts index 3a1ca29e..ba5b54c9 100644 --- a/lib/core/stagegl/VertexBufferWebGL.ts +++ b/lib/base/VertexBufferWebGL.ts @@ -1,4 +1,4 @@ -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); class VertexBufferWebGL implements IVertexBuffer { diff --git a/lib/core/base/Stage.js b/lib/core/base/Stage.js deleted file mode 100755 index 5faee076..00000000 --- a/lib/core/base/Stage.js +++ /dev/null @@ -1,491 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var Event = require("awayjs-core/lib/events/Event"); -var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var CSS = require("awayjs-core/lib/utils/CSS"); -var ContextMode = require("awayjs-display/lib/display/ContextMode"); -var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -var ContextWebGL = require("awayjs-stagegl/lib/core/stagegl/ContextWebGL"); -/** - * Stage provides a proxy class to handle the creation and attachment of the Context - * (and in turn the back buffer) it uses. Stage should never be created directly, - * but requested through StageManager. - * - * @see away.managers.StageManager - * - */ -var Stage = (function (_super) { - __extends(Stage, _super); - function Stage(container, stageIndex, stageManager, forceSoftware, profile) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - _super.call(this); - this._x = 0; - this._y = 0; - //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame - this._stageIndex = -1; - this._antiAlias = 0; - //private var _activeVertexBuffers : Vector. = new Vector.(8, true); - //private var _activeTextures : Vector. = new Vector.(8, true); - this._renderTarget = null; - this._renderSurfaceSelector = 0; - //private _mouse3DManager:away.managers.Mouse3DManager; - //private _touch3DManager:Touch3DManager; //TODO: imeplement dependency Touch3DManager - this._initialised = false; - this._container = container; - this._stageIndex = stageIndex; - this._stageManager = stageManager; - this._viewPort = new Rectangle(); - this._enableDepthAndStencil = true; - CSS.setElementX(this._container, 0); - CSS.setElementY(this._container, 0); - this.visible = true; - } - /** - * Requests a Context object to attach to the managed gl canvas. - */ - Stage.prototype.requestContext = function (forceSoftware, profile, mode) { - // If forcing software, we can be certain that the - // returned Context will be running software mode. - // If not, we can't be sure and should stick to the - // old value (will likely be same if re-requesting.) - var _this = this; - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - if (this._usesSoftwareRendering != null) - this._usesSoftwareRendering = forceSoftware; - this._profile = profile; - try { - if (mode == ContextMode.FLASH) - new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); - else - this._context = new ContextWebGL(this._container, this._stageIndex); - } - catch (e) { - try { - if (mode == ContextMode.AUTO) - new ContextStage3D(this._container, this._stageIndex, function (context) { return _this._callback(context); }); - else - this.dispatchEvent(new Event(Event.ERROR)); - } - catch (e) { - this.dispatchEvent(new Event(Event.ERROR)); - } - } - if (this._context) - this._callback(this._context); - }; - Object.defineProperty(Stage.prototype, "width", { - /** - * The width of the gl canvas - */ - get: function () { - return this._width; - }, - set: function (val) { - if (this._width == val) - return; - CSS.setElementWidth(this._container, val); - this._width = this._viewPort.width = val; - this._backBufferDirty = true; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "height", { - /** - * The height of the gl canvas - */ - get: function () { - return this._height; - }, - set: function (val) { - if (this._height == val) - return; - CSS.setElementHeight(this._container, val); - this._height = this._viewPort.height = val; - this._backBufferDirty = true; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "x", { - /** - * The x position of the gl canvas - */ - get: function () { - return this._x; - }, - set: function (val) { - if (this._x == val) - return; - CSS.setElementX(this._container, val); - this._x = this._viewPort.x = val; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "y", { - /** - * The y position of the gl canvas - */ - get: function () { - return this._y; - }, - set: function (val) { - if (this._y == val) - return; - CSS.setElementY(this._container, val); - this._y = this._viewPort.y = val; - this.notifyViewportUpdated(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "visible", { - get: function () { - return CSS.getElementVisibility(this._container); - }, - set: function (val) { - CSS.setElementVisibility(this._container, val); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "container", { - get: function () { - return this._container; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "context", { - /** - * The Context object associated with the given stage object. - */ - get: function () { - return this._context; - }, - enumerable: true, - configurable: true - }); - Stage.prototype.notifyViewportUpdated = function () { - if (this._viewportDirty) - return; - this._viewportDirty = true; - //if (!this.hasEventListener(StageEvent.VIEWPORT_UPDATED)) - //return; - //if (!_viewportUpdated) - this._viewportUpdated = new StageEvent(StageEvent.VIEWPORT_UPDATED); - this.dispatchEvent(this._viewportUpdated); - }; - Stage.prototype.notifyEnterFrame = function () { - //if (!hasEventListener(Event.ENTER_FRAME)) - //return; - if (!this._enterFrame) - this._enterFrame = new Event(Event.ENTER_FRAME); - this.dispatchEvent(this._enterFrame); - }; - Stage.prototype.notifyExitFrame = function () { - //if (!hasEventListener(Event.EXIT_FRAME)) - //return; - if (!this._exitFrame) - this._exitFrame = new Event(Event.EXIT_FRAME); - this.dispatchEvent(this._exitFrame); - }; - Object.defineProperty(Stage.prototype, "profile", { - get: function () { - return this._profile; - }, - enumerable: true, - configurable: true - }); - /** - * Disposes the Stage object, freeing the Context attached to the Stage. - */ - Stage.prototype.dispose = function () { - this._stageManager.iRemoveStage(this); - this.freeContext(); - this._stageManager = null; - this._stageIndex = -1; - }; - /** - * Configures the back buffer associated with the Stage object. - * @param backBufferWidth The width of the backbuffer. - * @param backBufferHeight The height of the backbuffer. - * @param antiAlias The amount of anti-aliasing to use. - * @param enableDepthAndStencil Indicates whether the back buffer contains a depth and stencil buffer. - */ - Stage.prototype.configureBackBuffer = function (backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil) { - this.width = backBufferWidth; - this.height = backBufferHeight; - this._antiAlias = antiAlias; - this._enableDepthAndStencil = enableDepthAndStencil; - if (this._context) - this._context.configureBackBuffer(backBufferWidth, backBufferHeight, antiAlias, enableDepthAndStencil); - }; - Object.defineProperty(Stage.prototype, "enableDepthAndStencil", { - /* - * Indicates whether the depth and stencil buffer is used - */ - get: function () { - return this._enableDepthAndStencil; - }, - set: function (enableDepthAndStencil) { - this._enableDepthAndStencil = enableDepthAndStencil; - this._backBufferDirty = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "renderTarget", { - get: function () { - return this._renderTarget; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "renderSurfaceSelector", { - get: function () { - return this._renderSurfaceSelector; - }, - enumerable: true, - configurable: true - }); - /* - * Clear and reset the back buffer when using a shared context - */ - Stage.prototype.clear = function () { - if (!this._context) - return; - if (this._backBufferDirty) { - this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - this._backBufferDirty = false; - } - this._context.clear((this._color & 0xff000000) >>> 24, (this._color & 0xff0000) >>> 16, (this._color & 0xff00) >>> 8, this._color & 0xff); - this._bufferClear = true; - }; - /** - * Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. Special case for enterframe and exitframe events - will switch StageProxy into automatic render mode. - * You can register event listeners on all nodes in the display list for a specific type of event, phase, and priority. - * - * @param type The type of event. - * @param listener The listener function that processes the event. - * @param useCapture Determines whether the listener works in the capture phase or the target and bubbling phases. If useCapture is set to true, the listener processes the event only during the capture phase and not in the target or bubbling phase. If useCapture is false, the listener processes the event only during the target or bubbling phase. To listen for the event in all three phases, call addEventListener twice, once with useCapture set to true, then again with useCapture set to false. - * @param priority The priority level of the event listener. The priority is designated by a signed 32-bit integer. The higher the number, the higher the priority. All listeners with priority n are processed before listeners of priority n-1. If two or more listeners share the same priority, they are processed in the order in which they were added. The default priority is 0. - * @param useWeakReference Determines whether the reference to the listener is strong or weak. A strong reference (the default) prevents your listener from being garbage-collected. A weak reference does not. - */ - Stage.prototype.addEventListener = function (type, listener) { - _super.prototype.addEventListener.call(this, type, listener); - //away.Debug.throwPIR( 'StageProxy' , 'addEventListener' , 'EnterFrame, ExitFrame'); - //if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) ){//&& ! this._frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ - //_frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); - //} - /* Original code - if ((type == Event.ENTER_FRAME || type == Event.EXIT_FRAME) && ! _frameEventDriver.hasEventListener(Event.ENTER_FRAME)){ - - _frameEventDriver.addEventListener(Event.ENTER_FRAME, onEnterFrame, useCapture, priority, useWeakReference); - - - } - */ - }; - /** - * Removes a listener from the EventDispatcher object. Special case for enterframe and exitframe events - will switch StageProxy out of automatic render mode. - * If there is no matching listener registered with the EventDispatcher object, a call to this method has no effect. - * - * @param type The type of event. - * @param listener The listener object to remove. - * @param useCapture Specifies whether the listener was registered for the capture phase or the target and bubbling phases. If the listener was registered for both the capture phase and the target and bubbling phases, two calls to removeEventListener() are required to remove both, one call with useCapture() set to true, and another call with useCapture() set to false. - */ - Stage.prototype.removeEventListener = function (type, listener) { - _super.prototype.removeEventListener.call(this, type, listener); - /* - // Remove the main rendering listener if no EnterFrame listeners remain - if ( ! this.hasEventListener(Event.ENTER_FRAME , this.onEnterFrame , this ) - && ! this.hasEventListener(Event.EXIT_FRAME , this.onEnterFrame , this) ) //&& _frameEventDriver.hasEventListener(Event.ENTER_FRAME)) - { - - //_frameEventDriver.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame, this ); - - } - */ - }; - Object.defineProperty(Stage.prototype, "scissorRect", { - get: function () { - return this._scissorRect; - }, - set: function (value) { - this._scissorRect = value; - this._context.setScissorRectangle(this._scissorRect); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "stageIndex", { - /** - * The index of the Stage which is managed by this instance of StageProxy. - */ - get: function () { - return this._stageIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "usesSoftwareRendering", { - /** - * Indicates whether the Stage managed by this proxy is running in software mode. - * Remember to wait for the CONTEXT_CREATED event before checking this property, - * as only then will it be guaranteed to be accurate. - */ - get: function () { - return this._usesSoftwareRendering; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "antiAlias", { - /** - * The antiAliasing of the Stage. - */ - get: function () { - return this._antiAlias; - }, - set: function (antiAlias) { - this._antiAlias = antiAlias; - this._backBufferDirty = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "viewPort", { - /** - * A viewPort rectangle equivalent of the Stage size and position. - */ - get: function () { - this._viewportDirty = false; - return this._viewPort; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "color", { - /** - * The background color of the Stage. - */ - get: function () { - return this._color; - }, - set: function (color) { - this._color = color; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Stage.prototype, "bufferClear", { - /** - * The freshly cleared state of the backbuffer before any rendering - */ - get: function () { - return this._bufferClear; - }, - set: function (newBufferClear) { - this._bufferClear = newBufferClear; - }, - enumerable: true, - configurable: true - }); - /* - * Access to fire mouseevents across multiple layered view3D instances - */ - // public get mouse3DManager():Mouse3DManager - // { - // return this._mouse3DManager; - // } - // - // public set mouse3DManager(value:Mouse3DManager) - // { - // this._mouse3DManager = value; - // } - /* TODO: implement dependency Touch3DManager - public get touch3DManager():Touch3DManager - { - return _touch3DManager; - } - - public set touch3DManager(value:Touch3DManager) - { - _touch3DManager = value; - } - */ - /** - * Frees the Context associated with this StageProxy. - */ - Stage.prototype.freeContext = function () { - if (this._context) { - this._context.dispose(); - this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); - } - this._context = null; - this._initialised = false; - }; - /** - * The Enter_Frame handler for processing the proxy.ENTER_FRAME and proxy.EXIT_FRAME event handlers. - * Typically the proxy.ENTER_FRAME listener would render the layers for this Stage instance. - */ - Stage.prototype.onEnterFrame = function (event) { - if (!this._context) - return; - // Clear the stage instance - this.clear(); - //notify the enterframe listeners - this.notifyEnterFrame(); - // Call the present() to render the frame - if (!this._context) - this._context.present(); - //notify the exitframe listeners - this.notifyExitFrame(); - }; - Stage.prototype.recoverFromDisposal = function () { - if (!this._context) - return false; - //away.Debug.throwPIR( 'StageProxy' , 'recoverFromDisposal' , '' ); - /* - if (this._iContext.driverInfo == "Disposed") - { - this._iContext = null; - this.dispatchEvent(new StageEvent(StageEvent.CONTEXT_DISPOSED)); - return false; - - } - */ - return true; - }; - Stage.prototype._callback = function (context) { - this._context = context; - this._container = this._context.container; - // Only configure back buffer if width and height have been set, - // which they may not have been if View.render() has yet to be - // invoked for the first time. - if (this._width && this._height) - this._context.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - // Dispatch the appropriate event depending on whether context was - // created for the first time or recreated after a device loss. - this.dispatchEvent(new StageEvent(this._initialised ? StageEvent.CONTEXT_RECREATED : StageEvent.CONTEXT_CREATED)); - this._initialised = true; - }; - return Stage; -})(EventDispatcher); -module.exports = Stage; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2Uvc3RhZ2UudHMiXSwibmFtZXMiOlsiU3RhZ2UiLCJTdGFnZS5jb25zdHJ1Y3RvciIsIlN0YWdlLnJlcXVlc3RDb250ZXh0IiwiU3RhZ2Uud2lkdGgiLCJTdGFnZS5oZWlnaHQiLCJTdGFnZS54IiwiU3RhZ2UueSIsIlN0YWdlLnZpc2libGUiLCJTdGFnZS5jb250YWluZXIiLCJTdGFnZS5jb250ZXh0IiwiU3RhZ2Uubm90aWZ5Vmlld3BvcnRVcGRhdGVkIiwiU3RhZ2Uubm90aWZ5RW50ZXJGcmFtZSIsIlN0YWdlLm5vdGlmeUV4aXRGcmFtZSIsIlN0YWdlLnByb2ZpbGUiLCJTdGFnZS5kaXNwb3NlIiwiU3RhZ2UuY29uZmlndXJlQmFja0J1ZmZlciIsIlN0YWdlLmVuYWJsZURlcHRoQW5kU3RlbmNpbCIsIlN0YWdlLnJlbmRlclRhcmdldCIsIlN0YWdlLnJlbmRlclN1cmZhY2VTZWxlY3RvciIsIlN0YWdlLmNsZWFyIiwiU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lciIsIlN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIiLCJTdGFnZS5zY2lzc29yUmVjdCIsIlN0YWdlLnN0YWdlSW5kZXgiLCJTdGFnZS51c2VzU29mdHdhcmVSZW5kZXJpbmciLCJTdGFnZS5hbnRpQWxpYXMiLCJTdGFnZS52aWV3UG9ydCIsIlN0YWdlLmNvbG9yIiwiU3RhZ2UuYnVmZmVyQ2xlYXIiLCJTdGFnZS5mcmVlQ29udGV4dCIsIlN0YWdlLm9uRW50ZXJGcmFtZSIsIlN0YWdlLnJlY292ZXJGcm9tRGlzcG9zYWwiLCJTdGFnZS5fY2FsbGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sU0FBUyxXQUFjLGdDQUFnQyxDQUFDLENBQUM7QUFDaEUsSUFBTyxLQUFLLFdBQWUsOEJBQThCLENBQUMsQ0FBQztBQUMzRCxJQUFPLGVBQWUsV0FBYSx3Q0FBd0MsQ0FBQyxDQUFDO0FBSTdFLElBQU8sR0FBRyxXQUFnQiwyQkFBMkIsQ0FB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LGVBQWUsRUE2aUJsQztBQUVELEFBQWUsaUJBQU4sS0FBSyxDQUFDIiwiZmlsZSI6ImNvcmUvYmFzZS9TdGFnZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXZlbnRzL0V2ZW50RGlzcGF0Y2hlclwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvQ3ViZVRleHR1cmVCYXNlXCIpO1xuaW1wb3J0IFJlbmRlclRleHR1cmVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvUmVuZGVyVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5pbXBvcnQgQ1NTXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0NTU1wiKTtcblxuaW1wb3J0IENvbnRleHRNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZGlzcGxheS9Db250ZXh0TW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZGlzcGxheS9JQ29udGV4dFwiKTtcbmltcG9ydCBTdGFnZUV2ZW50XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZXZlbnRzL1N0YWdlRXZlbnRcIik7XG5cbmltcG9ydCBTdGFnZU1hbmFnZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9TdGFnZU1hbmFnZXJcIik7XG5pbXBvcnQgQ29udGV4dFN0YWdlM0RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRTdGFnZTNEXCIpO1xuaW1wb3J0IENvbnRleHRXZWJHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0V2ViR0xcIik7XG5cbi8qKlxuICogU3RhZ2UgcHJvdmlkZXMgYSBwcm94eSBjbGFzcyB0byBoYW5kbGUgdGhlIGNyZWF0aW9uIGFuZCBhdHRhY2htZW50IG9mIHRoZSBDb250ZXh0XG4gKiAoYW5kIGluIHR1cm4gdGhlIGJhY2sgYnVmZmVyKSBpdCB1c2VzLiBTdGFnZSBzaG91bGQgbmV2ZXIgYmUgY3JlYXRlZCBkaXJlY3RseSxcbiAqIGJ1dCByZXF1ZXN0ZWQgdGhyb3VnaCBTdGFnZU1hbmFnZXIuXG4gKlxuICogQHNlZSBhd2F5Lm1hbmFnZXJzLlN0YWdlTWFuYWdlclxuICpcbiAqL1xuY2xhc3MgU3RhZ2UgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXJcbntcblx0cHJpdmF0ZSBfY29udGV4dDpJQ29udGV4dDtcblx0cHJpdmF0ZSBfY29udGFpbmVyOkhUTUxFbGVtZW50O1xuXHRwcml2YXRlIF93aWR0aDpudW1iZXI7XG5cdHByaXZhdGUgX2hlaWdodDpudW1iZXI7XG5cdHByaXZhdGUgX3g6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfeTpudW1iZXIgPSAwO1xuXG5cdC8vcHJpdmF0ZSBzdGF0aWMgX2ZyYW1lRXZlbnREcml2ZXI6U2hhcGUgPSBuZXcgU2hhcGUoKTsgLy8gVE9ETzogYWRkIGZyYW1lIGRyaXZlciAvIHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lXG5cblx0cHJpdmF0ZSBfc3RhZ2VJbmRleDpudW1iZXIgPSAtMTtcblxuXHRwcml2YXRlIF91c2VzU29mdHdhcmVSZW5kZXJpbmc6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfcHJvZmlsZTpzdHJpbmc7XG5cdHByaXZhdGUgX3N0YWdlTWFuYWdlcjpTdGFnZU1hbmFnZXI7XG5cdHByaXZhdGUgX2FudGlBbGlhczpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9lbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfY29udGV4dFJlcXVlc3RlZDpib29sZWFuO1xuXG5cdC8vcHJpdmF0ZSB2YXIgX2FjdGl2ZVZlcnRleEJ1ZmZlcnMgOiBWZWN0b3IuPFZlcnRleEJ1ZmZlcj4gPSBuZXcgVmVjdG9yLjxWZXJ0ZXhCdWZmZXI+KDgsIHRydWUpO1xuXHQvL3ByaXZhdGUgdmFyIF9hY3RpdmVUZXh0dXJlcyA6IFZlY3Rvci48VGV4dHVyZUJhc2U+ID0gbmV3IFZlY3Rvci48VGV4dHVyZUJhc2U+KDgsIHRydWUpO1xuXHRwcml2YXRlIF9yZW5kZXJUYXJnZXQ6VGV4dHVyZVByb3h5QmFzZSA9IG51bGw7XG5cdHByaXZhdGUgX3JlbmRlclN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9zY2lzc29yUmVjdDpSZWN0YW5nbGU7XG5cdHByaXZhdGUgX2NvbG9yOm51bWJlcjtcblx0cHJpdmF0ZSBfYmFja0J1ZmZlckRpcnR5OmJvb2xlYW47XG5cdHByaXZhdGUgX3ZpZXdQb3J0OlJlY3RhbmdsZTtcblx0cHJpdmF0ZSBfZW50ZXJGcmFtZTpFdmVudDtcblx0cHJpdmF0ZSBfZXhpdEZyYW1lOkV2ZW50O1xuXHRwcml2YXRlIF92aWV3cG9ydFVwZGF0ZWQ6U3RhZ2VFdmVudDtcblx0cHJpdmF0ZSBfdmlld3BvcnREaXJ0eTpib29sZWFuO1xuXHRwcml2YXRlIF9idWZmZXJDbGVhcjpib29sZWFuO1xuXG5cdC8vcHJpdmF0ZSBfbW91c2UzRE1hbmFnZXI6YXdheS5tYW5hZ2Vycy5Nb3VzZTNETWFuYWdlcjtcblx0Ly9wcml2YXRlIF90b3VjaDNETWFuYWdlcjpUb3VjaDNETWFuYWdlcjsgLy9UT0RPOiBpbWVwbGVtZW50IGRlcGVuZGVuY3kgVG91Y2gzRE1hbmFnZXJcblxuXHRwcml2YXRlIF9pbml0aWFsaXNlZDpib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoY29udGFpbmVyOkhUTUxDYW52YXNFbGVtZW50LCBzdGFnZUluZGV4Om51bWJlciwgc3RhZ2VNYW5hZ2VyOlN0YWdlTWFuYWdlciwgZm9yY2VTb2Z0d2FyZTpib29sZWFuID0gZmFsc2UsIHByb2ZpbGU6c3RyaW5nID0gXCJiYXNlbGluZVwiKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcblxuXHRcdHRoaXMuX3N0YWdlSW5kZXggPSBzdGFnZUluZGV4O1xuXG5cdFx0dGhpcy5fc3RhZ2VNYW5hZ2VyID0gc3RhZ2VNYW5hZ2VyO1xuXG5cdFx0dGhpcy5fdmlld1BvcnQgPSBuZXcgUmVjdGFuZ2xlKCk7XG5cblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSB0cnVlO1xuXG5cdFx0Q1NTLnNldEVsZW1lbnRYKHRoaXMuX2NvbnRhaW5lciwgMCk7XG5cdFx0Q1NTLnNldEVsZW1lbnRZKHRoaXMuX2NvbnRhaW5lciwgMCk7XG5cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIGEgQ29udGV4dCBvYmplY3QgdG8gYXR0YWNoIHRvIHRoZSBtYW5hZ2VkIGdsIGNhbnZhcy5cblx0ICovXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dChmb3JjZVNvZnR3YXJlOmJvb2xlYW4gPSBmYWxzZSwgcHJvZmlsZTpzdHJpbmcgPSBcImJhc2VsaW5lXCIsIG1vZGU6c3RyaW5nID0gXCJhdXRvXCIpXG5cdHtcblx0XHQvLyBJZiBmb3JjaW5nIHNvZnR3YXJlLCB3ZSBjYW4gYmUgY2VydGFpbiB0aGF0IHRoZVxuXHRcdC8vIHJldHVybmVkIENvbnRleHQgd2lsbCBiZSBydW5uaW5nIHNvZnR3YXJlIG1vZGUuXG5cdFx0Ly8gSWYgbm90LCB3ZSBjYW4ndCBiZSBzdXJlIGFuZCBzaG91bGQgc3RpY2sgdG8gdGhlXG5cdFx0Ly8gb2xkIHZhbHVlICh3aWxsIGxpa2VseSBiZSBzYW1lIGlmIHJlLXJlcXVlc3RpbmcuKVxuXG5cdFx0aWYgKHRoaXMuX3VzZXNTb2Z0d2FyZVJlbmRlcmluZyAhPSBudWxsKVxuXHRcdFx0dGhpcy5fdXNlc1NvZnR3YXJlUmVuZGVyaW5nID0gZm9yY2VTb2Z0d2FyZTtcblxuXHRcdHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2RlID09IENvbnRleHRNb2RlLkZMQVNIKVxuXHRcdFx0XHRuZXcgQ29udGV4dFN0YWdlM0QoPEhUTUxDYW52YXNFbGVtZW50PiB0aGlzLl9jb250YWluZXIsIHRoaXMuX3N0YWdlSW5kZXgsIChjb250ZXh0OklDb250ZXh0KSA9PiB0aGlzLl9jYWxsYmFjayhjb250ZXh0KSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRoaXMuX2NvbnRleHQgPSBuZXcgQ29udGV4dFdlYkdMKDxIVE1MQ2FudmFzRWxlbWVudD4gdGhpcy5fY29udGFpbmVyLCB0aGlzLl9zdGFnZUluZGV4KTtcblxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChtb2RlID09IENvbnRleHRNb2RlLkFVVE8pXG5cdFx0XHRcdFx0bmV3IENvbnRleHRTdGFnZTNEKDxIVE1MQ2FudmFzRWxlbWVudD4gdGhpcy5fY29udGFpbmVyLCB0aGlzLl9zdGFnZUluZGV4LCAoY29udGV4dDpJQ29udGV4dCkgPT4gdGhpcy5fY2FsbGJhY2soY29udGV4dCkpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5FUlJPUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KEV2ZW50LkVSUk9SKSk7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NhbGxiYWNrKHRoaXMuX2NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgZ2wgY2FudmFzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHdpZHRoKClcblx0e1xuXHRcdHJldHVybiB0aGlzLl93aWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgd2lkdGgodmFsOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl93aWR0aCA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudFdpZHRoKHRoaXMuX2NvbnRhaW5lciwgdmFsKTtcblxuXHRcdHRoaXMuX3dpZHRoID0gdGhpcy5fdmlld1BvcnQud2lkdGggPSB2YWw7XG5cblx0XHR0aGlzLl9iYWNrQnVmZmVyRGlydHkgPSB0cnVlO1xuXG5cdFx0dGhpcy5ub3RpZnlWaWV3cG9ydFVwZGF0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgaGVpZ2h0IG9mIHRoZSBnbCBjYW52YXNcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVpZ2h0KClcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGhlaWdodCh2YWw6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2hlaWdodCA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudEhlaWdodCh0aGlzLl9jb250YWluZXIsIHZhbCk7XG5cblx0XHR0aGlzLl9oZWlnaHQgPSB0aGlzLl92aWV3UG9ydC5oZWlnaHQgPSB2YWw7XG5cblx0XHR0aGlzLl9iYWNrQnVmZmVyRGlydHkgPSB0cnVlO1xuXG5cdFx0dGhpcy5ub3RpZnlWaWV3cG9ydFVwZGF0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgZ2wgY2FudmFzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHgoKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3g7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHgodmFsOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl94ID09IHZhbClcblx0XHRcdHJldHVybjtcblxuXHRcdENTUy5zZXRFbGVtZW50WCh0aGlzLl9jb250YWluZXIsIHZhbCk7XG5cblx0XHR0aGlzLl94ID0gdGhpcy5fdmlld1BvcnQueCA9IHZhbDtcblxuXHRcdHRoaXMubm90aWZ5Vmlld3BvcnRVcGRhdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGdsIGNhbnZhc1xuXHQgKi9cblx0cHVibGljIGdldCB5KClcblx0e1xuXHRcdHJldHVybiB0aGlzLl95O1xuXHR9XG5cblx0cHVibGljIHNldCB5KHZhbDpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5feSA9PSB2YWwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRDU1Muc2V0RWxlbWVudFkodGhpcy5fY29udGFpbmVyLCB2YWwpO1xuXG5cdFx0dGhpcy5feSA9IHRoaXMuX3ZpZXdQb3J0LnkgPSB2YWw7XG5cblx0XHR0aGlzLm5vdGlmeVZpZXdwb3J0VXBkYXRlZCgpO1xuXHR9XG5cblx0cHVibGljIHNldCB2aXNpYmxlKHZhbDpib29sZWFuKVxuXHR7XG5cdFx0Q1NTLnNldEVsZW1lbnRWaXNpYmlsaXR5KHRoaXMuX2NvbnRhaW5lciwgdmFsKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdmlzaWJsZSgpXG5cdHtcblx0XHRyZXR1cm4gQ1NTLmdldEVsZW1lbnRWaXNpYmlsaXR5KHRoaXMuX2NvbnRhaW5lcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOkhUTUxFbGVtZW50XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHN0YWdlIG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpOklDb250ZXh0XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29udGV4dDtcblx0fVxuXG5cdHByaXZhdGUgbm90aWZ5Vmlld3BvcnRVcGRhdGVkKClcblx0e1xuXHRcdGlmICh0aGlzLl92aWV3cG9ydERpcnR5KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IHRydWU7XG5cblx0XHQvL2lmICghdGhpcy5oYXNFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuVklFV1BPUlRfVVBEQVRFRCkpXG5cdFx0Ly9yZXR1cm47XG5cblx0XHQvL2lmICghX3ZpZXdwb3J0VXBkYXRlZClcblx0XHR0aGlzLl92aWV3cG9ydFVwZGF0ZWQgPSBuZXcgU3RhZ2VFdmVudChTdGFnZUV2ZW50LlZJRVdQT1JUX1VQREFURUQpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuX3ZpZXdwb3J0VXBkYXRlZCk7XG5cdH1cblxuXHRwcml2YXRlIG5vdGlmeUVudGVyRnJhbWUoKVxuXHR7XG5cdFx0Ly9pZiAoIWhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKVxuXHRcdC8vcmV0dXJuO1xuXG5cdFx0aWYgKCF0aGlzLl9lbnRlckZyYW1lKVxuXHRcdFx0dGhpcy5fZW50ZXJGcmFtZSA9IG5ldyBFdmVudChFdmVudC5FTlRFUl9GUkFNRSk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fZW50ZXJGcmFtZSk7XG5cblx0fVxuXG5cdHByaXZhdGUgbm90aWZ5RXhpdEZyYW1lKClcblx0e1xuXHRcdC8vaWYgKCFoYXNFdmVudExpc3RlbmVyKEV2ZW50LkVYSVRfRlJBTUUpKVxuXHRcdC8vcmV0dXJuO1xuXG5cdFx0aWYgKCF0aGlzLl9leGl0RnJhbWUpXG5cdFx0XHR0aGlzLl9leGl0RnJhbWUgPSBuZXcgRXZlbnQoRXZlbnQuRVhJVF9GUkFNRSk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fZXhpdEZyYW1lKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcHJvZmlsZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Byb2ZpbGU7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcG9zZXMgdGhlIFN0YWdlIG9iamVjdCwgZnJlZWluZyB0aGUgQ29udGV4dCBhdHRhY2hlZCB0byB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9zdGFnZU1hbmFnZXIuaVJlbW92ZVN0YWdlKHRoaXMpO1xuXHRcdHRoaXMuZnJlZUNvbnRleHQoKTtcblx0XHR0aGlzLl9zdGFnZU1hbmFnZXIgPSBudWxsO1xuXHRcdHRoaXMuX3N0YWdlSW5kZXggPSAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmVzIHRoZSBiYWNrIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN0YWdlIG9iamVjdC5cblx0ICogQHBhcmFtIGJhY2tCdWZmZXJXaWR0aCBUaGUgd2lkdGggb2YgdGhlIGJhY2tidWZmZXIuXG5cdCAqIEBwYXJhbSBiYWNrQnVmZmVySGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGJhY2tidWZmZXIuXG5cdCAqIEBwYXJhbSBhbnRpQWxpYXMgVGhlIGFtb3VudCBvZiBhbnRpLWFsaWFzaW5nIHRvIHVzZS5cblx0ICogQHBhcmFtIGVuYWJsZURlcHRoQW5kU3RlbmNpbCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYmFjayBidWZmZXIgY29udGFpbnMgYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIuXG5cdCAqL1xuXHRwdWJsaWMgY29uZmlndXJlQmFja0J1ZmZlcihiYWNrQnVmZmVyV2lkdGg6bnVtYmVyLCBiYWNrQnVmZmVySGVpZ2h0Om51bWJlciwgYW50aUFsaWFzOm51bWJlciwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLndpZHRoID0gYmFja0J1ZmZlcldpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gYmFja0J1ZmZlckhlaWdodDtcblxuXHRcdHRoaXMuX2FudGlBbGlhcyA9IGFudGlBbGlhcztcblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSBlbmFibGVEZXB0aEFuZFN0ZW5jaWw7XG5cblx0XHRpZiAodGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NvbnRleHQuY29uZmlndXJlQmFja0J1ZmZlcihiYWNrQnVmZmVyV2lkdGgsIGJhY2tCdWZmZXJIZWlnaHQsIGFudGlBbGlhcywgZW5hYmxlRGVwdGhBbmRTdGVuY2lsKTtcblx0fVxuXG5cdC8qXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIgaXMgdXNlZFxuXHQgKi9cblx0cHVibGljIGdldCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZW5hYmxlRGVwdGhBbmRTdGVuY2lsO1xuXHR9XG5cblx0cHVibGljIHNldCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwoZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSBlbmFibGVEZXB0aEFuZFN0ZW5jaWw7XG5cdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyVGFyZ2V0KCk6VGV4dHVyZVByb3h5QmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclRhcmdldDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyU3VyZmFjZVNlbGVjdG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyU3VyZmFjZVNlbGVjdG9yO1xuXHR9XG5cblx0Lypcblx0ICogQ2xlYXIgYW5kIHJlc2V0IHRoZSBiYWNrIGJ1ZmZlciB3aGVuIHVzaW5nIGEgc2hhcmVkIGNvbnRleHRcblx0ICovXG5cdHB1YmxpYyBjbGVhcigpXG5cdHtcblx0XHRpZiAoIXRoaXMuX2NvbnRleHQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5fYmFja0J1ZmZlckRpcnR5KSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXHRcdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29udGV4dC5jbGVhcigoIHRoaXMuX2NvbG9yICYgMHhmZjAwMDAwMCApID4+PiAyNCwgLy8gPC0tLS0tLS0tLSBaZXJvLWZpbGwgcmlnaHQgc2hpZnRcblx0XHRcdFx0XHRcdFx0ICAoIHRoaXMuX2NvbG9yICYgMHhmZjAwMDAgKSA+Pj4gMTYsIC8vIDwtLS0tLS0tLS0tLS0tfFxuXHRcdFx0XHRcdFx0XHQgICggdGhpcy5fY29sb3IgJiAweGZmMDAgKSA+Pj4gOCwgLy8gPC0tLS0tLS0tLS0tLS0tLS18XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fY29sb3IgJiAweGZmKTtcblxuXHRcdHRoaXMuX2J1ZmZlckNsZWFyID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgb2JqZWN0IHdpdGggYW4gRXZlbnREaXNwYXRjaGVyIG9iamVjdCBzbyB0aGF0IHRoZSBsaXN0ZW5lciByZWNlaXZlcyBub3RpZmljYXRpb24gb2YgYW4gZXZlbnQuIFNwZWNpYWwgY2FzZSBmb3IgZW50ZXJmcmFtZSBhbmQgZXhpdGZyYW1lIGV2ZW50cyAtIHdpbGwgc3dpdGNoIFN0YWdlUHJveHkgaW50byBhdXRvbWF0aWMgcmVuZGVyIG1vZGUuXG5cdCAqIFlvdSBjYW4gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzIG9uIGFsbCBub2RlcyBpbiB0aGUgZGlzcGxheSBsaXN0IGZvciBhIHNwZWNpZmljIHR5cGUgb2YgZXZlbnQsIHBoYXNlLCBhbmQgcHJpb3JpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGV2ZW50LlxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIHRoZSBldmVudC5cblx0ICogQHBhcmFtIHVzZUNhcHR1cmUgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBsaXN0ZW5lciB3b3JrcyBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvciB0aGUgdGFyZ2V0IGFuZCBidWJibGluZyBwaGFzZXMuIElmIHVzZUNhcHR1cmUgaXMgc2V0IHRvIHRydWUsIHRoZSBsaXN0ZW5lciBwcm9jZXNzZXMgdGhlIGV2ZW50IG9ubHkgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlIGFuZCBub3QgaW4gdGhlIHRhcmdldCBvciBidWJibGluZyBwaGFzZS4gSWYgdXNlQ2FwdHVyZSBpcyBmYWxzZSwgdGhlIGxpc3RlbmVyIHByb2Nlc3NlcyB0aGUgZXZlbnQgb25seSBkdXJpbmcgdGhlIHRhcmdldCBvciBidWJibGluZyBwaGFzZS4gVG8gbGlzdGVuIGZvciB0aGUgZXZlbnQgaW4gYWxsIHRocmVlIHBoYXNlcywgY2FsbCBhZGRFdmVudExpc3RlbmVyIHR3aWNlLCBvbmNlIHdpdGggdXNlQ2FwdHVyZSBzZXQgdG8gdHJ1ZSwgdGhlbiBhZ2FpbiB3aXRoIHVzZUNhcHR1cmUgc2V0IHRvIGZhbHNlLlxuXHQgKiBAcGFyYW0gcHJpb3JpdHkgVGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBldmVudCBsaXN0ZW5lci4gVGhlIHByaW9yaXR5IGlzIGRlc2lnbmF0ZWQgYnkgYSBzaWduZWQgMzItYml0IGludGVnZXIuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIGhpZ2hlciB0aGUgcHJpb3JpdHkuIEFsbCBsaXN0ZW5lcnMgd2l0aCBwcmlvcml0eSBuIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGxpc3RlbmVycyBvZiBwcmlvcml0eSBuLTEuIElmIHR3byBvciBtb3JlIGxpc3RlbmVycyBzaGFyZSB0aGUgc2FtZSBwcmlvcml0eSwgdGhleSBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuIFRoZSBkZWZhdWx0IHByaW9yaXR5IGlzIDAuXG5cdCAqIEBwYXJhbSB1c2VXZWFrUmVmZXJlbmNlIERldGVybWluZXMgd2hldGhlciB0aGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0ZW5lciBpcyBzdHJvbmcgb3Igd2Vhay4gQSBzdHJvbmcgcmVmZXJlbmNlICh0aGUgZGVmYXVsdCkgcHJldmVudHMgeW91ciBsaXN0ZW5lciBmcm9tIGJlaW5nIGdhcmJhZ2UtY29sbGVjdGVkLiBBIHdlYWsgcmVmZXJlbmNlIGRvZXMgbm90LlxuXHQgKi9cblx0cHVibGljIGFkZEV2ZW50TGlzdGVuZXIodHlwZTpzdHJpbmcsIGxpc3RlbmVyOkZ1bmN0aW9uKVxuXHR7XG5cdFx0c3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XG5cblx0XHQvL2F3YXkuRGVidWcudGhyb3dQSVIoICdTdGFnZVByb3h5JyAsICdhZGRFdmVudExpc3RlbmVyJyAsICAnRW50ZXJGcmFtZSwgRXhpdEZyYW1lJyk7XG5cblx0XHQvL2lmICgodHlwZSA9PSBFdmVudC5FTlRFUl9GUkFNRSB8fCB0eXBlID09IEV2ZW50LkVYSVRfRlJBTUUpICl7Ly8mJiAhIHRoaXMuX2ZyYW1lRXZlbnREcml2ZXIuaGFzRXZlbnRMaXN0ZW5lcihFdmVudC5FTlRFUl9GUkFNRSkpe1xuXG5cdFx0Ly9fZnJhbWVFdmVudERyaXZlci5hZGRFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCBvbkVudGVyRnJhbWUsIHVzZUNhcHR1cmUsIHByaW9yaXR5LCB1c2VXZWFrUmVmZXJlbmNlKTtcblxuXHRcdC8vfVxuXG5cdFx0LyogT3JpZ2luYWwgY29kZVxuXHRcdCBpZiAoKHR5cGUgPT0gRXZlbnQuRU5URVJfRlJBTUUgfHwgdHlwZSA9PSBFdmVudC5FWElUX0ZSQU1FKSAmJiAhIF9mcmFtZUV2ZW50RHJpdmVyLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKXtcblxuXHRcdCBfZnJhbWVFdmVudERyaXZlci5hZGRFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCBvbkVudGVyRnJhbWUsIHVzZUNhcHR1cmUsIHByaW9yaXR5LCB1c2VXZWFrUmVmZXJlbmNlKTtcblxuXG5cdFx0IH1cblx0XHQgKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgRXZlbnREaXNwYXRjaGVyIG9iamVjdC4gU3BlY2lhbCBjYXNlIGZvciBlbnRlcmZyYW1lIGFuZCBleGl0ZnJhbWUgZXZlbnRzIC0gd2lsbCBzd2l0Y2ggU3RhZ2VQcm94eSBvdXQgb2YgYXV0b21hdGljIHJlbmRlciBtb2RlLlxuXHQgKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBsaXN0ZW5lciByZWdpc3RlcmVkIHdpdGggdGhlIEV2ZW50RGlzcGF0Y2hlciBvYmplY3QsIGEgY2FsbCB0byB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudC5cblx0ICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBvYmplY3QgdG8gcmVtb3ZlLlxuXHQgKiBAcGFyYW0gdXNlQ2FwdHVyZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgbGlzdGVuZXIgd2FzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjYXB0dXJlIHBoYXNlIG9yIHRoZSB0YXJnZXQgYW5kIGJ1YmJsaW5nIHBoYXNlcy4gSWYgdGhlIGxpc3RlbmVyIHdhcyByZWdpc3RlcmVkIGZvciBib3RoIHRoZSBjYXB0dXJlIHBoYXNlIGFuZCB0aGUgdGFyZ2V0IGFuZCBidWJibGluZyBwaGFzZXMsIHR3byBjYWxscyB0byByZW1vdmVFdmVudExpc3RlbmVyKCkgYXJlIHJlcXVpcmVkIHRvIHJlbW92ZSBib3RoLCBvbmUgY2FsbCB3aXRoIHVzZUNhcHR1cmUoKSBzZXQgdG8gdHJ1ZSwgYW5kIGFub3RoZXIgY2FsbCB3aXRoIHVzZUNhcHR1cmUoKSBzZXQgdG8gZmFsc2UuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOnN0cmluZywgbGlzdGVuZXI6RnVuY3Rpb24pXG5cdHtcblx0XHRzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcblxuXHRcdC8qXG5cdFx0IC8vIFJlbW92ZSB0aGUgbWFpbiByZW5kZXJpbmcgbGlzdGVuZXIgaWYgbm8gRW50ZXJGcmFtZSBsaXN0ZW5lcnMgcmVtYWluXG5cdFx0IGlmICggICAgISB0aGlzLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUgLCB0aGlzLm9uRW50ZXJGcmFtZSAsIHRoaXMgKVxuXHRcdCAmJiAgISB0aGlzLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRVhJVF9GUkFNRSAsIHRoaXMub25FbnRlckZyYW1lICwgdGhpcykgKSAvLyYmIF9mcmFtZUV2ZW50RHJpdmVyLmhhc0V2ZW50TGlzdGVuZXIoRXZlbnQuRU5URVJfRlJBTUUpKVxuXHRcdCB7XG5cblx0XHQgLy9fZnJhbWVFdmVudERyaXZlci5yZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50LkVOVEVSX0ZSQU1FLCB0aGlzLm9uRW50ZXJGcmFtZSwgdGhpcyApO1xuXG5cdFx0IH1cblx0XHQgKi9cblx0fVxuXG5cdHB1YmxpYyBnZXQgc2Npc3NvclJlY3QoKTpSZWN0YW5nbGVcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zY2lzc29yUmVjdDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgc2Npc3NvclJlY3QodmFsdWU6UmVjdGFuZ2xlKVxuXHR7XG5cdFx0dGhpcy5fc2Npc3NvclJlY3QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX2NvbnRleHQuc2V0U2Npc3NvclJlY3RhbmdsZSh0aGlzLl9zY2lzc29yUmVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGluZGV4IG9mIHRoZSBTdGFnZSB3aGljaCBpcyBtYW5hZ2VkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgU3RhZ2VQcm94eS5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3RhZ2VJbmRleCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YWdlSW5kZXg7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFN0YWdlIG1hbmFnZWQgYnkgdGhpcyBwcm94eSBpcyBydW5uaW5nIGluIHNvZnR3YXJlIG1vZGUuXG5cdCAqIFJlbWVtYmVyIHRvIHdhaXQgZm9yIHRoZSBDT05URVhUX0NSRUFURUQgZXZlbnQgYmVmb3JlIGNoZWNraW5nIHRoaXMgcHJvcGVydHksXG5cdCAqIGFzIG9ubHkgdGhlbiB3aWxsIGl0IGJlIGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHVzZXNTb2Z0d2FyZVJlbmRlcmluZygpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl91c2VzU29mdHdhcmVSZW5kZXJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFudGlBbGlhc2luZyBvZiB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFudGlBbGlhcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FudGlBbGlhcztcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW50aUFsaWFzKGFudGlBbGlhczpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9hbnRpQWxpYXMgPSBhbnRpQWxpYXM7XG5cdFx0dGhpcy5fYmFja0J1ZmZlckRpcnR5ID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHZpZXdQb3J0IHJlY3RhbmdsZSBlcXVpdmFsZW50IG9mIHRoZSBTdGFnZSBzaXplIGFuZCBwb3NpdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgdmlld1BvcnQoKTpSZWN0YW5nbGVcblx0e1xuXHRcdHRoaXMuX3ZpZXdwb3J0RGlydHkgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl92aWV3UG9ydDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgU3RhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGNvbG9yKGNvbG9yOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2NvbG9yID0gY29sb3I7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGZyZXNobHkgY2xlYXJlZCBzdGF0ZSBvZiB0aGUgYmFja2J1ZmZlciBiZWZvcmUgYW55IHJlbmRlcmluZ1xuXHQgKi9cblx0cHVibGljIGdldCBidWZmZXJDbGVhcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXJDbGVhcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYnVmZmVyQ2xlYXIobmV3QnVmZmVyQ2xlYXI6Ym9vbGVhbilcblx0e1xuXHRcdHRoaXMuX2J1ZmZlckNsZWFyID0gbmV3QnVmZmVyQ2xlYXI7XG5cdH1cblxuXHQvKlxuXHQgKiBBY2Nlc3MgdG8gZmlyZSBtb3VzZWV2ZW50cyBhY3Jvc3MgbXVsdGlwbGUgbGF5ZXJlZCB2aWV3M0QgaW5zdGFuY2VzXG5cdCAqL1xuXHQvL1x0XHRwdWJsaWMgZ2V0IG1vdXNlM0RNYW5hZ2VyKCk6TW91c2UzRE1hbmFnZXJcblx0Ly9cdFx0e1xuXHQvL1x0XHRcdHJldHVybiB0aGlzLl9tb3VzZTNETWFuYWdlcjtcblx0Ly9cdFx0fVxuXHQvL1xuXHQvL1x0XHRwdWJsaWMgc2V0IG1vdXNlM0RNYW5hZ2VyKHZhbHVlOk1vdXNlM0RNYW5hZ2VyKVxuXHQvL1x0XHR7XG5cdC8vXHRcdFx0dGhpcy5fbW91c2UzRE1hbmFnZXIgPSB2YWx1ZTtcblx0Ly9cdFx0fVxuXG5cdC8qIFRPRE86IGltcGxlbWVudCBkZXBlbmRlbmN5IFRvdWNoM0RNYW5hZ2VyXG5cdCBwdWJsaWMgZ2V0IHRvdWNoM0RNYW5hZ2VyKCk6VG91Y2gzRE1hbmFnZXJcblx0IHtcblx0IHJldHVybiBfdG91Y2gzRE1hbmFnZXI7XG5cdCB9XG5cblx0IHB1YmxpYyBzZXQgdG91Y2gzRE1hbmFnZXIodmFsdWU6VG91Y2gzRE1hbmFnZXIpXG5cdCB7XG5cdCBfdG91Y2gzRE1hbmFnZXIgPSB2YWx1ZTtcblx0IH1cblx0ICovXG5cblx0LyoqXG5cdCAqIEZyZWVzIHRoZSBDb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFN0YWdlUHJveHkuXG5cdCAqL1xuXHRwcml2YXRlIGZyZWVDb250ZXh0KClcblx0e1xuXHRcdGlmICh0aGlzLl9jb250ZXh0KSB7XG5cdFx0XHR0aGlzLl9jb250ZXh0LmRpc3Bvc2UoKTtcblxuXHRcdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KFN0YWdlRXZlbnQuQ09OVEVYVF9ESVNQT1NFRCkpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXG5cdFx0dGhpcy5faW5pdGlhbGlzZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgRW50ZXJfRnJhbWUgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyB0aGUgcHJveHkuRU5URVJfRlJBTUUgYW5kIHByb3h5LkVYSVRfRlJBTUUgZXZlbnQgaGFuZGxlcnMuXG5cdCAqIFR5cGljYWxseSB0aGUgcHJveHkuRU5URVJfRlJBTUUgbGlzdGVuZXIgd291bGQgcmVuZGVyIHRoZSBsYXllcnMgZm9yIHRoaXMgU3RhZ2UgaW5zdGFuY2UuXG5cdCAqL1xuXHRwcml2YXRlIG9uRW50ZXJGcmFtZShldmVudDpFdmVudClcblx0e1xuXHRcdGlmICghdGhpcy5fY29udGV4dClcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIENsZWFyIHRoZSBzdGFnZSBpbnN0YW5jZVxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHQvL25vdGlmeSB0aGUgZW50ZXJmcmFtZSBsaXN0ZW5lcnNcblx0XHR0aGlzLm5vdGlmeUVudGVyRnJhbWUoKTtcblx0XHQvLyBDYWxsIHRoZSBwcmVzZW50KCkgdG8gcmVuZGVyIHRoZSBmcmFtZVxuXHRcdGlmICghdGhpcy5fY29udGV4dClcblx0XHRcdHRoaXMuX2NvbnRleHQucHJlc2VudCgpO1xuXHRcdC8vbm90aWZ5IHRoZSBleGl0ZnJhbWUgbGlzdGVuZXJzXG5cdFx0dGhpcy5ub3RpZnlFeGl0RnJhbWUoKTtcblx0fVxuXG5cdHB1YmxpYyByZWNvdmVyRnJvbURpc3Bvc2FsKCk6Ym9vbGVhblxuXHR7XG5cdFx0aWYgKCF0aGlzLl9jb250ZXh0KVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly9hd2F5LkRlYnVnLnRocm93UElSKCAnU3RhZ2VQcm94eScgLCAncmVjb3ZlckZyb21EaXNwb3NhbCcgLCAnJyApO1xuXG5cdFx0Lypcblx0XHQgaWYgKHRoaXMuX2lDb250ZXh0LmRyaXZlckluZm8gPT0gXCJEaXNwb3NlZFwiKVxuXHRcdCB7XG5cdFx0IHRoaXMuX2lDb250ZXh0ID0gbnVsbDtcblx0XHQgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KFN0YWdlRXZlbnQuQ09OVEVYVF9ESVNQT1NFRCkpO1xuXHRcdCByZXR1cm4gZmFsc2U7XG5cblx0XHQgfVxuXHRcdCAqL1xuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cblxuXHRwcml2YXRlIF9jYWxsYmFjayhjb250ZXh0OklDb250ZXh0KVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHR0aGlzLl9jb250YWluZXIgPSB0aGlzLl9jb250ZXh0LmNvbnRhaW5lcjtcblxuXHRcdC8vIE9ubHkgY29uZmlndXJlIGJhY2sgYnVmZmVyIGlmIHdpZHRoIGFuZCBoZWlnaHQgaGF2ZSBiZWVuIHNldCxcblx0XHQvLyB3aGljaCB0aGV5IG1heSBub3QgaGF2ZSBiZWVuIGlmIFZpZXcucmVuZGVyKCkgaGFzIHlldCB0byBiZVxuXHRcdC8vIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRcdGlmICh0aGlzLl93aWR0aCAmJiB0aGlzLl9oZWlnaHQpXG5cdFx0XHR0aGlzLl9jb250ZXh0LmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXG5cdFx0Ly8gRGlzcGF0Y2ggdGhlIGFwcHJvcHJpYXRlIGV2ZW50IGRlcGVuZGluZyBvbiB3aGV0aGVyIGNvbnRleHQgd2FzXG5cdFx0Ly8gY3JlYXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUgb3IgcmVjcmVhdGVkIGFmdGVyIGEgZGV2aWNlIGxvc3MuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTdGFnZUV2ZW50KHRoaXMuX2luaXRpYWxpc2VkPyBTdGFnZUV2ZW50LkNPTlRFWFRfUkVDUkVBVEVEIDogU3RhZ2VFdmVudC5DT05URVhUX0NSRUFURUQpKTtcblxuXHRcdHRoaXMuX2luaXRpYWxpc2VkID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgPSBTdGFnZTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/BillboardRenderable.js b/lib/core/pool/BillboardRenderable.js deleted file mode 100755 index ec6e37d7..00000000 --- a/lib/core/pool/BillboardRenderable.js +++ /dev/null @@ -1,60 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.RenderableListItem - */ -var BillboardRenderable = (function (_super) { - __extends(BillboardRenderable, _super); - /** - * //TODO - * - * @param pool - * @param billboard - */ - function BillboardRenderable(pool, billboard) { - _super.call(this, pool, billboard, billboard); - this._billboard = billboard; - } - /** - * //TODO - * - * @returns {away.base.TriangleSubGeometry} - */ - BillboardRenderable.prototype._pGetSubGeometry = function () { - var material = this._billboard.material; - var geometry = BillboardRenderable._materialGeometry[material.id]; - if (!geometry) { - geometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true); - geometry.autoDeriveNormals = false; - geometry.autoDeriveTangents = false; - geometry.updateIndices(Array(0, 1, 2, 0, 2, 3)); - geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); - geometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0)); - geometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1)); - geometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1)); - } - else { - geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); - } - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; - this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; - return geometry; - }; - BillboardRenderable._materialGeometry = new Object(); - /** - * - */ - BillboardRenderable.id = "billboard"; - return BillboardRenderable; -})(RenderableBase); -module.exports = BillboardRenderable; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvYmlsbGJvYXJkcmVuZGVyYWJsZS50cyJdLCJuYW1lcyI6WyJCaWxsYm9hcmRSZW5kZXJhYmxlIiwiQmlsbGJvYXJkUmVuZGVyYWJsZS5jb25zdHJ1Y3RvciIsIkJpbGxib2FyZFJlbmRlcmFibGUuX3BHZXRTdWJHZW9tZXRyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBTyxtQkFBbUIsV0FBYSw2Q0FBNkMsQ0FBQyxDQUFDO0FBS3RGLElBQU8sY0FBYyxXQUFjLDZDQUE2QyxDQUFDLENBQUM7QUFFbEYsQUFHQTs7R0FERztJQUNHLG1CQUFtQjtJQUFTQSxVQUE1QkEsbUJBQW1CQSxVQUF1QkE7SUFjL0NBOzs7OztPQUtHQTtJQUNIQSxTQXBCS0EsbUJBQW1CQSxDQW9CWkEsSUFBbUJBLEVBQUVBLFNBQW1CQTtRQUVuREMsa0JBQU1BLElBQUlBLEVBQUVBLFNBQVNBLEVBQUVBLFNBQVNBLENBQUNBLENBQUNBO1FBRWxDQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxTQUFTQSxDQUFDQTtJQUM3QkEsQ0FBQ0E7SUFFREQ7Ozs7T0FJR0E7SUFDSUEsOENBQWdCQSxHQUF2QkE7UUFFQ0UsSUFBSUEsUUFBUUEsR0FBZ0JBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLFFBQVFBLENBQUNBO1FBRXJEQSxJQUFJQSxRQUFRQSxHQUF1QkEsbUJBQW1CQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBRXRGQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNmQSxRQUFRQSxHQUFHQSxtQkFBbUJBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsbUJBQW1CQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUM5RkEsUUFBUUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUNuQ0EsUUFBUUEsQ0FBQ0Esa0JBQWtCQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUNwQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDeERBLFFBQVFBLENBQUNBLGVBQWVBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLEtBQUtBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ2xJQSxRQUFRQSxDQUFDQSxtQkFBbUJBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hGQSxRQUFRQSxDQUFDQSxvQkFBb0JBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3JGQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxDQUFTQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMzREEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsUUFBUUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsUUFBUUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsUUFBUUEsQ0FBQ0EsS0FBS0EsRUFBRUEsUUFBUUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsUUFBUUEsQ0FBQ0EsS0FBS0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDbklBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxhQUFhQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNqRUEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxtQkFBbUJBLENBQUNBLFdBQVdBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBQy9EQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDaEVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUzREEsTUFBTUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7SUFDakJBLENBQUNBO0lBdkRjRixxQ0FBaUJBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO0lBRXZEQTs7T0FFR0E7SUFDV0Esc0JBQUVBLEdBQVVBLFdBQVdBLENBQUNBO0lBbUR2Q0EsMEJBQUNBO0FBQURBLENBMURBLEFBMERDQSxFQTFEaUMsY0FBYyxFQTBEL0M7QUFFRCxBQUE2QixpQkFBcEIsbUJBQW1CLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL0JpbGxib2FyZFJlbmRlcmFibGUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN1Ykdlb21ldHJ5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvU3ViR2VvbWV0cnlCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IFJlbmRlcmFibGVQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9SZW5kZXJhYmxlUG9vbFwiKTtcbmltcG9ydCBCaWxsYm9hcmRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0JpbGxib2FyZFwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5cbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlJlbmRlcmFibGVMaXN0SXRlbVxuICovXG5jbGFzcyBCaWxsYm9hcmRSZW5kZXJhYmxlIGV4dGVuZHMgUmVuZGVyYWJsZUJhc2Vcbntcblx0cHJpdmF0ZSBzdGF0aWMgX21hdGVyaWFsR2VvbWV0cnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBpZDpzdHJpbmcgPSBcImJpbGxib2FyZFwiO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBfYmlsbGJvYXJkOkJpbGxib2FyZDtcblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBwb29sXG5cdCAqIEBwYXJhbSBiaWxsYm9hcmRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBvb2w6UmVuZGVyYWJsZVBvb2wsIGJpbGxib2FyZDpCaWxsYm9hcmQpXG5cdHtcblx0XHRzdXBlcihwb29sLCBiaWxsYm9hcmQsIGJpbGxib2FyZCk7XG5cblx0XHR0aGlzLl9iaWxsYm9hcmQgPSBiaWxsYm9hcmQ7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEByZXR1cm5zIHthd2F5LmJhc2UuVHJpYW5nbGVTdWJHZW9tZXRyeX1cblx0ICovXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6U3ViR2VvbWV0cnlCYXNlXG5cdHtcblx0XHR2YXIgbWF0ZXJpYWw6TWF0ZXJpYWxCYXNlID0gdGhpcy5fYmlsbGJvYXJkLm1hdGVyaWFsO1xuXG5cdFx0dmFyIGdlb21ldHJ5OlRyaWFuZ2xlU3ViR2VvbWV0cnkgPSBCaWxsYm9hcmRSZW5kZXJhYmxlLl9tYXRlcmlhbEdlb21ldHJ5W21hdGVyaWFsLmlkXTtcblxuXHRcdGlmICghZ2VvbWV0cnkpIHtcblx0XHRcdGdlb21ldHJ5ID0gQmlsbGJvYXJkUmVuZGVyYWJsZS5fbWF0ZXJpYWxHZW9tZXRyeVttYXRlcmlhbC5pZF0gPSBuZXcgVHJpYW5nbGVTdWJHZW9tZXRyeSh0cnVlKTtcblx0XHRcdGdlb21ldHJ5LmF1dG9EZXJpdmVOb3JtYWxzID0gZmFsc2U7XG5cdFx0XHRnZW9tZXRyeS5hdXRvRGVyaXZlVGFuZ2VudHMgPSBmYWxzZTtcblx0XHRcdGdlb21ldHJ5LnVwZGF0ZUluZGljZXMoQXJyYXk8bnVtYmVyPigwLCAxLCAyLCAwLCAyLCAzKSk7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVQb3NpdGlvbnMoQXJyYXk8bnVtYmVyPigwLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCAwLCAwLCAwLCAwLCAwKSk7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVWZXJ0ZXhOb3JtYWxzKEFycmF5PG51bWJlcj4oMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCkpO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlVmVydGV4VGFuZ2VudHMoQXJyYXk8bnVtYmVyPigwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSkpO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlVVZzKEFycmF5PG51bWJlcj4oMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVQb3NpdGlvbnMoQXJyYXk8bnVtYmVyPigwLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCAwLCAwLCAwLCAwLCAwKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlBPU0lUSU9OX0RBVEFdID0gdHJ1ZTtcblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuTk9STUFMX0RBVEFdID0gdHJ1ZTtcblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuVEFOR0VOVF9EQVRBXSA9IHRydWU7XG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0RBVEFdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBnZW9tZXRyeTtcblx0fVxufVxuXG5leHBvcnQgPSBCaWxsYm9hcmRSZW5kZXJhYmxlOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/IndexData.js b/lib/core/pool/IndexData.js deleted file mode 100755 index 3b86e0fd..00000000 --- a/lib/core/pool/IndexData.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * - */ -var IndexData = (function () { - function IndexData(level) { - this._dataDirty = true; - this.invalid = new Array(8); - this.contexts = new Array(8); - this.buffers = new Array(8); - this.level = level; - } - IndexData.prototype.updateData = function (offset, indices, numVertices) { - if (this._dataDirty) { - this._dataDirty = false; - if (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) { - //shortcut for those buffers that fit into the maximum buffer sizes - this.indexMappings = null; - this.originalIndices = null; - this.setData(indices); - this.offset = indices.length; - } - else { - var i; - var len; - var outIndex; - var j; - var k; - var splitIndices = new Array(); - this.indexMappings = new Array(indices.length); - this.originalIndices = new Array(); - i = this.indexMappings.length; - while (i--) - this.indexMappings[i] = -1; - var originalIndex; - var splitIndex; - // Loop over all triangles - outIndex = 0; - len = indices.length; - i = offset; - k = 0; - while (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) { - for (j = 0; j < 3; j++) { - originalIndex = indices[i + j]; - if (this.indexMappings[originalIndex] >= 0) { - splitIndex = this.indexMappings[originalIndex]; - } - else { - // This vertex does not yet exist in the split list and - // needs to be copied from the long list. - splitIndex = k++; - this.indexMappings[originalIndex] = splitIndex; - this.originalIndices.push(originalIndex); - } - // Store new index, which may have come from the mapping look-up, - // or from copying a new set of vertex data from the original vector - splitIndices[outIndex + j] = splitIndex; - } - outIndex += 3; - i += 3; - } - this.setData(splitIndices); - this.offset = i; - } - } - }; - IndexData.prototype.invalidateData = function () { - this._dataDirty = true; - }; - IndexData.prototype.dispose = function () { - for (var i = 0; i < 8; ++i) { - if (this.contexts[i]) { - this.contexts[i].disposeIndexData(this); - this.contexts[i] = null; - } - } - }; - /** - * @private - */ - IndexData.prototype.disposeBuffers = function () { - for (var i = 0; i < 8; ++i) { - if (this.buffers[i]) { - this.buffers[i].dispose(); - this.buffers[i] = null; - } - } - }; - /** - * @private - */ - IndexData.prototype.invalidateBuffers = function () { - for (var i = 0; i < 8; ++i) - this.invalid[i] = true; - }; - /** - * - * @param data - * @private - */ - IndexData.prototype.setData = function (data) { - if (this.data && this.data.length != data.length) - this.disposeBuffers(); - else - this.invalidateBuffers(); - this.data = data; - }; - IndexData.LIMIT_VERTS = 0xffff; - IndexData.LIMIT_INDICES = 0xffffff; - return IndexData; -})(); -module.exports = IndexData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvaW5kZXhkYXRhLnRzIl0sIm5hbWVzIjpbIkluZGV4RGF0YSIsIkluZGV4RGF0YS5jb25zdHJ1Y3RvciIsIkluZGV4RGF0YS51cGRhdGVEYXRhIiwiSW5kZXhEYXRhLmludmFsaWRhdGVEYXRhIiwiSW5kZXhEYXRhLmRpc3Bvc2UiLCJJbmRleERhdGEuZGlzcG9zZUJ1ZmZlcnMiLCJJbmRleERhdGEuaW52YWxpZGF0ZUJ1ZmZlcnMiLCJJbmRleERhdGEuc2V0RGF0YSJdLCJtYXBwaW5ncyI6IkFBS0EsQUFHQTs7R0FERztJQUNHLFNBQVM7SUF3QmRBLFNBeEJLQSxTQUFTQSxDQXdCRkEsS0FBWUE7UUFsQmhCQyxlQUFVQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVuQkEsWUFBT0EsR0FBa0JBLElBQUlBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBRXRDQSxhQUFRQSxHQUF3QkEsSUFBSUEsS0FBS0EsQ0FBZ0JBLENBQUNBLENBQUNBLENBQUNBO1FBRTVEQSxZQUFPQSxHQUF1QkEsSUFBSUEsS0FBS0EsQ0FBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFjL0RBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLEtBQUtBLENBQUNBO0lBQ3BCQSxDQUFDQTtJQUVNRCw4QkFBVUEsR0FBakJBLFVBQWtCQSxNQUFhQSxFQUFFQSxPQUFxQkEsRUFBRUEsV0FBa0JBO1FBRXpFRSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyQkEsSUFBSUEsQ0FBQ0EsVUFBVUEsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFFeEJBLEVBQUVBLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLEdBQUdBLFNBQVNBLENBQUNBLGFBQWFBLElBQUlBLFdBQVdBLEdBQUdBLFNBQVNBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO2dCQUNyRkEsQUFDQUEsbUVBRG1FQTtnQkFD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LENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1lBQ3hCQSxDQUFDQTtRQUNGQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVETDs7T0FFR0E7SUFDS0EscUNBQWlCQSxHQUF6QkE7UUFFQ00sR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDaENBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVETjs7OztPQUlHQTtJQUNLQSwyQkFBT0EsR0FBZkEsVUFBZ0JBLElBQWtCQTtRQUVqQ08sRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsSUFBSUEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDaERBLElBQUlBLENBQUNBLGNBQWNBLEVBQUVBLENBQUNBO1FBQ3ZCQSxJQUFJQTtZQUNIQSxJQUFJQSxDQUFDQSxpQkFBaUJBLEVBQUVBLENBQUNBO1FBRTFCQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNsQkEsQ0FBQ0E7SUFoSmNQLHFCQUFXQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUU1QkEsdUJBQWFBLEdBQVVBLFFBQVFBLENBQUNBO0lBK0loREEsZ0JBQUNBO0FBQURBLENBbkpBLEFBbUpDQSxJQUFBO0FBRUQsQUFBbUIsaUJBQVYsU0FBUyxDQUFDIiwiZmlsZSI6ImNvcmUvcG9vbC9JbmRleERhdGEuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN1Ykdlb21ldHJ5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvU3ViR2VvbWV0cnlCYXNlXCIpO1xuXG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lJbmRleEJ1ZmZlclwiKTtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBJbmRleERhdGFcbntcblx0cHJpdmF0ZSBzdGF0aWMgTElNSVRfVkVSVFM6bnVtYmVyID0gMHhmZmZmO1xuXG5cdHByaXZhdGUgc3RhdGljIExJTUlUX0lORElDRVM6bnVtYmVyID0gMHhmZmZmZmY7XG5cblx0cHJpdmF0ZSBfZGF0YURpcnR5ID0gdHJ1ZTtcblxuXHRwdWJsaWMgaW52YWxpZDpBcnJheTxib29sZWFuPiA9IG5ldyBBcnJheSg4KTtcblxuXHRwdWJsaWMgY29udGV4dHM6QXJyYXk8Q29udGV4dEdMQmFzZT4gPSBuZXcgQXJyYXk8Q29udGV4dEdMQmFzZT4oOCk7XG5cblx0cHVibGljIGJ1ZmZlcnM6QXJyYXk8SUluZGV4QnVmZmVyPiA9IG5ldyBBcnJheTxJSW5kZXhCdWZmZXI+KDgpO1xuXG5cdHB1YmxpYyBkYXRhOkFycmF5PG51bWJlcj47XG5cblx0cHVibGljIGluZGV4TWFwcGluZ3M6QXJyYXk8bnVtYmVyPjtcblxuXHRwdWJsaWMgb3JpZ2luYWxJbmRpY2VzOkFycmF5PG51bWJlcj47XG5cblx0cHVibGljIG9mZnNldDpudW1iZXI7XG5cblx0cHVibGljIGxldmVsOm51bWJlcjtcblxuXHRjb25zdHJ1Y3RvcihsZXZlbDpudW1iZXIpXG5cdHtcblx0XHR0aGlzLmxldmVsID0gbGV2ZWw7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlRGF0YShvZmZzZXQ6bnVtYmVyLCBpbmRpY2VzOkFycmF5PG51bWJlcj4sIG51bVZlcnRpY2VzOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9kYXRhRGlydHkpIHtcblx0XHRcdHRoaXMuX2RhdGFEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoaW5kaWNlcy5sZW5ndGggPCBJbmRleERhdGEuTElNSVRfSU5ESUNFUyAmJiBudW1WZXJ0aWNlcyA8IEluZGV4RGF0YS5MSU1JVF9WRVJUUykge1xuXHRcdFx0XHQvL3Nob3J0Y3V0IGZvciB0aG9zZSBidWZmZXJzIHRoYXQgZml0IGludG8gdGhlIG1heGltdW0gYnVmZmVyIHNpemVzXG5cdFx0XHRcdHRoaXMuaW5kZXhNYXBwaW5ncyA9IG51bGw7XG5cdFx0XHRcdHRoaXMub3JpZ2luYWxJbmRpY2VzID0gbnVsbDtcblx0XHRcdFx0dGhpcy5zZXREYXRhKGluZGljZXMpO1xuXHRcdFx0XHR0aGlzLm9mZnNldCA9IGluZGljZXMubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGk6bnVtYmVyO1xuXHRcdFx0XHR2YXIgbGVuOm51bWJlcjtcblx0XHRcdFx0dmFyIG91dEluZGV4Om51bWJlcjtcblx0XHRcdFx0dmFyIGo6bnVtYmVyO1xuXHRcdFx0XHR2YXIgazpudW1iZXI7XG5cdFx0XHRcdHZhciBzcGxpdEluZGljZXM6QXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cblx0XHRcdFx0dGhpcy5pbmRleE1hcHBpbmdzID0gbmV3IEFycmF5PG51bWJlcj4oaW5kaWNlcy5sZW5ndGgpO1xuXHRcdFx0XHR0aGlzLm9yaWdpbmFsSW5kaWNlcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cblx0XHRcdFx0aSA9IHRoaXMuaW5kZXhNYXBwaW5ncy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKGktLSlcblx0XHRcdFx0XHR0aGlzLmluZGV4TWFwcGluZ3NbaV0gPSAtMTtcblxuXHRcdFx0XHR2YXIgb3JpZ2luYWxJbmRleDpudW1iZXI7XG5cdFx0XHRcdHZhciBzcGxpdEluZGV4Om51bWJlcjtcblxuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHRyaWFuZ2xlc1xuXHRcdFx0XHRvdXRJbmRleCA9IDA7XG5cdFx0XHRcdGxlbiA9IGluZGljZXMubGVuZ3RoO1xuXHRcdFx0XHRpID0gb2Zmc2V0O1xuXHRcdFx0XHRrID0gMDtcblx0XHRcdFx0d2hpbGUgKGkgPCBsZW4gJiYgb3V0SW5kZXggKyAzIDwgSW5kZXhEYXRhLkxJTUlUX0lORElDRVMgJiYgayArIDMgPCBJbmRleERhdGEuTElNSVRfVkVSVFMpIHtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZlcnRpY2VzIGluIGEgdHJpYW5nbGUgLy9UT0RPIGVuc3VyZSB0aGlzIHdvcmtzIGZvciBzZWdtZW50cyBvciBhbnkgZ3JvdXBpbmdcblx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7XG5cblx0XHRcdFx0XHRcdG9yaWdpbmFsSW5kZXggPSBpbmRpY2VzW2kgKyBqXTtcblxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaW5kZXhNYXBwaW5nc1tvcmlnaW5hbEluZGV4XSA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHNwbGl0SW5kZXggPSB0aGlzLmluZGV4TWFwcGluZ3Nbb3JpZ2luYWxJbmRleF07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgdmVydGV4IGRvZXMgbm90IHlldCBleGlzdCBpbiB0aGUgc3BsaXQgbGlzdCBhbmRcblx0XHRcdFx0XHRcdFx0Ly8gbmVlZHMgdG8gYmUgY29waWVkIGZyb20gdGhlIGxvbmcgbGlzdC5cblx0XHRcdFx0XHRcdFx0c3BsaXRJbmRleCA9IGsrKztcblx0XHRcdFx0XHRcdFx0dGhpcy5pbmRleE1hcHBpbmdzW29yaWdpbmFsSW5kZXhdID0gc3BsaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0dGhpcy5vcmlnaW5hbEluZGljZXMucHVzaChvcmlnaW5hbEluZGV4KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gU3RvcmUgbmV3IGluZGV4LCB3aGljaCBtYXkgaGF2ZSBjb21lIGZyb20gdGhlIG1hcHBpbmcgbG9vay11cCxcblx0XHRcdFx0XHRcdC8vIG9yIGZyb20gY29weWluZyBhIG5ldyBzZXQgb2YgdmVydGV4IGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgdmVjdG9yXG5cdFx0XHRcdFx0XHRzcGxpdEluZGljZXNbb3V0SW5kZXggKyBqXSA9IHNwbGl0SW5kZXg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0SW5kZXggKz0gMztcblx0XHRcdFx0XHRpICs9IDNcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0RGF0YShzcGxpdEluZGljZXMpO1xuXHRcdFx0XHR0aGlzLm9mZnNldCA9IGk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGludmFsaWRhdGVEYXRhKClcblx0e1xuXHRcdHRoaXMuX2RhdGFEaXJ0eSA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA4OyArK2kpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRleHRzW2ldKSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dHNbaV0uZGlzcG9zZUluZGV4RGF0YSh0aGlzKTtcblx0XHRcdFx0dGhpcy5jb250ZXh0c1tpXSA9IG51bGxcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgZGlzcG9zZUJ1ZmZlcnMoKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgODsgKytpKSB7XG5cdFx0XHRpZiAodGhpcy5idWZmZXJzW2ldKSB7XG5cdFx0XHRcdHRoaXMuYnVmZmVyc1tpXS5kaXNwb3NlKCk7XG5cdFx0XHRcdHRoaXMuYnVmZmVyc1tpXSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGludmFsaWRhdGVCdWZmZXJzKClcblx0e1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IDg7ICsraSlcblx0XHRcdHRoaXMuaW52YWxpZFtpXSA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgc2V0RGF0YShkYXRhOkFycmF5PG51bWJlcj4pXG5cdHtcblx0XHRpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggIT0gZGF0YS5sZW5ndGgpXG5cdFx0XHR0aGlzLmRpc3Bvc2VCdWZmZXJzKCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5pbnZhbGlkYXRlQnVmZmVycygpO1xuXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcblx0fVxufVxuXG5leHBvcnQgPSBJbmRleERhdGE7Il19 \ No newline at end of file diff --git a/lib/core/pool/IndexDataPool.js b/lib/core/pool/IndexDataPool.js deleted file mode 100755 index 33736a5b..00000000 --- a/lib/core/pool/IndexDataPool.js +++ /dev/null @@ -1,33 +0,0 @@ -var IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -/** - * - */ -var IndexDataPool = (function () { - function IndexDataPool() { - } - IndexDataPool.getItem = function (subGeometry, level, indexOffset) { - var subGeometryData = (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array())); - var indexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level)); - indexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices); - return indexData; - }; - IndexDataPool.disposeItem = function (id, level) { - var subGeometryData = this._pool[id]; - subGeometryData[level].dispose(); - subGeometryData[level] = null; - }; - IndexDataPool.prototype.disposeData = function (id) { - var subGeometryData = IndexDataPool._pool[id]; - var len = subGeometryData.length; - for (var i = 0; i < len; i++) { - subGeometryData[i].dispose(); - subGeometryData[i] = null; - } - IndexDataPool._pool[id] = null; - }; - IndexDataPool._pool = new Object(); - return IndexDataPool; -})(); -module.exports = IndexDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvaW5kZXhkYXRhcG9vbC50cyJdLCJuYW1lcyI6WyJJbmRleERhdGFQb29sIiwiSW5kZXhEYXRhUG9vbC5jb25zdHJ1Y3RvciIsIkluZGV4RGF0YVBvb2wuZ2V0SXRlbSIsIkluZGV4RGF0YVBvb2wuZGlzcG9zZUl0ZW0iLCJJbmRleERhdGFQb29sLmRpc3Bvc2VEYXRhIl0sIm1hcHBpbmdzIjoiQUFFQSxJQUFPLFNBQVMsV0FBZSx3Q0FBd0MsQ0FBQyxDQUFDO0FBRXpFLEFBR0E7O0dBREc7SUFDRyxhQUFhO0lBSWxCQSxTQUpLQSxhQUFhQTtJQU1sQkMsQ0FBQ0E7SUFFYUQscUJBQU9BLEdBQXJCQSxVQUFzQkEsV0FBMkJBLEVBQUVBLEtBQVlBLEVBQUVBLFdBQWtCQTtRQUVsRkUsSUFBSUEsZUFBZUEsR0FBdUNBLENBQUNBLGFBQWFBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLEtBQUtBLEVBQWFBLENBQUNBLENBQUNBLENBQUNBO1FBRWxLQSxJQUFJQSxTQUFTQSxHQUFhQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxJQUFJQSxTQUFTQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNwR0EsU0FBU0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsV0FBV0EsRUFBRUEsV0FBV0EsQ0FBQ0EsT0FBT0EsRUFBRUEsV0FBV0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFFaEZBLE1BQU1BLENBQUNBLFNBQVNBLENBQUNBO0lBQ2xCQSxDQUFDQTtJQUVhRix5QkFBV0EsR0FBekJBLFVBQTBCQSxFQUFTQSxFQUFFQSxLQUFZQTtRQUVoREcsSUFBSUEsZUFBZUEsR0FBdUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBRXpFQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUNqQ0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDL0JBLENBQUNBO0lBRU1ILG1DQUFXQSxHQUFsQkEsVUFBbUJBLEVBQVNBO1FBRTNCSSxJQUFJQSxlQUFlQSxHQUF1Q0EsYUFBYUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFFbEZBLElBQUlBLEdBQUdBLEdBQVVBLGVBQWVBLENBQUNBLE1BQU1BLENBQUNBO1FBQ3hDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUNyQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7WUFDN0JBLGVBQWVBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBQzNCQSxDQUFDQTtRQUVEQSxhQUFhQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNoQ0EsQ0FBQ0E7SUFuQ2NKLG1CQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtJQW9DNUNBLG9CQUFDQTtBQUFEQSxDQXRDQSxBQXNDQ0EsSUFBQTtBQUVELEFBQXVCLGlCQUFkLGFBQWEsQ0FBQyIsImZpbGUiOiJjb3JlL3Bvb2wvSW5kZXhEYXRhUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5cbmltcG9ydCBJbmRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9JbmRleERhdGFcIik7XG5cbi8qKlxuICpcbiAqL1xuY2xhc3MgSW5kZXhEYXRhUG9vbFxue1xuXHRwcml2YXRlIHN0YXRpYyBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGdldEl0ZW0oc3ViR2VvbWV0cnk6U3ViR2VvbWV0cnlCYXNlLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6SW5kZXhEYXRhXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gKEluZGV4RGF0YVBvb2wuX3Bvb2xbc3ViR2VvbWV0cnkuaWRdIHx8IChJbmRleERhdGFQb29sLl9wb29sW3N1Ykdlb21ldHJ5LmlkXSA9IG5ldyBBcnJheTxJbmRleERhdGE+KCkpKTtcblxuXHRcdHZhciBpbmRleERhdGE6SW5kZXhEYXRhID0gc3ViR2VvbWV0cnlEYXRhW2xldmVsXSB8fCAoc3ViR2VvbWV0cnlEYXRhW2xldmVsXSA9IG5ldyBJbmRleERhdGEobGV2ZWwpKTtcblx0XHRpbmRleERhdGEudXBkYXRlRGF0YShpbmRleE9mZnNldCwgc3ViR2VvbWV0cnkuaW5kaWNlcywgc3ViR2VvbWV0cnkubnVtVmVydGljZXMpO1xuXG5cdFx0cmV0dXJuIGluZGV4RGF0YTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZGlzcG9zZUl0ZW0oaWQ6bnVtYmVyLCBsZXZlbDpudW1iZXIpXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gdGhpcy5fcG9vbFtpZF07XG5cblx0XHRzdWJHZW9tZXRyeURhdGFbbGV2ZWxdLmRpc3Bvc2UoKTtcblx0XHRzdWJHZW9tZXRyeURhdGFbbGV2ZWxdID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlRGF0YShpZDpudW1iZXIpXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gSW5kZXhEYXRhUG9vbC5fcG9vbFtpZF07XG5cblx0XHR2YXIgbGVuOm51bWJlciA9IHN1Ykdlb21ldHJ5RGF0YS5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdHN1Ykdlb21ldHJ5RGF0YVtpXS5kaXNwb3NlKCk7XG5cdFx0XHRzdWJHZW9tZXRyeURhdGFbaV0gPSBudWxsO1xuXHRcdH1cblxuXHRcdEluZGV4RGF0YVBvb2wuX3Bvb2xbaWRdID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgPSBJbmRleERhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/LineSubMeshRenderable.js b/lib/core/pool/LineSubMeshRenderable.js deleted file mode 100755 index b35d0b3c..00000000 --- a/lib/core/pool/LineSubMeshRenderable.js +++ /dev/null @@ -1,65 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.LineSubMeshRenderable - */ -var LineSubMeshRenderable = (function (_super) { - __extends(LineSubMeshRenderable, _super); - /** - * //TODO - * - * @param pool - * @param subMesh - * @param level - * @param dataOffset - */ - function LineSubMeshRenderable(pool, subMesh, level, indexOffset) { - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); - this.subMesh = subMesh; - } - /** - * //TODO - * - * @returns {base.LineSubGeometry} - * @protected - */ - LineSubMeshRenderable.prototype._pGetSubGeometry = function () { - var subGeometry = this.subMesh.subGeometry; - this._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true; - this._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true; - if (subGeometry.thickness) - this._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true; - if (subGeometry.startColors) - this._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true; - return subGeometry; - }; - /** - * //TODO - * - * @param pool - * @param materialOwner - * @param level - * @param indexOffset - * @returns {away.pool.LineSubMeshRenderable} - * @private - */ - LineSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - return new LineSubMeshRenderable(pool, materialOwner, level, indexOffset); - }; - /** - * - */ - LineSubMeshRenderable.id = "linesubmesh"; - return LineSubMeshRenderable; -})(RenderableBase); -module.exports = LineSubMeshRenderable; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvbGluZXN1Ym1lc2hyZW5kZXJhYmxlLnRzIl0sIm5hbWVzIjpbIkxpbmVTdWJNZXNoUmVuZGVyYWJsZSIsIkxpbmVTdWJNZXNoUmVuZGVyYWJsZS5jb25zdHJ1Y3RvciIsIkxpbmVTdWJNZXNoUmVuZGVyYWJsZS5fcEdldFN1Ykdlb21ldHJ5IiwiTGluZVN1Yk1lc2hSZW5kZXJhYmxlLl9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBSS9FLElBQU8sY0FBYyxXQUFjLDZDQUE2QyxDQUFDLENBQUM7QUFFbEYsQUFHQTs7R0FERztJQUNHLHFCQUFxQjtJQUFTQSxVQUE5QkEscUJBQXFCQSxVQUF1QkE7SUFZakRBOzs7Ozs7O09BT0dBO0lBQ0hBLFNBcEJLQSxxQkFBcUJBLENBb0JkQSxJQUFtQkEsRUFBRUEsT0FBbUJBLEVBQUVBLEtBQWdCQSxFQUFFQSxXQUFzQkE7UUFBeENDLHFCQUFnQkEsR0FBaEJBLFNBQWdCQTtRQUFFQSwyQkFBc0JBLEdBQXRCQSxlQUFzQkE7UUFFN0ZBLGtCQUFNQSxJQUFJQSxFQUFFQSxPQUFPQSxDQUFDQSxVQUFVQSxFQUFFQSxPQUFPQSxFQUFFQSxLQUFLQSxFQUFFQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUU3REEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsT0FBT0EsQ0FBQ0E7SUFDeEJBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSxnREFBZ0JBLEdBQXZCQTtRQUVDRSxJQUFJQSxXQUFXQSxHQUFtQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFFM0RBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNuRUEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxlQUFlQSxDQUFDQSxpQkFBaUJBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBRWpFQSxFQUFFQSxDQUFDQSxDQUFDQSxXQUFXQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUN6QkEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxlQUFlQSxDQUFDQSxjQUFjQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUvREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsV0FBV0EsQ0FBQ0E7WUFDM0JBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFM0RBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3BCQSxDQUFDQTtJQUVERjs7Ozs7Ozs7O09BU0dBO0lBQ0lBLHVEQUF1QkEsR0FBOUJBLFVBQStCQSxJQUFtQkEsRUFBRUEsYUFBNEJBLEVBQUVBLEtBQVlBLEVBQUVBLFdBQWtCQTtRQUVqSEcsTUFBTUEsQ0FBQ0EsSUFBSUEscUJBQXFCQSxDQUFDQSxJQUFJQSxFQUFnQkEsYUFBYUEsRUFBRUEsS0FBS0EsRUFBRUEsV0FBV0EsQ0FBQ0EsQ0FBQ0E7SUFDekZBLENBQUNBO0lBNURESDs7T0FFR0E7SUFDV0Esd0JBQUVBLEdBQVVBLGFBQWFBLENBQUNBO0lBMER6Q0EsNEJBQUNBO0FBQURBLENBL0RBLEFBK0RDQSxFQS9EbUMsY0FBYyxFQStEakQ7QUFFRCxBQUErQixpQkFBdEIscUJBQXFCLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL0xpbmVTdWJNZXNoUmVuZGVyYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSU1hdGVyaWFsT3duZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL0lNYXRlcmlhbE93bmVyXCIpO1xuaW1wb3J0IExpbmVTdWJNZXNoXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL0xpbmVTdWJNZXNoXCIpO1xuaW1wb3J0IExpbmVTdWJHZW9tZXRyeVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGluZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IFJlbmRlcmFibGVQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9SZW5kZXJhYmxlUG9vbFwiKTtcbmltcG9ydCBTdWJHZW9tZXRyeUV2ZW50XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZXZlbnRzL1N1Ykdlb21ldHJ5RXZlbnRcIik7XG5cbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLkxpbmVTdWJNZXNoUmVuZGVyYWJsZVxuICovXG5jbGFzcyBMaW5lU3ViTWVzaFJlbmRlcmFibGUgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZVxue1xuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaWQ6c3RyaW5nID0gXCJsaW5lc3VibWVzaFwiO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN1Yk1lc2g6TGluZVN1Yk1lc2g7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gcG9vbFxuXHQgKiBAcGFyYW0gc3ViTWVzaFxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIGRhdGFPZmZzZXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBvb2w6UmVuZGVyYWJsZVBvb2wsIHN1Yk1lc2g6TGluZVN1Yk1lc2gsIGxldmVsOm51bWJlciA9IDAsIGluZGV4T2Zmc2V0Om51bWJlciA9IDApXG5cdHtcblx0XHRzdXBlcihwb29sLCBzdWJNZXNoLnBhcmVudE1lc2gsIHN1Yk1lc2gsIGxldmVsLCBpbmRleE9mZnNldCk7XG5cblx0XHR0aGlzLnN1Yk1lc2ggPSBzdWJNZXNoO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7YmFzZS5MaW5lU3ViR2VvbWV0cnl9XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6TGluZVN1Ykdlb21ldHJ5XG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnk6TGluZVN1Ykdlb21ldHJ5ID0gdGhpcy5zdWJNZXNoLnN1Ykdlb21ldHJ5O1xuXG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtMaW5lU3ViR2VvbWV0cnkuU1RBUlRfUE9TSVRJT05fREFUQV0gPSB0cnVlO1xuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbTGluZVN1Ykdlb21ldHJ5LkVORF9QT1NJVElPTl9EQVRBXSA9IHRydWU7XG5cblx0XHRpZiAoc3ViR2VvbWV0cnkudGhpY2tuZXNzKVxuXHRcdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtMaW5lU3ViR2VvbWV0cnkuVEhJQ0tORVNTX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS5zdGFydENvbG9ycylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbTGluZVN1Ykdlb21ldHJ5LkNPTE9SX0RBVEFdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBzdWJHZW9tZXRyeTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHBvb2xcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICogQHBhcmFtIGxldmVsXG5cdCAqIEBwYXJhbSBpbmRleE9mZnNldFxuXHQgKiBAcmV0dXJucyB7YXdheS5wb29sLkxpbmVTdWJNZXNoUmVuZGVyYWJsZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfcEdldE92ZXJmbG93UmVuZGVyYWJsZShwb29sOlJlbmRlcmFibGVQb29sLCBtYXRlcmlhbE93bmVyOklNYXRlcmlhbE93bmVyLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdHJldHVybiBuZXcgTGluZVN1Yk1lc2hSZW5kZXJhYmxlKHBvb2wsIDxMaW5lU3ViTWVzaD4gbWF0ZXJpYWxPd25lciwgbGV2ZWwsIGluZGV4T2Zmc2V0KTtcblx0fVxufVxuXG5leHBvcnQgPSBMaW5lU3ViTWVzaFJlbmRlcmFibGU7Il19 \ No newline at end of file diff --git a/lib/core/pool/MaterialData.js b/lib/core/pool/MaterialData.js deleted file mode 100755 index 0c770b13..00000000 --- a/lib/core/pool/MaterialData.js +++ /dev/null @@ -1,69 +0,0 @@ -var MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); -/** - * - * @class away.pool.MaterialData - */ -var MaterialData = (function () { - function MaterialData(pool, context, material) { - this.invalidAnimation = true; - this._pool = pool; - this.context = context; - this.material = material; - this._materialPassDataPool = new MaterialPassDataPool(material); - } - MaterialData.prototype.getMaterialPass = function (materialPass, profile) { - var materialPassData = this._materialPassDataPool.getItem(materialPass); - if (!materialPassData.shaderObject) { - materialPassData.shaderObject = materialPass.createShaderObject(profile); - materialPassData.invalid = true; - } - if (materialPassData.invalid) { - materialPassData.invalid = false; - var compiler = materialPassData.shaderObject.createCompiler(this.material, materialPass); - compiler.compile(); - materialPassData.shadedTarget = compiler.shadedTarget; - materialPassData.vertexCode = compiler.vertexCode; - materialPassData.fragmentCode = compiler.fragmentCode; - materialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode; - materialPassData.key = ""; - } - return materialPassData; - }; - MaterialData.prototype.getMaterialPasses = function (profile) { - if (this._passes == null) { - var passes = this.material._iScreenPasses; - var numPasses = passes.length; - //reset the material passes in MaterialData - this._passes = new Array(numPasses); - for (var i = 0; i < numPasses; i++) - this._passes[i] = this.getMaterialPass(passes[i], profile); - } - return this._passes; - }; - /** - * - */ - MaterialData.prototype.dispose = function () { - this._materialPassDataPool.disposePool(); - this._materialPassDataPool = null; - this._pool.disposeItem(this.material); - this._passes = null; - }; - /** - * - */ - MaterialData.prototype.invalidateMaterial = function () { - this._passes = null; - this.invalidateAnimation(); - }; - /** - * - */ - MaterialData.prototype.invalidateAnimation = function () { - this.invalidAnimation = true; - }; - return MaterialData; -})(); -module.exports = MaterialData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvbWF0ZXJpYWxkYXRhLnRzIl0sIm5hbWVzIjpbIk1hdGVyaWFsRGF0YSIsIk1hdGVyaWFsRGF0YS5jb25zdHJ1Y3RvciIsIk1hdGVyaWFsRGF0YS5nZXRNYXRlcmlhbFBhc3MiLCJNYXRlcmlhbERhdGEuZ2V0TWF0ZXJpYWxQYXNzZXMiLCJNYXRlcmlhbERhdGEuZGlzcG9zZSIsIk1hdGVyaWFsRGF0YS5pbnZhbGlkYXRlTWF0ZXJpYWwiLCJNYXRlcmlhbERhdGEuaW52YWxpZGF0ZUFuaW1hdGlvbiJdLCJtYXBwaW5ncyI6IkFBSUEsSUFBTyxvQkFBb0IsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBTzdGLEFBSUE7OztHQURHO0lBQ0csWUFBWTtJQWdCakJBLFNBaEJLQSxZQUFZQSxDQWdCTEEsSUFBcUJBLEVBQUVBLE9BQXFCQSxFQUFFQSxRQUE0QkE7UUFGL0VDLHFCQUFnQkEsR0FBV0EsSUFBSUEsQ0FBQ0E7UUFJdENBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFFekJBLElBQUlBLENBQUNBLHFCQUFxQkEsR0FBR0EsSUFBSUEsb0JBQW9CQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtJQUNqRUEsQ0FBQ0E7SUFFTUQsc0NBQWVBLEdBQXRCQSxVQUF1QkEsWUFBNkJBLEVBQUVBLE9BQWNBO1FBRW5FRSxJQUFJQSxnQkFBZ0JBLEdBQW9CQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLE9BQU9BLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBRXpGQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxnQkFBZ0JBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBLENBQUNBO1lBQ3BDQSxnQkFBZ0JBLENBQUNBLFlBQVlBLEdBQUdBLFlB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QixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL01hdGVyaWFsRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSU1hdGVyaWFsRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvSU1hdGVyaWFsRGF0YVwiKTtcblxuaW1wb3J0IE1hdGVyaWFsRGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhUG9vbFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVBvb2xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJDb21waWxlckJhc2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuXG4vKipcbiAqXG4gKiBAY2xhc3MgYXdheS5wb29sLk1hdGVyaWFsRGF0YVxuICovXG5jbGFzcyBNYXRlcmlhbERhdGEgaW1wbGVtZW50cyBJTWF0ZXJpYWxEYXRhXG57XG5cdHByaXZhdGUgX3Bvb2w6TWF0ZXJpYWxEYXRhUG9vbDtcblxuXHRwcml2YXRlIF9tYXRlcmlhbFBhc3NEYXRhUG9vbDpNYXRlcmlhbFBhc3NEYXRhUG9vbDtcblxuXHRwcml2YXRlIF9wYXNzZXM6QXJyYXk8TWF0ZXJpYWxQYXNzRGF0YT47XG5cblx0cHVibGljIGNvbnRleHQ6Q29udGV4dEdMQmFzZTtcblxuXHRwdWJsaWMgbWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZTtcblxuXHRwdWJsaWMgcmVuZGVyT3JkZXJJZDpudW1iZXI7XG5cblx0cHVibGljIGludmFsaWRBbmltYXRpb246Ym9vbGVhbiA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IocG9vbDpNYXRlcmlhbERhdGFQb29sLCBjb250ZXh0OkNvbnRleHRHTEJhc2UsIG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UpXG5cdHtcblx0XHR0aGlzLl9wb29sID0gcG9vbDtcblx0XHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuXHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFQb29sID0gbmV3IE1hdGVyaWFsUGFzc0RhdGFQb29sKG1hdGVyaWFsKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNYXRlcmlhbFBhc3MobWF0ZXJpYWxQYXNzOk1hdGVyaWFsUGFzc0Jhc2UsIHByb2ZpbGU6c3RyaW5nKTpNYXRlcmlhbFBhc3NEYXRhXG5cdHtcblx0XHR2YXIgbWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhID0gdGhpcy5fbWF0ZXJpYWxQYXNzRGF0YVBvb2wuZ2V0SXRlbShtYXRlcmlhbFBhc3MpO1xuXG5cdFx0aWYgKCFtYXRlcmlhbFBhc3NEYXRhLnNoYWRlck9iamVjdCkge1xuXHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5zaGFkZXJPYmplY3QgPSBtYXRlcmlhbFBhc3MuY3JlYXRlU2hhZGVyT2JqZWN0KHByb2ZpbGUpO1xuXHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5pbnZhbGlkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS5pbnZhbGlkKSB7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmludmFsaWQgPSBmYWxzZTtcblx0XHRcdHZhciBjb21waWxlcjpTaGFkZXJDb21waWxlckJhc2UgPSBtYXRlcmlhbFBhc3NEYXRhLnNoYWRlck9iamVjdC5jcmVhdGVDb21waWxlcih0aGlzLm1hdGVyaWFsLCBtYXRlcmlhbFBhc3MpO1xuXHRcdFx0Y29tcGlsZXIuY29tcGlsZSgpO1xuXG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLnNoYWRlZFRhcmdldCA9IGNvbXBpbGVyLnNoYWRlZFRhcmdldDtcblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEudmVydGV4Q29kZSA9IGNvbXBpbGVyLnZlcnRleENvZGU7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmZyYWdtZW50Q29kZSA9IGNvbXBpbGVyLmZyYWdtZW50Q29kZTtcblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEucG9zdEFuaW1hdGlvbkZyYWdtZW50Q29kZSA9IGNvbXBpbGVyLnBvc3RBbmltYXRpb25GcmFnbWVudENvZGU7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmtleSA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGVyaWFsUGFzc0RhdGE7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWF0ZXJpYWxQYXNzZXMocHJvZmlsZTpzdHJpbmcpOkFycmF5PE1hdGVyaWFsUGFzc0RhdGE+XG5cdHtcblx0XHRpZiAodGhpcy5fcGFzc2VzID09IG51bGwpIHtcblx0XHRcdHZhciBwYXNzZXM6QXJyYXk8TWF0ZXJpYWxQYXNzQmFzZT4gPSA8QXJyYXk8TWF0ZXJpYWxQYXNzQmFzZT4+IHRoaXMubWF0ZXJpYWwuX2lTY3JlZW5QYXNzZXM7XG5cdFx0XHR2YXIgbnVtUGFzc2VzOm51bWJlciA9IHBhc3Nlcy5sZW5ndGg7XG5cblx0XHRcdC8vcmVzZXQgdGhlIG1hdGVyaWFsIHBhc3NlcyBpbiBNYXRlcmlhbERhdGFcblx0XHRcdHRoaXMuX3Bhc3NlcyA9IG5ldyBBcnJheTxNYXRlcmlhbFBhc3NEYXRhPihudW1QYXNzZXMpO1xuXG5cdFx0XHQvL2dldCB0aGUgc2hhZGVyIG9iamVjdCBmb3IgZWFjaCBzY3JlZW4gcGFzcyBhbmQgc3RvcmVcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IG51bVBhc3NlczsgaSsrKVxuXHRcdFx0XHR0aGlzLl9wYXNzZXNbaV0gPSB0aGlzLmdldE1hdGVyaWFsUGFzcyhwYXNzZXNbaV0sIHByb2ZpbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9wYXNzZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFQb29sLmRpc3Bvc2VQb29sKCk7XG5cblx0XHR0aGlzLl9tYXRlcmlhbFBhc3NEYXRhUG9vbCA9IG51bGw7XG5cblx0XHR0aGlzLl9wb29sLmRpc3Bvc2VJdGVtKHRoaXMubWF0ZXJpYWwpO1xuXG5cdFx0dGhpcy5fcGFzc2VzID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGludmFsaWRhdGVNYXRlcmlhbCgpXG5cdHtcblx0XHR0aGlzLl9wYXNzZXMgPSBudWxsO1xuXG5cdFx0dGhpcy5pbnZhbGlkYXRlQW5pbWF0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBpbnZhbGlkYXRlQW5pbWF0aW9uKClcblx0e1xuXHRcdHRoaXMuaW52YWxpZEFuaW1hdGlvbiA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ID0gTWF0ZXJpYWxEYXRhOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/MaterialDataPool.js b/lib/core/pool/MaterialDataPool.js deleted file mode 100755 index 669127e5..00000000 --- a/lib/core/pool/MaterialDataPool.js +++ /dev/null @@ -1,37 +0,0 @@ -var MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -/** - * @class away.pool.MaterialDataPool - */ -var MaterialDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function MaterialDataPool(context) { - this._pool = new Object(); - this._context = context; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - MaterialDataPool.prototype.getItem = function (material) { - return (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material)))); - }; - /** - * //TODO - * - * @param materialOwner - */ - MaterialDataPool.prototype.disposeItem = function (material) { - material._iRemoveMaterialData(this._pool[material.id]); - this._pool[material.id] = null; - }; - return MaterialDataPool; -})(); -module.exports = MaterialDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvbWF0ZXJpYWxkYXRhcG9vbC50cyJdLCJuYW1lcyI6WyJNYXRlcmlhbERhdGFQb29sIiwiTWF0ZXJpYWxEYXRhUG9vbC5jb25zdHJ1Y3RvciIsIk1hdGVyaWFsRGF0YVBvb2wuZ2V0SXRlbSIsIk1hdGVyaWFsRGF0YVBvb2wuZGlzcG9zZUl0ZW0iXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sWUFBWSxXQUFlLDJDQUEyQyxDQUFDLENBQUM7QUFJL0UsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUtyQkE7Ozs7T0FJR0E7SUFDSEEsU0FWS0EsZ0JBQWdCQSxDQVVUQSxPQUFxQkE7UUFSekJDLFVBQUtBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1FBVW5DQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLGtDQUFPQSxHQUFkQSxVQUFlQSxRQUE0QkE7UUFFMUNFLE1BQU1BLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFFBQVFBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsSUFBSUEsWUFBWUEsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQUE7SUFDNUlBLENBQUNBO0lBRURGOzs7O09BSUdBO0lBQ0lBLHNDQUFXQSxHQUFsQkEsVUFBbUJBLFFBQTRCQTtRQUU5Q0csUUFBUUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUV2REEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDaENBLENBQUNBO0lBQ0ZILHVCQUFDQTtBQUFEQSxDQXJDQSxBQXFDQ0EsSUFBQTtBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJjb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWF0ZXJpYWxEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuXG4vKipcbiAqIEBjbGFzcyBhd2F5LnBvb2wuTWF0ZXJpYWxEYXRhUG9vbFxuICovXG5jbGFzcyBNYXRlcmlhbERhdGFQb29sXG57XG5cdHByaXZhdGUgX3Bvb2w6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRHTEJhc2U7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gdGV4dHVyZURhdGFDbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0R0xCYXNlKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqIEByZXR1cm5zIElUZXh0dXJlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SXRlbShtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlKTpNYXRlcmlhbERhdGFcblx0e1xuXHRcdHJldHVybiAodGhpcy5fcG9vbFttYXRlcmlhbC5pZF0gfHwgKHRoaXMuX3Bvb2xbbWF0ZXJpYWwuaWRdID0gbWF0ZXJpYWwuX2lBZGRNYXRlcmlhbERhdGEobmV3IE1hdGVyaWFsRGF0YSh0aGlzLCB0aGlzLl9jb250ZXh0LCBtYXRlcmlhbCkpKSlcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlSXRlbShtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlKVxuXHR7XG5cdFx0bWF0ZXJpYWwuX2lSZW1vdmVNYXRlcmlhbERhdGEodGhpcy5fcG9vbFttYXRlcmlhbC5pZF0pO1xuXG5cdFx0dGhpcy5fcG9vbFttYXRlcmlhbC5pZF0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IE1hdGVyaWFsRGF0YVBvb2w7Il19 \ No newline at end of file diff --git a/lib/core/pool/MaterialPassData.js b/lib/core/pool/MaterialPassData.js deleted file mode 100755 index a703b1e1..00000000 --- a/lib/core/pool/MaterialPassData.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * - * @class away.pool.MaterialPassData - */ -var MaterialPassData = (function () { - function MaterialPassData(pool, material, materialPass) { - this.animationVertexCode = ""; - this.animationFragmentCode = ""; - this._pool = pool; - this.material = material; - this.materialPass = materialPass; - } - /** - * - */ - MaterialPassData.prototype.dispose = function () { - this._pool.disposeItem(this.materialPass); - this.shaderObject.dispose(); - this.shaderObject = null; - this.programData.dispose(); - this.programData = null; - }; - /** - * - */ - MaterialPassData.prototype.invalidate = function () { - this.invalid = true; - }; - return MaterialPassData; -})(); -module.exports = MaterialPassData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvbWF0ZXJpYWxwYXNzZGF0YS50cyJdLCJuYW1lcyI6WyJNYXRlcmlhbFBhc3NEYXRhIiwiTWF0ZXJpYWxQYXNzRGF0YS5jb25zdHJ1Y3RvciIsIk1hdGVyaWFsUGFzc0RhdGEuZGlzcG9zZSIsIk1hdGVyaWFsUGFzc0RhdGEuaW52YWxpZGF0ZSJdLCJtYXBwaW5ncyI6IkFBU0EsQUFJQTs7O0dBREc7SUFDRyxnQkFBZ0I7SUE4QnJCQSxTQTlCS0EsZ0JBQWdCQSxDQThCVEEsSUFBeUJBLEVBQUVBLFFBQTRCQSxFQUFFQSxZQUE2QkE7UUFWM0ZDLHdCQUFtQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFaENBLDBCQUFxQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFVeENBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUN6QkEsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsWUFBWUEsQ0FBQ0E7SUFDbENBLENBQUNBO0lBRUREOztPQUVHQTtJQUNJQSxrQ0FBT0EsR0FBZEE7UUFFQ0UsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0E7UUFFMUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUV6QkEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDM0JBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVERjs7T0FFR0E7SUFDSUEscUNBQVVBLEdBQWpCQTtRQUVDRyxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNyQkEsQ0FBQ0E7SUFDRkgsdUJBQUNBO0FBQURBLENBMURBLEFBMERDQSxJQUFBO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6ImNvcmUvcG9vbC9NYXRlcmlhbFBhc3NEYXRhLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL0lNYXRlcmlhbFBhc3NEYXRhXCIpO1xuXG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVBvb2xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sXCIpO1xuaW1wb3J0IFByb2dyYW1EYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUHJvZ3JhbURhdGFcIik7XG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5cbi8qKlxuICpcbiAqIEBjbGFzcyBhd2F5LnBvb2wuTWF0ZXJpYWxQYXNzRGF0YVxuICovXG5jbGFzcyBNYXRlcmlhbFBhc3NEYXRhIGltcGxlbWVudHMgSU1hdGVyaWFsUGFzc0RhdGFcbntcblx0cHJpdmF0ZSBfcG9vbDpNYXRlcmlhbFBhc3NEYXRhUG9vbDtcblxuXHRwdWJsaWMgbWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZTtcblxuXHRwdWJsaWMgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2U7XG5cblx0cHVibGljIG1hdGVyaWFsUGFzczpNYXRlcmlhbFBhc3NCYXNlO1xuXG5cdHB1YmxpYyBwcm9ncmFtRGF0YTpQcm9ncmFtRGF0YTtcblxuXHRwdWJsaWMgc2hhZGVkVGFyZ2V0OnN0cmluZztcblxuXHRwdWJsaWMgdmVydGV4Q29kZTpzdHJpbmc7XG5cblx0cHVibGljIHBvc3RBbmltYXRpb25GcmFnbWVudENvZGU6c3RyaW5nO1xuXG5cdHB1YmxpYyBmcmFnbWVudENvZGU6c3RyaW5nO1xuXG5cdHB1YmxpYyBhbmltYXRpb25WZXJ0ZXhDb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0cHVibGljIGFuaW1hdGlvbkZyYWdtZW50Q29kZTpzdHJpbmcgPSBcIlwiO1xuXG5cdHB1YmxpYyBrZXk6c3RyaW5nO1xuXG5cdHB1YmxpYyBpbnZhbGlkOmJvb2xlYW47XG5cblx0cHVibGljIHVzZXNBbmltYXRpb246Ym9vbGVhbjtcblxuXHRjb25zdHJ1Y3Rvcihwb29sOk1hdGVyaWFsUGFzc0RhdGFQb29sLCBtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlLCBtYXRlcmlhbFBhc3M6TWF0ZXJpYWxQYXNzQmFzZSlcblx0e1xuXHRcdHRoaXMuX3Bvb2wgPSBwb29sO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHR0aGlzLm1hdGVyaWFsUGFzcyA9IG1hdGVyaWFsUGFzcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fcG9vbC5kaXNwb3NlSXRlbSh0aGlzLm1hdGVyaWFsUGFzcyk7XG5cblx0XHR0aGlzLnNoYWRlck9iamVjdC5kaXNwb3NlKCk7XG5cdFx0dGhpcy5zaGFkZXJPYmplY3QgPSBudWxsO1xuXG5cdFx0dGhpcy5wcm9ncmFtRGF0YS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5wcm9ncmFtRGF0YSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBpbnZhbGlkYXRlKClcblx0e1xuXHRcdHRoaXMuaW52YWxpZCA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ID0gTWF0ZXJpYWxQYXNzRGF0YTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/MaterialPassDataPool.js b/lib/core/pool/MaterialPassDataPool.js deleted file mode 100755 index 3cdf18d2..00000000 --- a/lib/core/pool/MaterialPassDataPool.js +++ /dev/null @@ -1,42 +0,0 @@ -var MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -/** - * @class away.pool.MaterialPassDataPool - */ -var MaterialPassDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function MaterialPassDataPool(material) { - this._pool = new Object(); - this._material = material; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - MaterialPassDataPool.prototype.getItem = function (materialPass) { - return (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass))))); - }; - /** - * //TODO - * - * @param materialOwner - */ - MaterialPassDataPool.prototype.disposeItem = function (materialPass) { - materialPass._iRemoveMaterialPassData(this._pool[materialPass.id]); - delete this._pool[materialPass.id]; - }; - MaterialPassDataPool.prototype.disposePool = function () { - for (var id in this._pool) - this._pool[id].materialPass._iRemoveMaterialPassData(this._pool[id]); - delete this._pool; - }; - return MaterialPassDataPool; -})(); -module.exports = MaterialPassDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvbWF0ZXJpYWxwYXNzZGF0YXBvb2wudHMiXSwibmFtZXMiOlsiTWF0ZXJpYWxQYXNzRGF0YVBvb2wiLCJNYXRlcmlhbFBhc3NEYXRhUG9vbC5jb25zdHJ1Y3RvciIsIk1hdGVyaWFsUGFzc0RhdGFQb29sLmdldEl0ZW0iLCJNYXRlcmlhbFBhc3NEYXRhUG9vbC5kaXNwb3NlSXRlbSIsIk1hdGVyaWFsUGFzc0RhdGFQb29sLmRpc3Bvc2VQb29sIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLGdCQUFnQixXQUFjLCtDQUErQyxDQUFDLENBQUM7QUFJdEYsQUFHQTs7R0FERztJQUNHLG9CQUFvQjtJQUt6QkE7Ozs7T0FJR0E7SUFDSEEsU0FWS0Esb0JBQW9CQSxDQVViQSxRQUE0QkE7UUFSaENDLFVBQUtBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1FBVW5DQSxJQUFJQSxDQUFDQSxTQUFTQSxHQUFHQSxRQUFRQSxDQUFDQTtJQUMzQkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLHNDQUFPQSxHQUFkQSxVQUFlQSxZQUE2QkE7UUFFM0NFLE1BQU1BLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsWUFBWUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxJQUFJQSxnQkFBZ0JBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLFNBQVNBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO0lBQzVNQSxDQUFDQTtJQUVERjs7OztPQUlHQTtJQUNJQSwwQ0FBV0EsR0FBbEJBLFVBQW1CQSxZQUE2QkE7UUFFL0NHLFlBQVlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFbkVBLE9BQU9BLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO0lBQ3BDQSxDQUFDQTtJQUVNSCwwQ0FBV0EsR0FBbEJBO1FBRUNJLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLElBQUlBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO1lBQ0xBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUVBLENBQUNBLFlBQVlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFM0ZBLE9BQU9BLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO0lBQ25CQSxDQUFDQTtJQUNGSiwyQkFBQ0E7QUFBREEsQ0E3Q0EsQUE2Q0NBLElBQUE7QUFFRCxBQUE4QixpQkFBckIsb0JBQW9CLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuXG4vKipcbiAqIEBjbGFzcyBhd2F5LnBvb2wuTWF0ZXJpYWxQYXNzRGF0YVBvb2xcbiAqL1xuY2xhc3MgTWF0ZXJpYWxQYXNzRGF0YVBvb2xcbntcblx0cHJpdmF0ZSBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX21hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2U7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gdGV4dHVyZURhdGFDbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IobWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSlcblx0e1xuXHRcdHRoaXMuX21hdGVyaWFsID0gbWF0ZXJpYWw7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqIEByZXR1cm5zIElUZXh0dXJlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SXRlbShtYXRlcmlhbFBhc3M6TWF0ZXJpYWxQYXNzQmFzZSk6TWF0ZXJpYWxQYXNzRGF0YVxuXHR7XG5cdFx0cmV0dXJuICh0aGlzLl9wb29sW21hdGVyaWFsUGFzcy5pZF0gfHwgKHRoaXMuX3Bvb2xbbWF0ZXJpYWxQYXNzLmlkXSA9IHRoaXMuX21hdGVyaWFsLl9pQWRkTWF0ZXJpYWxQYXNzRGF0YShtYXRlcmlhbFBhc3MuX2lBZGRNYXRlcmlhbFBhc3NEYXRhKG5ldyBNYXRlcmlhbFBhc3NEYXRhKHRoaXMsIHRoaXMuX21hdGVyaWFsLCBtYXRlcmlhbFBhc3MpKSkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlSXRlbShtYXRlcmlhbFBhc3M6TWF0ZXJpYWxQYXNzQmFzZSlcblx0e1xuXHRcdG1hdGVyaWFsUGFzcy5faVJlbW92ZU1hdGVyaWFsUGFzc0RhdGEodGhpcy5fcG9vbFttYXRlcmlhbFBhc3MuaWRdKTtcblxuXHRcdGRlbGV0ZSB0aGlzLl9wb29sW21hdGVyaWFsUGFzcy5pZF07XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZVBvb2woKVxuXHR7XG5cdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fcG9vbClcblx0XHRcdCg8TWF0ZXJpYWxQYXNzRGF0YT4gdGhpcy5fcG9vbFtpZF0pLm1hdGVyaWFsUGFzcy5faVJlbW92ZU1hdGVyaWFsUGFzc0RhdGEodGhpcy5fcG9vbFtpZF0pO1xuXG5cdFx0ZGVsZXRlIHRoaXMuX3Bvb2w7XG5cdH1cbn1cblxuZXhwb3J0ID0gTWF0ZXJpYWxQYXNzRGF0YVBvb2w7Il19 \ No newline at end of file diff --git a/lib/core/pool/ProgramData.js b/lib/core/pool/ProgramData.js deleted file mode 100755 index 6319c7c8..00000000 --- a/lib/core/pool/ProgramData.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * - * @class away.pool.ProgramDataBase - */ -var ProgramData = (function () { - function ProgramData(pool, context, key) { - this.usages = 0; - this._pool = pool; - this.context = context; - this._key = key; - this.context.registerProgram(this); - } - /** - * - */ - ProgramData.prototype.dispose = function () { - this.usages--; - if (!this.usages) { - this._pool.disposeItem(this._key); - this.context.unRegisterProgram(this); - if (this.program) - this.program.dispose(); - } - this.program = null; - }; - ProgramData.PROGRAMDATA_ID_COUNT = 0; - return ProgramData; -})(); -module.exports = ProgramData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvcHJvZ3JhbWRhdGEudHMiXSwibmFtZXMiOlsiUHJvZ3JhbURhdGEiLCJQcm9ncmFtRGF0YS5jb25zdHJ1Y3RvciIsIlByb2dyYW1EYXRhLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQUlBLEFBSUE7OztHQURHO0lBQ0csV0FBVztJQWVoQkEsU0FmS0EsV0FBV0EsQ0FlSkEsSUFBb0JBLEVBQUVBLE9BQXFCQSxFQUFFQSxHQUFVQTtRQU41REMsV0FBTUEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFReEJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxPQUFPQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsR0FBR0EsQ0FBQ0E7UUFDaEJBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLGVBQWVBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ3BDQSxDQUFDQTtJQUVERDs7T0FFR0E7SUFDSUEsNkJBQU9BLEdBQWRBO1FBRUNFLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBO1FBRWRBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1lBQ2xCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUVsQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUVyQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7Z0JBQ2hCQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUN6QkEsQ0FBQ0E7UUFFREEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDckJBLENBQUNBO0lBdENhRixnQ0FBb0JBLEdBQVVBLENBQUNBLENBQUNBO0lBdUMvQ0Esa0JBQUNBO0FBQURBLENBekNBLEFBeUNDQSxJQUFBO0FBRUQsQUFBcUIsaUJBQVosV0FBVyxDQUFDIiwiZmlsZSI6ImNvcmUvcG9vbC9Qcm9ncmFtRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvZ3JhbURhdGFQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1Byb2dyYW1EYXRhUG9vbFwiKTtcbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTEJhc2VcIik7XG5pbXBvcnQgSVByb2dyYW1cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lQcm9ncmFtXCIpO1xuXG4vKipcbiAqXG4gKiBAY2xhc3MgYXdheS5wb29sLlByb2dyYW1EYXRhQmFzZVxuICovXG5jbGFzcyBQcm9ncmFtRGF0YVxue1xuXHRwdWJsaWMgc3RhdGljIFBST0dSQU1EQVRBX0lEX0NPVU5UOm51bWJlciA9IDA7XG5cblx0cHJpdmF0ZSBfcG9vbDpQcm9ncmFtRGF0YVBvb2w7XG5cdHByaXZhdGUgX2tleTpzdHJpbmc7XG5cblx0cHVibGljIGNvbnRleHQ6Q29udGV4dEdMQmFzZTtcblxuXHRwdWJsaWMgdXNhZ2VzOm51bWJlciA9IDA7XG5cblx0cHVibGljIHByb2dyYW06SVByb2dyYW07XG5cblx0cHVibGljIGlkOm51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihwb29sOlByb2dyYW1EYXRhUG9vbCwgY29udGV4dDpDb250ZXh0R0xCYXNlLCBrZXk6c3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5fcG9vbCA9IHBvb2w7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0XHR0aGlzLl9rZXkgPSBrZXk7XG5cdFx0dGhpcy5jb250ZXh0LnJlZ2lzdGVyUHJvZ3JhbSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy51c2FnZXMtLTtcblxuXHRcdGlmICghdGhpcy51c2FnZXMpIHtcblx0XHRcdHRoaXMuX3Bvb2wuZGlzcG9zZUl0ZW0odGhpcy5fa2V5KTtcblxuXHRcdFx0dGhpcy5jb250ZXh0LnVuUmVnaXN0ZXJQcm9ncmFtKHRoaXMpO1xuXG5cdFx0XHRpZiAodGhpcy5wcm9ncmFtKVxuXHRcdFx0XHR0aGlzLnByb2dyYW0uZGlzcG9zZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gUHJvZ3JhbURhdGE7Il19 \ No newline at end of file diff --git a/lib/core/pool/ProgramDataPool.js b/lib/core/pool/ProgramDataPool.js deleted file mode 100755 index 25eb0d36..00000000 --- a/lib/core/pool/ProgramDataPool.js +++ /dev/null @@ -1,36 +0,0 @@ -var ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); -/** - * @class away.pool.ProgramDataPool - */ -var ProgramDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function ProgramDataPool(context) { - this._pool = new Object(); - this._context = context; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - ProgramDataPool.prototype.getItem = function (key) { - return this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key)); - }; - /** - * //TODO - * - * @param materialOwner - */ - ProgramDataPool.prototype.disposeItem = function (key) { - this._pool[key] = null; - }; - return ProgramDataPool; -})(); -module.exports = ProgramDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvcHJvZ3JhbWRhdGFwb29sLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1EYXRhUG9vbCIsIlByb2dyYW1EYXRhUG9vbC5jb25zdHJ1Y3RvciIsIlByb2dyYW1EYXRhUG9vbC5nZXRJdGVtIiwiUHJvZ3JhbURhdGFQb29sLmRpc3Bvc2VJdGVtIl0sIm1hcHBpbmdzIjoiQUFFQSxJQUFPLFdBQVcsV0FBZSwwQ0FBMEMsQ0FBQyxDQUFDO0FBSTdFLEFBR0E7O0dBREc7SUFDRyxlQUFlO0lBS3BCQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxlQUFlQSxDQVVSQSxPQUFxQkE7UUFSekJDLFVBQUtBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1FBVW5DQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLGlDQUFPQSxHQUFkQSxVQUFlQSxHQUFVQTtRQUV4QkUsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsV0FBV0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDekZBLENBQUNBO0lBRURGOzs7O09BSUdBO0lBQ0lBLHFDQUFXQSxHQUFsQkEsVUFBbUJBLEdBQVVBO1FBRTVCRyxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN4QkEsQ0FBQ0E7SUFDRkgsc0JBQUNBO0FBQURBLENBbkNBLEFBbUNDQSxJQUFBO0FBRUQsQUFBeUIsaUJBQWhCLGVBQWUsQ0FBQyIsImZpbGUiOiJjb3JlL3Bvb2wvUHJvZ3JhbURhdGFQb29sLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcblxuaW1wb3J0IFByb2dyYW1EYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUHJvZ3JhbURhdGFcIik7XG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlByb2dyYW1EYXRhUG9vbFxuICovXG5jbGFzcyBQcm9ncmFtRGF0YVBvb2xcbntcblx0cHJpdmF0ZSBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dEdMQmFzZTtcblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSB0ZXh0dXJlRGF0YUNsYXNzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OkNvbnRleHRHTEJhc2UpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICogQHJldHVybnMgSVRleHR1cmVcblx0ICovXG5cdHB1YmxpYyBnZXRJdGVtKGtleTpzdHJpbmcpOlByb2dyYW1EYXRhXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcG9vbFtrZXldIHx8ICh0aGlzLl9wb29sW2tleV0gPSBuZXcgUHJvZ3JhbURhdGEodGhpcywgdGhpcy5fY29udGV4dCwga2V5KSk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZUl0ZW0oa2V5OnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3Bvb2xba2V5XSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gUHJvZ3JhbURhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/RenderableBase.js b/lib/core/pool/RenderableBase.js deleted file mode 100755 index 754dc940..00000000 --- a/lib/core/pool/RenderableBase.js +++ /dev/null @@ -1,228 +0,0 @@ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -var IndexDataPool = require("awayjs-stagegl/lib/core/pool/IndexDataPool"); -var VertexDataPool = require("awayjs-stagegl/lib/core/pool/VertexDataPool"); -/** - * @class RenderableListItem - */ -var RenderableBase = (function () { - /** - * - * @param sourceEntity - * @param materialOwner - * @param subGeometry - * @param animationSubGeometry - */ - function RenderableBase(pool, sourceEntity, materialOwner, level, indexOffset) { - var _this = this; - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - this._geometryDirty = true; - this._indexDataDirty = true; - this._vertexData = new Object(); - this._pVertexDataDirty = new Object(); - this._vertexOffset = new Object(); - this._onIndicesUpdatedDelegate = function (event) { return _this._onIndicesUpdated(event); }; - this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; - //store a reference to the pool for later disposal - this._pool = pool; - //reference to level of overflow - this._level = level; - //reference to the offset on indices (if this is an overflow renderable) - this._indexOffset = indexOffset; - this.sourceEntity = sourceEntity; - this.materialOwner = materialOwner; - } - Object.defineProperty(RenderableBase.prototype, "overflow", { - /** - * - */ - get: function () { - if (this._indexDataDirty) - this._updateIndexData(); - return this._overflow; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderableBase.prototype, "numTriangles", { - /** - * - */ - get: function () { - return this._numTriangles; - }, - enumerable: true, - configurable: true - }); - /** - * - */ - RenderableBase.prototype.getIndexData = function () { - if (this._indexDataDirty) - this._updateIndexData(); - return this._indexData; - }; - /** - * - */ - RenderableBase.prototype.getVertexData = function (dataType) { - if (this._indexDataDirty) - this._updateIndexData(); - if (this._pVertexDataDirty[dataType]) - this._updateVertexData(dataType); - return this._vertexData[this._concatenateArrays ? TriangleSubGeometry.VERTEX_DATA : dataType]; - }; - /** - * - */ - RenderableBase.prototype.getVertexOffset = function (dataType) { - if (this._indexDataDirty) - this._updateIndexData(); - if (this._pVertexDataDirty[dataType]) - this._updateVertexData(dataType); - return this._vertexOffset[dataType]; - }; - RenderableBase.prototype.dispose = function () { - this._pool.disposeItem(this.materialOwner); - this._indexData.dispose(); - this._indexData = null; - for (var dataType in this._vertexData) { - this._vertexData[dataType].dispose(); - this._vertexData[dataType] = null; - } - if (this._overflow) { - this._overflow.dispose(); - this._overflow = null; - } - }; - RenderableBase.prototype.invalidateGeometry = function () { - this._geometryDirty = true; - //invalidate indices - if (this._level == 0) - this._indexDataDirty = true; - if (this._overflow) - this._overflow.invalidateGeometry(); - }; - /** - * - */ - RenderableBase.prototype.invalidateIndexData = function () { - this._indexDataDirty = true; - }; - /** - * //TODO - * - * @param dataType - */ - RenderableBase.prototype.invalidateVertexData = function (dataType) { - this._pVertexDataDirty[dataType] = true; - }; - RenderableBase.prototype._pGetSubGeometry = function () { - throw new AbstractMethodError(); - }; - /** - * //TODO - * - * @param subGeometry - * @param offset - * @internal - */ - RenderableBase.prototype._iFillIndexData = function (indexOffset) { - if (this._geometryDirty) - this._updateGeometry(); - this._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset); - this._numTriangles = this._indexData.data.length / 3; - indexOffset = this._indexData.offset; - //check if there is more to split - if (indexOffset < this._subGeometry.indices.length) { - if (!this._overflow) - this._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1); - this._overflow._iFillIndexData(indexOffset); - } - else if (this._overflow) { - this._overflow.dispose(); - this._overflow = null; - } - }; - RenderableBase.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - throw new AbstractMethodError(); - }; - /** - * //TODO - * - * @private - */ - RenderableBase.prototype._updateGeometry = function () { - if (this._subGeometry) { - if (this._level == 0) - this._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); - this._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); - } - this._subGeometry = this._pGetSubGeometry(); - this._concatenateArrays = this._subGeometry.concatenateArrays; - if (this._subGeometry) { - if (this._level == 0) - this._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); - this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); - } - //dispose - // if (this._indexData) { - // this._indexData.dispose(); //TODO where is a good place to dispose? - // this._indexData = null; - // } - // for (var dataType in this._vertexData) { - // ( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose? - // this._vertexData[dataType] = null; - // } - this._geometryDirty = false; - //specific vertex data types have to be invalidated in the specific renderable - }; - /** - * //TODO - * - * @private - */ - RenderableBase.prototype._updateIndexData = function () { - this._iFillIndexData(this._indexOffset); - this._indexDataDirty = false; - }; - /** - * //TODO - * - * @param dataType - * @private - */ - RenderableBase.prototype._updateVertexData = function (dataType) { - this._vertexOffset[dataType] = this._subGeometry.getOffset(dataType); - if (this._subGeometry.concatenateArrays) - dataType = SubGeometryBase.VERTEX_DATA; - this._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType); - this._pVertexDataDirty[dataType] = false; - }; - /** - * //TODO - * - * @param event - * @private - */ - RenderableBase.prototype._onIndicesUpdated = function (event) { - this.invalidateIndexData(); - }; - /** - * //TODO - * - * @param event - * @private - */ - RenderableBase.prototype._onVerticesUpdated = function (event) { - this._concatenateArrays = event.target.concatenateArrays; - this.invalidateVertexData(event.dataType); - }; - return RenderableBase; -})(); -module.exports = RenderableBase; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvcmVuZGVyYWJsZWJhc2UudHMiXSwibmFtZXMiOlsiUmVuZGVyYWJsZUJhc2UiLCJSZW5kZXJhYmxlQmFzZS5jb25zdHJ1Y3RvciIsIlJlbmRlcmFibGVCYXNlLm92ZXJmbG93IiwiUmVuZGVyYWJsZUJhc2UubnVtVHJpYW5nbGVzIiwiUmVuZGVyYWJsZUJhc2UuZ2V0SW5kZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuZ2V0VmVydGV4RGF0YSIsIlJlbmRlcmFibGVCYXNlLmdldFZlcnRleE9mZnNldCIsIlJlbmRlcmFibGVCYXNlLmRpc3Bvc2UiLCJSZW5kZXJhYmxlQmFzZS5pbnZhbGlkYXRlR2VvbWV0cnkiLCJSZW5kZXJhYmxlQmFzZS5pbnZhbGlkYXRlSW5kZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuaW52YWxpZGF0ZVZlcnRleERhdGEiLCJSZW5kZXJhYmxlQmFzZS5fcEdldFN1Ykdlb21ldHJ5IiwiUmVuZGVyYWJsZUJhc2UuX2lGaWxsSW5kZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuX3BHZXRPdmVyZmxvd1JlbmRlcmFibGUiLCJSZW5kZXJhYmxlQmFzZS5fdXBkYXRlR2VvbWV0cnkiLCJSZW5kZXJhYmxlQmFzZS5fdXBkYXRlSW5kZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuX3VwZGF0ZVZlcnRleERhdGEiLCJSZW5kZXJhYmxlQmFzZS5fb25JbmRpY2VzVXBkYXRlZCIsIlJlbmRlcmFibGVCYXNlLl9vblZlcnRpY2VzVXBkYXRlZCJdLCJtYXBwaW5ncyI6IkFBQ0EsSUFBTyxtQkFBbUIsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBR3JGLElBQU8sZUFBZSxXQUFjLHlDQUF5QyxDQUFDLENBQUM7QUFDL0UsSUFBTyxtQkFBbUIsV0FBYSw2Q0FBNkMsQ0FBQyxDQUFDO0FBSXRGLElBQU8sZ0JBQWdCLFdBQWMsNENBQTRDLENBQUMsQ0FBQztBQUluRixJQUFPLGFBQWEsV0FBYyw0Q0FBNEMsQ0FBQyxD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RGtCLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBc0JBLEtBQUtBLENBQUNBLE1BQU9BLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFFN0VBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7SUFDM0NBLENBQUNBO0lBQ0ZsQixxQkFBQ0E7QUFBREEsQ0FoVkEsQUFnVkNBLElBQUE7QUFFRCxBQUF3QixpQkFBZixjQUFjLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL1JlbmRlcmFibGVCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IEFic3RyYWN0TWV0aG9kRXJyb3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXJyb3JzL0Fic3RyYWN0TWV0aG9kRXJyb3JcIik7XG5cbmltcG9ydCBJTWF0ZXJpYWxPd25lclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvSU1hdGVyaWFsT3duZXJcIik7XG5pbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgSVJlbmRlcmFibGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvSVJlbmRlcmFibGVcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuaW1wb3J0IElFbnRpdHlcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvSUVudGl0eVwiKTtcbmltcG9ydCBTdWJHZW9tZXRyeUV2ZW50XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZXZlbnRzL1N1Ykdlb21ldHJ5RXZlbnRcIik7XG5pbXBvcnQgTWF0ZXJpYWxCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvTWF0ZXJpYWxCYXNlXCIpO1xuXG5pbXBvcnQgSW5kZXhEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvSW5kZXhEYXRhXCIpO1xuaW1wb3J0IEluZGV4RGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvSW5kZXhEYXRhUG9vbFwiKTtcbmltcG9ydCBWZXJ0ZXhEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvVmVydGV4RGF0YVwiKTtcbmltcG9ydCBWZXJ0ZXhEYXRhUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9WZXJ0ZXhEYXRhUG9vbFwiKTtcblxuLyoqXG4gKiBAY2xhc3MgUmVuZGVyYWJsZUxpc3RJdGVtXG4gKi9cbmNsYXNzIFJlbmRlcmFibGVCYXNlIGltcGxlbWVudHMgSVJlbmRlcmFibGVcbntcblx0cHJpdmF0ZSBfb25JbmRpY2VzVXBkYXRlZERlbGVnYXRlOihldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB2b2lkO1xuXHRwcml2YXRlIF9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlOihldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgX3N1Ykdlb21ldHJ5OlN1Ykdlb21ldHJ5QmFzZTtcblx0cHJpdmF0ZSBfZ2VvbWV0cnlEaXJ0eTpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfaW5kZXhEYXRhOkluZGV4RGF0YTtcblx0cHJpdmF0ZSBfaW5kZXhEYXRhRGlydHk6Ym9vbGVhbiA9IHRydWU7XG5cdHByaXZhdGUgX3ZlcnRleERhdGE6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwdWJsaWMgX3BWZXJ0ZXhEYXRhRGlydHk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF92ZXJ0ZXhPZmZzZXQ6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdHByaXZhdGUgX2xldmVsOm51bWJlcjtcblx0cHJpdmF0ZSBfaW5kZXhPZmZzZXQ6bnVtYmVyO1xuXHRwcml2YXRlIF9vdmVyZmxvdzpSZW5kZXJhYmxlQmFzZTtcblx0cHJpdmF0ZSBfbnVtVHJpYW5nbGVzOm51bWJlcjtcblx0cHJpdmF0ZSBfY29uY2F0ZW5hdGVBcnJheXM6Ym9vbGVhbjtcblxuXG5cdHB1YmxpYyBKT0lOVF9JTkRFWF9GT1JNQVQ6c3RyaW5nO1xuXHRwdWJsaWMgSk9JTlRfV0VJR0hUX0ZPUk1BVDpzdHJpbmc7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgX3Bvb2w6UmVuZGVyYWJsZVBvb2w7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG92ZXJmbG93KCk6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdGlmICh0aGlzLl9pbmRleERhdGFEaXJ0eSlcblx0XHRcdHRoaXMuX3VwZGF0ZUluZGV4RGF0YSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX292ZXJmbG93O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVRyaWFuZ2xlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bVRyaWFuZ2xlcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG5leHQ6UmVuZGVyYWJsZUJhc2U7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgbWF0ZXJpYWxJZDpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVuZGVyT3JkZXJJZDpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgekluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBjYXNjYWRlZDpib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHJlbmRlclNjZW5lVHJhbnNmb3JtOk1hdHJpeDNEO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHNvdXJjZUVudGl0eTpJRW50aXR5O1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG1hdGVyaWFsT3duZXI6SU1hdGVyaWFsT3duZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgbWF0ZXJpYWw6TWF0ZXJpYWxCYXNlO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldEluZGV4RGF0YSgpOkluZGV4RGF0YVxuXHR7XG5cdFx0aWYgKHRoaXMuX2luZGV4RGF0YURpcnR5KVxuXHRcdFx0dGhpcy5fdXBkYXRlSW5kZXhEYXRhKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5faW5kZXhEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmVydGV4RGF0YShkYXRhVHlwZTpzdHJpbmcpOlZlcnRleERhdGFcblx0e1xuXHRcdGlmICh0aGlzLl9pbmRleERhdGFEaXJ0eSlcblx0XHRcdHRoaXMuX3VwZGF0ZUluZGV4RGF0YSgpO1xuXG5cdFx0aWYgKHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdKVxuXHRcdFx0dGhpcy5fdXBkYXRlVmVydGV4RGF0YShkYXRhVHlwZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5fdmVydGV4RGF0YVt0aGlzLl9jb25jYXRlbmF0ZUFycmF5cz8gVHJpYW5nbGVTdWJHZW9tZXRyeS5WRVJURVhfREFUQSA6IGRhdGFUeXBlXVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmVydGV4T2Zmc2V0KGRhdGFUeXBlOnN0cmluZyk6bnVtYmVyXG5cdHtcblx0XHRpZiAodGhpcy5faW5kZXhEYXRhRGlydHkpXG5cdFx0XHR0aGlzLl91cGRhdGVJbmRleERhdGEoKTtcblxuXHRcdGlmICh0aGlzLl9wVmVydGV4RGF0YURpcnR5W2RhdGFUeXBlXSlcblx0XHRcdHRoaXMuX3VwZGF0ZVZlcnRleERhdGEoZGF0YVR5cGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ZlcnRleE9mZnNldFtkYXRhVHlwZV07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZUVudGl0eVxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxPd25lclxuXHQgKiBAcGFyYW0gc3ViR2VvbWV0cnlcblx0ICogQHBhcmFtIGFuaW1hdGlvblN1Ykdlb21ldHJ5XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwb29sOlJlbmRlcmFibGVQb29sLCBzb3VyY2VFbnRpdHk6SUVudGl0eSwgbWF0ZXJpYWxPd25lcjpJTWF0ZXJpYWxPd25lciwgbGV2ZWw6bnVtYmVyID0gMCwgaW5kZXhPZmZzZXQ6bnVtYmVyID0gMClcblx0e1xuXHRcdHRoaXMuX29uSW5kaWNlc1VwZGF0ZWREZWxlZ2F0ZSA9IChldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB0aGlzLl9vbkluZGljZXNVcGRhdGVkKGV2ZW50KTtcblx0XHR0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlID0gKGV2ZW50OlN1Ykdlb21ldHJ5RXZlbnQpID0+IHRoaXMuX29uVmVydGljZXNVcGRhdGVkKGV2ZW50KTtcblxuXHRcdC8vc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIHBvb2wgZm9yIGxhdGVyIGRpc3Bvc2FsXG5cdFx0dGhpcy5fcG9vbCA9IHBvb2w7XG5cblx0XHQvL3JlZmVyZW5jZSB0byBsZXZlbCBvZiBvdmVyZmxvd1xuXHRcdHRoaXMuX2xldmVsID0gbGV2ZWw7XG5cblx0XHQvL3JlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9uIGluZGljZXMgKGlmIHRoaXMgaXMgYW4gb3ZlcmZsb3cgcmVuZGVyYWJsZSlcblx0XHR0aGlzLl9pbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0O1xuXG5cdFx0dGhpcy5zb3VyY2VFbnRpdHkgPSBzb3VyY2VFbnRpdHk7XG5cdFx0dGhpcy5tYXRlcmlhbE93bmVyID0gbWF0ZXJpYWxPd25lcjtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX3Bvb2wuZGlzcG9zZUl0ZW0odGhpcy5tYXRlcmlhbE93bmVyKTtcblxuXHRcdHRoaXMuX2luZGV4RGF0YS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5faW5kZXhEYXRhID0gbnVsbDtcblxuXHRcdGZvciAodmFyIGRhdGFUeXBlIGluIHRoaXMuX3ZlcnRleERhdGEpIHtcblx0XHRcdCg8VmVydGV4RGF0YT4gdGhpcy5fdmVydGV4RGF0YVtkYXRhVHlwZV0pLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3ZlcnRleERhdGFbZGF0YVR5cGVdID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fb3ZlcmZsb3cpIHtcblx0XHRcdHRoaXMuX292ZXJmbG93LmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX292ZXJmbG93ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaW52YWxpZGF0ZUdlb21ldHJ5KClcblx0e1xuXHRcdHRoaXMuX2dlb21ldHJ5RGlydHkgPSB0cnVlO1xuXG5cdFx0Ly9pbnZhbGlkYXRlIGluZGljZXNcblx0XHRpZiAodGhpcy5fbGV2ZWwgPT0gMClcblx0XHRcdHRoaXMuX2luZGV4RGF0YURpcnR5ID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLl9vdmVyZmxvdylcblx0XHRcdHRoaXMuX292ZXJmbG93LmludmFsaWRhdGVHZW9tZXRyeSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgaW52YWxpZGF0ZUluZGV4RGF0YSgpXG5cdHtcblx0XHR0aGlzLl9pbmRleERhdGFEaXJ0eSA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhVHlwZVxuXHQgKi9cblx0cHVibGljIGludmFsaWRhdGVWZXJ0ZXhEYXRhKGRhdGFUeXBlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6U3ViR2VvbWV0cnlCYXNlXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gc3ViR2VvbWV0cnlcblx0ICogQHBhcmFtIG9mZnNldFxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBfaUZpbGxJbmRleERhdGEoaW5kZXhPZmZzZXQ6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2dlb21ldHJ5RGlydHkpXG5cdFx0XHR0aGlzLl91cGRhdGVHZW9tZXRyeSgpO1xuXG5cdFx0dGhpcy5faW5kZXhEYXRhID0gSW5kZXhEYXRhUG9vbC5nZXRJdGVtKHRoaXMuX3N1Ykdlb21ldHJ5LCB0aGlzLl9sZXZlbCwgaW5kZXhPZmZzZXQpO1xuXG5cdFx0dGhpcy5fbnVtVHJpYW5nbGVzID0gdGhpcy5faW5kZXhEYXRhLmRhdGEubGVuZ3RoLzM7XG5cblx0XHRpbmRleE9mZnNldCA9IHRoaXMuX2luZGV4RGF0YS5vZmZzZXQ7XG5cblx0XHQvL2NoZWNrIGlmIHRoZXJlIGlzIG1vcmUgdG8gc3BsaXRcblx0XHRpZiAoaW5kZXhPZmZzZXQgPCB0aGlzLl9zdWJHZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCkge1xuXHRcdFx0aWYgKCF0aGlzLl9vdmVyZmxvdylcblx0XHRcdFx0dGhpcy5fb3ZlcmZsb3cgPSB0aGlzLl9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlKHRoaXMuX3Bvb2wsIHRoaXMubWF0ZXJpYWxPd25lciwgaW5kZXhPZmZzZXQsIHRoaXMuX2xldmVsICsgMSk7XG5cblx0XHRcdHRoaXMuX292ZXJmbG93Ll9pRmlsbEluZGV4RGF0YShpbmRleE9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vdmVyZmxvdykge1xuXHRcdFx0dGhpcy5fb3ZlcmZsb3cuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5fb3ZlcmZsb3cgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBfcEdldE92ZXJmbG93UmVuZGVyYWJsZShwb29sOlJlbmRlcmFibGVQb29sLCBtYXRlcmlhbE93bmVyOklNYXRlcmlhbE93bmVyLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVHZW9tZXRyeSgpXG5cdHtcblx0XHRpZiAodGhpcy5fc3ViR2VvbWV0cnkpIHtcblx0XHRcdGlmICh0aGlzLl9sZXZlbCA9PSAwKVxuXHRcdFx0XHR0aGlzLl9zdWJHZW9tZXRyeS5yZW1vdmVFdmVudExpc3RlbmVyKFN1Ykdlb21ldHJ5RXZlbnQuSU5ESUNFU19VUERBVEVELCB0aGlzLl9vbkluZGljZXNVcGRhdGVkRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fc3ViR2VvbWV0cnkucmVtb3ZlRXZlbnRMaXN0ZW5lcihTdWJHZW9tZXRyeUV2ZW50LlZFUlRJQ0VTX1VQREFURUQsIHRoaXMuX29uVmVydGljZXNVcGRhdGVkRGVsZWdhdGUpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1Ykdlb21ldHJ5ID0gdGhpcy5fcEdldFN1Ykdlb21ldHJ5KCk7XG5cblx0XHR0aGlzLl9jb25jYXRlbmF0ZUFycmF5cyA9IHRoaXMuX3N1Ykdlb21ldHJ5LmNvbmNhdGVuYXRlQXJyYXlzO1xuXG5cdFx0aWYgKHRoaXMuX3N1Ykdlb21ldHJ5KSB7XG5cdFx0XHRpZiAodGhpcy5fbGV2ZWwgPT0gMClcblx0XHRcdFx0dGhpcy5fc3ViR2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lcihTdWJHZW9tZXRyeUV2ZW50LklORElDRVNfVVBEQVRFRCwgdGhpcy5fb25JbmRpY2VzVXBkYXRlZERlbGVnYXRlKTtcblx0XHRcdHRoaXMuX3N1Ykdlb21ldHJ5LmFkZEV2ZW50TGlzdGVuZXIoU3ViR2VvbWV0cnlFdmVudC5WRVJUSUNFU19VUERBVEVELCB0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlKTtcblx0XHR9XG5cblx0XHQvL2Rpc3Bvc2Vcbi8vXHRcdFx0aWYgKHRoaXMuX2luZGV4RGF0YSkge1xuLy9cdFx0XHRcdHRoaXMuX2luZGV4RGF0YS5kaXNwb3NlKCk7IC8vVE9ETyB3aGVyZSBpcyBhIGdvb2QgcGxhY2UgdG8gZGlzcG9zZT9cbi8vXHRcdFx0XHR0aGlzLl9pbmRleERhdGEgPSBudWxsO1xuLy9cdFx0XHR9XG5cbi8vXHRcdFx0Zm9yICh2YXIgZGF0YVR5cGUgaW4gdGhpcy5fdmVydGV4RGF0YSkge1xuLy9cdFx0XHRcdCg8VmVydGV4RGF0YT4gdGhpcy5fdmVydGV4RGF0YVtkYXRhVHlwZV0pLmRpc3Bvc2UoKTsgLy9UT0RPIHdoZXJlIGlzIGEgZ29vZCBwbGFjZSB0byBkaXNwb3NlP1xuLy9cdFx0XHRcdHRoaXMuX3ZlcnRleERhdGFbZGF0YVR5cGVdID0gbnVsbDtcbi8vXHRcdFx0fVxuXG5cdFx0dGhpcy5fZ2VvbWV0cnlEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Ly9zcGVjaWZpYyB2ZXJ0ZXggZGF0YSB0eXBlcyBoYXZlIHRvIGJlIGludmFsaWRhdGVkIGluIHRoZSBzcGVjaWZpYyByZW5kZXJhYmxlXG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVJbmRleERhdGEoKVxuXHR7XG5cdFx0dGhpcy5faUZpbGxJbmRleERhdGEodGhpcy5faW5kZXhPZmZzZXQpO1xuXG5cdFx0dGhpcy5faW5kZXhEYXRhRGlydHkgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIGRhdGFUeXBlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVWZXJ0ZXhEYXRhKGRhdGFUeXBlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3ZlcnRleE9mZnNldFtkYXRhVHlwZV0gPSB0aGlzLl9zdWJHZW9tZXRyeS5nZXRPZmZzZXQoZGF0YVR5cGUpO1xuXG5cdFx0aWYgKHRoaXMuX3N1Ykdlb21ldHJ5LmNvbmNhdGVuYXRlQXJyYXlzKVxuXHRcdFx0ZGF0YVR5cGUgPSBTdWJHZW9tZXRyeUJhc2UuVkVSVEVYX0RBVEE7XG5cblx0XHR0aGlzLl92ZXJ0ZXhEYXRhW2RhdGFUeXBlXSA9IFZlcnRleERhdGFQb29sLmdldEl0ZW0odGhpcy5fc3ViR2VvbWV0cnksIHRoaXMuZ2V0SW5kZXhEYXRhKCksIGRhdGFUeXBlKTtcblxuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfb25JbmRpY2VzVXBkYXRlZChldmVudDpTdWJHZW9tZXRyeUV2ZW50KVxuXHR7XG5cdFx0dGhpcy5pbnZhbGlkYXRlSW5kZXhEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfb25WZXJ0aWNlc1VwZGF0ZWQoZXZlbnQ6U3ViR2VvbWV0cnlFdmVudClcblx0e1xuXHRcdHRoaXMuX2NvbmNhdGVuYXRlQXJyYXlzID0gKDxTdWJHZW9tZXRyeUJhc2U+IGV2ZW50LnRhcmdldCkuY29uY2F0ZW5hdGVBcnJheXM7XG5cblx0XHR0aGlzLmludmFsaWRhdGVWZXJ0ZXhEYXRhKGV2ZW50LmRhdGFUeXBlKTtcblx0fVxufVxuXG5leHBvcnQgPSBSZW5kZXJhYmxlQmFzZTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/SkyboxRenderable.js b/lib/core/pool/SkyboxRenderable.js deleted file mode 100755 index 5b0be3ac..00000000 --- a/lib/core/pool/SkyboxRenderable.js +++ /dev/null @@ -1,49 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -/** - * @class away.pool.SkyboxRenderable - */ -var SkyboxRenderable = (function (_super) { - __extends(SkyboxRenderable, _super); - /** - * //TODO - * - * @param pool - * @param skybox - */ - function SkyboxRenderable(pool, skybox) { - _super.call(this, pool, skybox, skybox); - } - /** - * //TODO - * - * @returns {away.base.TriangleSubGeometry} - * @private - */ - SkyboxRenderable.prototype._pGetSubGeometry = function () { - var geometry = SkyboxRenderable._geometry; - if (!geometry) { - geometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true); - geometry.autoDeriveNormals = false; - geometry.autoDeriveTangents = false; - geometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2)); - geometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1)); - } - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - return geometry; - }; - /** - * - */ - SkyboxRenderable.id = "skybox"; - return SkyboxRenderable; -})(RenderableBase); -module.exports = SkyboxRenderable; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvc2t5Ym94cmVuZGVyYWJsZS50cyJdLCJuYW1lcyI6WyJTa3lib3hSZW5kZXJhYmxlIiwiU2t5Ym94UmVuZGVyYWJsZS5jb25zdHJ1Y3RvciIsIlNreWJveFJlbmRlcmFibGUuX3BHZXRTdWJHZW9tZXRyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxtQkFBbUIsV0FBYSw2Q0FBNkMsQ0FBQyxDQUFDO0FBSXRGLElBQU8sY0FBYyxXQUFjLDZDQUE2QyxDQUFDLENBQUM7QUFFbEYsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUF1QkE7SUFZNUNBOzs7OztPQUtHQTtJQUNIQSxTQWxCS0EsZ0JBQWdCQSxDQWtCVEEsSUFBbUJBLEVBQUVBLE1BQWFBO1FBRTdDQyxrQkFBTUEsSUFBSUEsRUFBRUEsTUFBTUEsRUFBRUEsTUFBTUEsQ0FBQ0EsQ0FBQ0E7SUFDN0JBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSwyQ0FBZ0JBLEdBQXZCQTtRQUVDRSxJQUFJQSxRQUFRQSxHQUF1QkEsZ0JBQWdCQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUU5REEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDZkEsUUFBUUEsR0FBR0EsZ0JBQWdCQSxDQUFDQSxTQUFTQSxHQUFHQSxJQUFJQSxtQkFBbUJBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ3RFQSxRQUFRQSxDQUFDQSxpQkFBaUJBLEdBQUdBLEtBQUtBLENBQUNBO1lBQ25DQSxRQUFRQSxDQUFDQSxrQkFBa0JBLEdBQUdBLEtBQUtBLENBQUNBO1lBQ3BDQSxRQUFRQSxDQUFDQSxhQUFhQSxDQUFDQSxLQUFLQSxDQUFTQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsSkEsUUFBUUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBU0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDN0hBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxhQUFhQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVqRUEsTUFBTUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7SUFDakJBLENBQUNBO0lBMUNERjs7T0FFR0E7SUFDV0EsbUJBQUVBLEdBQVVBLFFBQVFBLENBQUNBO0lBd0NwQ0EsdUJBQUNBO0FBQURBLENBN0NBLEFBNkNDQSxFQTdDOEIsY0FBYyxFQTZDNUM7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL1NreWJveFJlbmRlcmFibGUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IFJlbmRlcmFibGVQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9SZW5kZXJhYmxlUG9vbFwiKTtcbmltcG9ydCBTa3lib3hcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvU2t5Ym94XCIpO1xuXG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5cbi8qKlxuICogQGNsYXNzIGF3YXkucG9vbC5Ta3lib3hSZW5kZXJhYmxlXG4gKi9cbmNsYXNzIFNreWJveFJlbmRlcmFibGUgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZVxue1xuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaWQ6c3RyaW5nID0gXCJza3lib3hcIjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIF9nZW9tZXRyeTpUcmlhbmdsZVN1Ykdlb21ldHJ5O1xuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHBvb2xcblx0ICogQHBhcmFtIHNreWJveFxuXHQgKi9cblx0Y29uc3RydWN0b3IocG9vbDpSZW5kZXJhYmxlUG9vbCwgc2t5Ym94OlNreWJveClcblx0e1xuXHRcdHN1cGVyKHBvb2wsIHNreWJveCwgc2t5Ym94KTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHJldHVybnMge2F3YXkuYmFzZS5UcmlhbmdsZVN1Ykdlb21ldHJ5fVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIF9wR2V0U3ViR2VvbWV0cnkoKTpUcmlhbmdsZVN1Ykdlb21ldHJ5XG5cdHtcblx0XHR2YXIgZ2VvbWV0cnk6VHJpYW5nbGVTdWJHZW9tZXRyeSA9IFNreWJveFJlbmRlcmFibGUuX2dlb21ldHJ5O1xuXG5cdFx0aWYgKCFnZW9tZXRyeSkge1xuXHRcdFx0Z2VvbWV0cnkgPSBTa3lib3hSZW5kZXJhYmxlLl9nZW9tZXRyeSA9IG5ldyBUcmlhbmdsZVN1Ykdlb21ldHJ5KHRydWUpO1xuXHRcdFx0Z2VvbWV0cnkuYXV0b0Rlcml2ZU5vcm1hbHMgPSBmYWxzZTtcblx0XHRcdGdlb21ldHJ5LmF1dG9EZXJpdmVUYW5nZW50cyA9IGZhbHNlO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlSW5kaWNlcyhBcnJheTxudW1iZXI+KDAsIDEsIDIsIDIsIDMsIDAsIDYsIDUsIDQsIDQsIDcsIDYsIDIsIDYsIDcsIDcsIDMsIDIsIDQsIDUsIDEsIDEsIDAsIDQsIDQsIDAsIDMsIDMsIDcsIDQsIDIsIDEsIDUsIDUsIDYsIDIpKTtcblx0XHRcdGdlb21ldHJ5LnVwZGF0ZVBvc2l0aW9ucyhBcnJheTxudW1iZXI+KC0xLCAxLCAtMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAtMSwgLTEsIDEpKTtcblx0XHR9XG5cblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQV0gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9XG59XG5cbmV4cG9ydCA9IFNreWJveFJlbmRlcmFibGU7Il19 \ No newline at end of file diff --git a/lib/core/pool/TextureData.js b/lib/core/pool/TextureData.js deleted file mode 100755 index 1fbf71d9..00000000 --- a/lib/core/pool/TextureData.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * - * @class away.pool.TextureDataBase - */ -var TextureData = (function () { - function TextureData(pool, context, textureProxy) { - this._pool = pool; - this.context = context; - this.textureProxy = textureProxy; - } - /** - * - */ - TextureData.prototype.dispose = function () { - this._pool.disposeItem(this.textureProxy); - this.texture.dispose(); - this.texture = null; - }; - /** - * - */ - TextureData.prototype.invalidate = function () { - this.invalid = true; - }; - return TextureData; -})(); -module.exports = TextureData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvdGV4dHVyZWRhdGEudHMiXSwibmFtZXMiOlsiVGV4dHVyZURhdGEiLCJUZXh0dXJlRGF0YS5jb25zdHJ1Y3RvciIsIlRleHR1cmVEYXRhLmRpc3Bvc2UiLCJUZXh0dXJlRGF0YS5pbnZhbGlkYXRlIl0sIm1hcHBpbmdzIjoiQUFPQSxBQUlBOzs7R0FERztJQUNHLFdBQVc7SUFZaEJBLFNBWktBLFdBQVdBLENBWUpBLElBQW9CQSxFQUFFQSxPQUFxQkEsRUFBRUEsWUFBNkJBO1FBRXJGQyxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNsQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLFlBQVlBLENBQUNBO0lBQ2xDQSxDQUFDQTtJQUVERDs7T0FFR0E7SUFDSUEsNkJBQU9BLEdBQWRBO1FBRUNFLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBRTFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDckJBLENBQUNBO0lBRURGOztPQUVHQTtJQUNJQSxnQ0FBVUEsR0FBakJBO1FBRUNHLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUNGSCxrQkFBQ0E7QUFBREEsQ0FyQ0EsQUFxQ0NBLElBQUE7QUFFRCxBQUFxQixpQkFBWixXQUFXLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL1RleHR1cmVEYXRhLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJVGV4dHVyZURhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3Bvb2wvSVRleHR1cmVEYXRhXCIpO1xuaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlUHJveHlCYXNlXCIpO1xuXG5pbXBvcnQgVGV4dHVyZURhdGFQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1RleHR1cmVEYXRhUG9vbFwiKTtcbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTEJhc2VcIik7XG5pbXBvcnQgSVRleHR1cmVCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVRleHR1cmVCYXNlXCIpO1xuXG4vKipcbiAqXG4gKiBAY2xhc3MgYXdheS5wb29sLlRleHR1cmVEYXRhQmFzZVxuICovXG5jbGFzcyBUZXh0dXJlRGF0YSBpbXBsZW1lbnRzIElUZXh0dXJlRGF0YVxue1xuXHRwcml2YXRlIF9wb29sOlRleHR1cmVEYXRhUG9vbDtcblxuXHRwdWJsaWMgY29udGV4dDpDb250ZXh0R0xCYXNlO1xuXG5cdHB1YmxpYyB0ZXh0dXJlOklUZXh0dXJlQmFzZTtcblxuXHRwdWJsaWMgdGV4dHVyZVByb3h5OlRleHR1cmVQcm94eUJhc2U7XG5cblx0cHVibGljIGludmFsaWQ6Ym9vbGVhbjtcblxuXHRjb25zdHJ1Y3Rvcihwb29sOlRleHR1cmVEYXRhUG9vbCwgY29udGV4dDpDb250ZXh0R0xCYXNlLCB0ZXh0dXJlUHJveHk6VGV4dHVyZVByb3h5QmFzZSlcblx0e1xuXHRcdHRoaXMuX3Bvb2wgPSBwb29sO1xuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdFx0dGhpcy50ZXh0dXJlUHJveHkgPSB0ZXh0dXJlUHJveHk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX3Bvb2wuZGlzcG9zZUl0ZW0odGhpcy50ZXh0dXJlUHJveHkpO1xuXG5cdFx0dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKTtcblx0XHR0aGlzLnRleHR1cmUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgaW52YWxpZGF0ZSgpXG5cdHtcblx0XHR0aGlzLmludmFsaWQgPSB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCA9IFRleHR1cmVEYXRhOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/TextureDataPool.js b/lib/core/pool/TextureDataPool.js deleted file mode 100755 index 31a469e3..00000000 --- a/lib/core/pool/TextureDataPool.js +++ /dev/null @@ -1,37 +0,0 @@ -var TextureData = require("awayjs-stagegl/lib/core/pool/TextureData"); -/** - * @class away.pool.TextureDataPool - */ -var TextureDataPool = (function () { - /** - * //TODO - * - * @param textureDataClass - */ - function TextureDataPool(context) { - this._pool = new Object(); - this._context = context; - } - /** - * //TODO - * - * @param materialOwner - * @returns ITexture - */ - TextureDataPool.prototype.getItem = function (textureProxy) { - return (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy)))); - }; - /** - * //TODO - * - * @param materialOwner - */ - TextureDataPool.prototype.disposeItem = function (textureProxy) { - textureProxy._iRemoveTextureData(this._pool[textureProxy.id]); - this._pool[textureProxy.id] = null; - }; - return TextureDataPool; -})(); -module.exports = TextureDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvdGV4dHVyZWRhdGFwb29sLnRzIl0sIm5hbWVzIjpbIlRleHR1cmVEYXRhUG9vbCIsIlRleHR1cmVEYXRhUG9vbC5jb25zdHJ1Y3RvciIsIlRleHR1cmVEYXRhUG9vbC5nZXRJdGVtIiwiVGV4dHVyZURhdGFQb29sLmRpc3Bvc2VJdGVtIl0sIm1hcHBpbmdzIjoiQUFFQSxJQUFPLFdBQVcsV0FBZSwwQ0FBMEMsQ0FBQyxDQUFDO0FBRzdFLEFBR0E7O0dBREc7SUFDRyxlQUFlO0lBS3BCQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxlQUFlQSxDQVVSQSxPQUFxQkE7UUFSekJDLFVBQUtBLEdBQVVBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBO1FBVW5DQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxPQUFPQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLGlDQUFPQSxHQUFkQSxVQUFlQSxZQUE2QkE7UUFFM0NFLE1BQU1BLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFlBQVlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsV0FBV0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQUE7SUFDMUpBLENBQUNBO0lBRURGOzs7O09BSUdBO0lBQ0lBLHFDQUFXQSxHQUFsQkEsVUFBbUJBLFlBQTZCQTtRQUUvQ0csWUFBWUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUU5REEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDcENBLENBQUNBO0lBQ0ZILHNCQUFDQTtBQUFEQSxDQXJDQSxBQXFDQ0EsSUFBQTtBQUVELEFBQXlCLGlCQUFoQixlQUFlLENBQUMiLCJmaWxlIjoiY29yZS9wb29sL1RleHR1cmVEYXRhUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBUZXh0dXJlRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1RleHR1cmVEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlRleHR1cmVEYXRhUG9vbFxuICovXG5jbGFzcyBUZXh0dXJlRGF0YVBvb2xcbntcblx0cHJpdmF0ZSBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dEdMQmFzZTtcblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSB0ZXh0dXJlRGF0YUNsYXNzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OkNvbnRleHRHTEJhc2UpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICogQHJldHVybnMgSVRleHR1cmVcblx0ICovXG5cdHB1YmxpYyBnZXRJdGVtKHRleHR1cmVQcm94eTpUZXh0dXJlUHJveHlCYXNlKTpUZXh0dXJlRGF0YVxuXHR7XG5cdFx0cmV0dXJuICh0aGlzLl9wb29sW3RleHR1cmVQcm94eS5pZF0gfHwgKHRoaXMuX3Bvb2xbdGV4dHVyZVByb3h5LmlkXSA9IHRleHR1cmVQcm94eS5faUFkZFRleHR1cmVEYXRhKG5ldyBUZXh0dXJlRGF0YSh0aGlzLCB0aGlzLl9jb250ZXh0LCB0ZXh0dXJlUHJveHkpKSkpXG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZUl0ZW0odGV4dHVyZVByb3h5OlRleHR1cmVQcm94eUJhc2UpXG5cdHtcblx0XHR0ZXh0dXJlUHJveHkuX2lSZW1vdmVUZXh0dXJlRGF0YSh0aGlzLl9wb29sW3RleHR1cmVQcm94eS5pZF0pO1xuXG5cdFx0dGhpcy5fcG9vbFt0ZXh0dXJlUHJveHkuaWRdID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgPSBUZXh0dXJlRGF0YVBvb2w7Il19 \ No newline at end of file diff --git a/lib/core/pool/TriangleSubMeshRenderable.js b/lib/core/pool/TriangleSubMeshRenderable.js deleted file mode 100755 index 29676d9e..00000000 --- a/lib/core/pool/TriangleSubMeshRenderable.js +++ /dev/null @@ -1,91 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -/** - * @class away.pool.TriangleSubMeshRenderable - */ -var TriangleSubMeshRenderable = (function (_super) { - __extends(TriangleSubMeshRenderable, _super); - /** - * //TODO - * - * @param pool - * @param subMesh - * @param level - * @param indexOffset - */ - function TriangleSubMeshRenderable(pool, subMesh, level, indexOffset) { - if (level === void 0) { level = 0; } - if (indexOffset === void 0) { indexOffset = 0; } - _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); - this.subMesh = subMesh; - } - /** - * - * @returns {SubGeometryBase} - * @protected - */ - TriangleSubMeshRenderable.prototype._pGetSubGeometry = function () { - var subGeometry; - if (this.subMesh.animator) - subGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry); - else - subGeometry = this.subMesh.subGeometry; - this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; - if (subGeometry.vertexNormals) - this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; - if (subGeometry.vertexTangents) - this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; - if (subGeometry.uvs) - this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; - if (subGeometry.secondaryUVs) - this._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true; - if (subGeometry.jointIndices) - this._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true; - if (subGeometry.jointWeights) - this._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true; - switch (subGeometry.jointsPerVertex) { - case 1: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1; - break; - case 2: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2; - break; - case 3: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3; - break; - case 4: - this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4; - break; - default: - } - return subGeometry; - }; - /** - * //TODO - * - * @param pool - * @param materialOwner - * @param level - * @param indexOffset - * @returns {away.pool.TriangleSubMeshRenderable} - * @protected - */ - TriangleSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { - return new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset); - }; - /** - * - */ - TriangleSubMeshRenderable.id = "trianglesubmesh"; - return TriangleSubMeshRenderable; -})(RenderableBase); -module.exports = TriangleSubMeshRenderable; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvdHJpYW5nbGVzdWJtZXNocmVuZGVyYWJsZS50cyJdLCJuYW1lcyI6WyJUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlIiwiVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZS5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUuX3BHZXRTdWJHZW9tZXRyeSIsIlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUuX3BHZXRPdmVyZmxvd1JlbmRlcmFibGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUd0RixJQUFPLGNBQWMsV0FBYyw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ2xGLElBQU8sMkJBQTJCLFdBQVcsNkRBQTZELENBQUMsQ0FBQztBQUU1RyxBQUdBOztHQURHO0lBQ0cseUJBQXlCO0lBQVNBLFVBQWxDQSx5QkFBeUJBLFVBQXVCQTtJQWFyREE7Ozs7Ozs7T0FPR0E7SUFDSEEsU0FyQktBLHlCQUF5QkEsQ0FxQmxCQSxJQUFtQkEsRUFBRUEsT0FBdUJBLEVBQUVBLEtBQWdCQSxFQUFFQSxXQUFzQkE7UUFBeENDLHFCQUFnQkEsR0FBaEJBLFNBQWdCQTtRQUFFQSwyQkFBc0JBLEdBQXRCQSxlQUFzQkE7UUFFakdBLGtCQUFNQSxJQUFJQSxFQUFFQSxPQUFPQSxDQUFDQSxVQUFVQSxFQUFFQSxPQUFPQSxFQUFFQSxLQUFLQSxFQUFFQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUU3REEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsT0FBT0EsQ0FBQ0E7SUFDeEJBLENBQUNBO0lBRUREOzs7O09BSUdBO0lBQ0lBLG9EQUFnQkEsR0FBdkJBO1FBRUNFLElBQUlBLFdBQStCQSxDQUFDQTtRQUVwQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsUUFBUUEsQ0FBQ0E7WUFDekJBLFdBQVdBLEdBQXlCQSxJQUFJQSxD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QUFDQSxDQUFDQTtJQUNqR0EsQ0FBQ0E7SUE1RkRIOztPQUVHQTtJQUNXQSw0QkFBRUEsR0FBVUEsaUJBQWlCQSxDQUFDQTtJQTBGN0NBLGdDQUFDQTtBQUFEQSxDQS9GQSxBQStGQ0EsRUEvRnVDLGNBQWMsRUErRnJEO0FBRUQsQUFBbUMsaUJBQTFCLHlCQUF5QixDQUFDIiwiZmlsZSI6ImNvcmUvcG9vbC9UcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJTWF0ZXJpYWxPd25lclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvSU1hdGVyaWFsT3duZXJcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJNZXNoXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Yk1lc2hcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuXG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdFwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVcbiAqL1xuY2xhc3MgVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZSBleHRlbmRzIFJlbmRlcmFibGVCYXNlXG57XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBpZDpzdHJpbmcgPSBcInRyaWFuZ2xlc3VibWVzaFwiO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN1Yk1lc2g6VHJpYW5nbGVTdWJNZXNoO1xuXG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gcG9vbFxuXHQgKiBAcGFyYW0gc3ViTWVzaFxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIGluZGV4T2Zmc2V0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwb29sOlJlbmRlcmFibGVQb29sLCBzdWJNZXNoOlRyaWFuZ2xlU3ViTWVzaCwgbGV2ZWw6bnVtYmVyID0gMCwgaW5kZXhPZmZzZXQ6bnVtYmVyID0gMClcblx0e1xuXHRcdHN1cGVyKHBvb2wsIHN1Yk1lc2gucGFyZW50TWVzaCwgc3ViTWVzaCwgbGV2ZWwsIGluZGV4T2Zmc2V0KTtcblxuXHRcdHRoaXMuc3ViTWVzaCA9IHN1Yk1lc2g7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1N1Ykdlb21ldHJ5QmFzZX1cblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0cHVibGljIF9wR2V0U3ViR2VvbWV0cnkoKTpUcmlhbmdsZVN1Ykdlb21ldHJ5XG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnk6VHJpYW5nbGVTdWJHZW9tZXRyeTtcblxuXHRcdGlmICh0aGlzLnN1Yk1lc2guYW5pbWF0b3IpXG5cdFx0XHRzdWJHZW9tZXRyeSA9IDxUcmlhbmdsZVN1Ykdlb21ldHJ5PiB0aGlzLnN1Yk1lc2guYW5pbWF0b3IuZ2V0UmVuZGVyYWJsZVN1Ykdlb21ldHJ5KHRoaXMsIHRoaXMuc3ViTWVzaC5zdWJHZW9tZXRyeSk7XG5cdFx0ZWxzZVxuXHRcdFx0c3ViR2VvbWV0cnkgPSB0aGlzLnN1Yk1lc2guc3ViR2VvbWV0cnk7XG5cblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQV0gPSB0cnVlO1xuXG5cdFx0aWYgKHN1Ykdlb21ldHJ5LnZlcnRleE5vcm1hbHMpXG5cdFx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuTk9STUFMX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS52ZXJ0ZXhUYW5nZW50cylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbVHJpYW5nbGVTdWJHZW9tZXRyeS5UQU5HRU5UX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS51dnMpXG5cdFx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuVVZfREFUQV0gPSB0cnVlO1xuXG5cdFx0aWYgKHN1Ykdlb21ldHJ5LnNlY29uZGFyeVVWcylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbVHJpYW5nbGVTdWJHZW9tZXRyeS5TRUNPTkRBUllfVVZfREFUQV0gPSB0cnVlO1xuXG5cdFx0aWYgKHN1Ykdlb21ldHJ5LmpvaW50SW5kaWNlcylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbVHJpYW5nbGVTdWJHZW9tZXRyeS5KT0lOVF9JTkRFWF9EQVRBXSA9IHRydWU7XG5cblx0XHRpZiAoc3ViR2VvbWV0cnkuam9pbnRXZWlnaHRzKVxuXHRcdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LkpPSU5UX1dFSUdIVF9EQVRBXSA9IHRydWU7XG5cblx0XHRzd2l0Y2goc3ViR2VvbWV0cnkuam9pbnRzUGVyVmVydGV4KSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRoaXMuSk9JTlRfSU5ERVhfRk9STUFUID0gdGhpcy5KT0lOVF9XRUlHSFRfRk9STUFUID0gQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzE7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHR0aGlzLkpPSU5UX0lOREVYX0ZPUk1BVCA9IHRoaXMuSk9JTlRfV0VJR0hUX0ZPUk1BVCA9IENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5GTE9BVF8yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0dGhpcy5KT0lOVF9JTkRFWF9GT1JNQVQgPSB0aGlzLkpPSU5UX1dFSUdIVF9GT1JNQVQgPSBDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfMztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdHRoaXMuSk9JTlRfSU5ERVhfRk9STUFUID0gdGhpcy5KT0lOVF9XRUlHSFRfRk9STUFUID0gQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gc3ViR2VvbWV0cnk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBwb29sXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqIEBwYXJhbSBsZXZlbFxuXHQgKiBAcGFyYW0gaW5kZXhPZmZzZXRcblx0ICogQHJldHVybnMge2F3YXkucG9vbC5UcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlfVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRwdWJsaWMgX3BHZXRPdmVyZmxvd1JlbmRlcmFibGUocG9vbDpSZW5kZXJhYmxlUG9vbCwgbWF0ZXJpYWxPd25lcjpJTWF0ZXJpYWxPd25lciwgbGV2ZWw6bnVtYmVyLCBpbmRleE9mZnNldDpudW1iZXIpOlJlbmRlcmFibGVCYXNlXG5cdHtcblx0XHRyZXR1cm4gbmV3IFRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUocG9vbCwgPFRyaWFuZ2xlU3ViTWVzaD4gbWF0ZXJpYWxPd25lciwgbGV2ZWwsIGluZGV4T2Zmc2V0KTtcblx0fVxufVxuXG5leHBvcnQgPSBUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/VertexData.js b/lib/core/pool/VertexData.js deleted file mode 100755 index b4d58d43..00000000 --- a/lib/core/pool/VertexData.js +++ /dev/null @@ -1,100 +0,0 @@ -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -/** - * - */ -var VertexData = (function () { - function VertexData(subGeometry, dataType) { - var _this = this; - this._dataDirty = true; - this.invalid = new Array(8); - this.buffers = new Array(8); - this.contexts = new Array(8); - this._subGeometry = subGeometry; - this._dataType = dataType; - this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; - this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); - } - VertexData.prototype.updateData = function (originalIndices, indexMappings) { - if (originalIndices === void 0) { originalIndices = null; } - if (indexMappings === void 0) { indexMappings = null; } - if (this._dataDirty) { - this._dataDirty = false; - this.dataPerVertex = this._subGeometry.getStride(this._dataType); - var vertices = this._subGeometry[this._dataType]; - if (indexMappings == null) { - this.setData(vertices); - } - else { - var splitVerts = new Array(originalIndices.length * this.dataPerVertex); - var originalIndex; - var splitIndex; - var i = 0; - var j = 0; - while (i < originalIndices.length) { - originalIndex = originalIndices[i]; - splitIndex = indexMappings[originalIndex] * this.dataPerVertex; - originalIndex *= this.dataPerVertex; - for (j = 0; j < this.dataPerVertex; j++) - splitVerts[splitIndex + j] = vertices[originalIndex + j]; - i++; - } - this.setData(splitVerts); - } - } - }; - VertexData.prototype.dispose = function () { - for (var i = 0; i < 8; ++i) { - if (this.contexts[i]) { - this.contexts[i].disposeVertexData(this); - this.contexts[i] = null; - } - } - }; - /** - * @private - */ - VertexData.prototype.disposeBuffers = function () { - for (var i = 0; i < 8; ++i) { - if (this.buffers[i]) { - this.buffers[i].dispose(); - this.buffers[i] = null; - } - } - }; - /** - * @private - */ - VertexData.prototype.invalidateBuffers = function () { - for (var i = 0; i < 8; ++i) - this.invalid[i] = true; - }; - /** - * - * @param data - * @param dataPerVertex - * @private - */ - VertexData.prototype.setData = function (data) { - if (this.data && this.data.length != data.length) - this.disposeBuffers(); - else - this.invalidateBuffers(); - this.data = data; - }; - /** - * //TODO - * - * @param event - * @private - */ - VertexData.prototype._onVerticesUpdated = function (event) { - var dataType = this._subGeometry.concatenateArrays ? SubGeometryBase.VERTEX_DATA : event.dataType; - if (dataType == this._dataType) - this._dataDirty = true; - }; - return VertexData; -})(); -module.exports = VertexData; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvdmVydGV4ZGF0YS50cyJdLCJuYW1lcyI6WyJWZXJ0ZXhEYXRhIiwiVmVydGV4RGF0YS5jb25zdHJ1Y3RvciIsIlZlcnRleERhdGEudXBkYXRlRGF0YSIsIlZlcnRleERhdGEuZGlzcG9zZSIsIlZlcnRleERhdGEuZGlzcG9zZUJ1ZmZlcnMiLCJWZXJ0ZXhEYXRhLmludmFsaWRhdGVCdWZmZXJzIiwiVmVydGV4RGF0YS5zZXREYXRhIiwiVmVydGV4RGF0YS5fb25WZXJ0aWNlc1VwZGF0ZWQiXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sZUFBZSxXQUFjLHlDQUF5QyxDQUFDLENBQUM7QUFDL0UsSUFBTyxnQkFBZ0IsV0FBYyw0Q0FBNEMsQ0FBQyxDQUFDO0FBS25GLEFBR0E7O0dBREc7SUFDRyxVQUFVO0lBaUJmQSxTQWpCS0EsVUFBVUEsQ0FpQkhBLFdBQTJCQSxFQUFFQSxRQUFlQTtRQWpCekRDLGlCQXlIQ0E7UUFwSFFBLGVBQVVBLEdBQUdBLElBQUlBLENBQUNBO1FBRW5CQSxZQUFPQSxHQUFrQkEsSUFBSUEsS0FBS0EsQ0FBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFL0NBLFlBQU9BLEdBQXdCQSxJQUFJQSxLQUFLQSxDQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFM0RBLGFBQVFBLEdBQXdCQSxJQUFJQSxLQUFLQSxDQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFRbEVBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLFdBQVdBLENBQUNBO1FBQ2hDQSxJQUFJQSxDQUFDQSxTQUFTQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUUxQkEsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxHQUFHQSxVQUFDQSxLQUFzQkEsSUFBS0EsT0FBQUEsS0FBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUE5QkEsQ0FBOEJBLENBQUNBO1FBQzdGQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxnQkFBZ0JBLENBQUNB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S0FBc0JBO1FBRWhETyxJQUFJQSxRQUFRQSxHQUFVQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxpQkFBaUJBLEdBQUVBLGVBQWVBLENBQUNBLFdBQVdBLEdBQUdBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBO1FBRXhHQSxFQUFFQSxDQUFDQSxDQUFDQSxRQUFRQSxJQUFJQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUM5QkEsSUFBSUEsQ0FBQ0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBQ0ZQLGlCQUFDQTtBQUFEQSxDQXpIQSxBQXlIQ0EsSUFBQTtBQUVELEFBQW9CLGlCQUFYLFVBQVUsQ0FBQyIsImZpbGUiOiJjb3JlL3Bvb2wvVmVydGV4RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5pbXBvcnQgU3ViR2VvbWV0cnlFdmVudFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2V2ZW50cy9TdWJHZW9tZXRyeUV2ZW50XCIpO1xuXG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVZlcnRleEJ1ZmZlclwiKTtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBWZXJ0ZXhEYXRhXG57XG5cdHByaXZhdGUgX29uVmVydGljZXNVcGRhdGVkRGVsZWdhdGU6KGV2ZW50OlN1Ykdlb21ldHJ5RXZlbnQpID0+IHZvaWQ7XG5cdHByaXZhdGUgX3N1Ykdlb21ldHJ5OlN1Ykdlb21ldHJ5QmFzZTtcblx0cHJpdmF0ZSBfZGF0YVR5cGU6c3RyaW5nO1xuXHRwcml2YXRlIF9kYXRhRGlydHkgPSB0cnVlO1xuXG5cdHB1YmxpYyBpbnZhbGlkOkFycmF5PGJvb2xlYW4+ID0gbmV3IEFycmF5PGJvb2xlYW4+KDgpO1xuXG5cdHB1YmxpYyBidWZmZXJzOkFycmF5PElWZXJ0ZXhCdWZmZXI+ID0gbmV3IEFycmF5PElWZXJ0ZXhCdWZmZXI+KDgpO1xuXG5cdHB1YmxpYyBjb250ZXh0czpBcnJheTxDb250ZXh0R0xCYXNlPiA9IG5ldyBBcnJheTxDb250ZXh0R0xCYXNlPig4KTtcblxuXHRwdWJsaWMgZGF0YTpBcnJheTxudW1iZXI+O1xuXG5cdHB1YmxpYyBkYXRhUGVyVmVydGV4Om51bWJlcjtcblxuXHRjb25zdHJ1Y3RvcihzdWJHZW9tZXRyeTpTdWJHZW9tZXRyeUJhc2UsIGRhdGFUeXBlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3N1Ykdlb21ldHJ5ID0gc3ViR2VvbWV0cnk7XG5cdFx0dGhpcy5fZGF0YVR5cGUgPSBkYXRhVHlwZTtcblxuXHRcdHRoaXMuX29uVmVydGljZXNVcGRhdGVkRGVsZWdhdGUgPSAoZXZlbnQ6U3ViR2VvbWV0cnlFdmVudCkgPT4gdGhpcy5fb25WZXJ0aWNlc1VwZGF0ZWQoZXZlbnQpO1xuXHRcdHRoaXMuX3N1Ykdlb21ldHJ5LmFkZEV2ZW50TGlzdGVuZXIoU3ViR2VvbWV0cnlFdmVudC5WRVJUSUNFU19VUERBVEVELCB0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlKTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVEYXRhKG9yaWdpbmFsSW5kaWNlczpBcnJheTxudW1iZXI+ID0gbnVsbCwgaW5kZXhNYXBwaW5nczpBcnJheTxudW1iZXI+ID0gbnVsbClcblx0e1xuXHRcdGlmICh0aGlzLl9kYXRhRGlydHkpIHtcblx0XHRcdHRoaXMuX2RhdGFEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLmRhdGFQZXJWZXJ0ZXggPSB0aGlzLl9zdWJHZW9tZXRyeS5nZXRTdHJpZGUodGhpcy5fZGF0YVR5cGUpO1xuXG5cdFx0XHR2YXIgdmVydGljZXM6QXJyYXk8bnVtYmVyPiA9IHRoaXMuX3N1Ykdlb21ldHJ5W3RoaXMuX2RhdGFUeXBlXTtcblxuXHRcdFx0aWYgKGluZGV4TWFwcGluZ3MgPT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLnNldERhdGEodmVydGljZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIHNwbGl0VmVydHM6QXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KG9yaWdpbmFsSW5kaWNlcy5sZW5ndGgqdGhpcy5kYXRhUGVyVmVydGV4KTtcblx0XHRcdFx0dmFyIG9yaWdpbmFsSW5kZXg6bnVtYmVyO1xuXHRcdFx0XHR2YXIgc3BsaXRJbmRleDpudW1iZXI7XG5cdFx0XHRcdHZhciBpOm51bWJlciA9IDA7XG5cdFx0XHRcdHZhciBqOm51bWJlciA9IDA7XG5cdFx0XHRcdHdoaWxlKGkgPCBvcmlnaW5hbEluZGljZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxJbmRleCA9IG9yaWdpbmFsSW5kaWNlc1tpXTtcblxuXHRcdFx0XHRcdHNwbGl0SW5kZXggPSBpbmRleE1hcHBpbmdzW29yaWdpbmFsSW5kZXhdKnRoaXMuZGF0YVBlclZlcnRleDtcblx0XHRcdFx0XHRvcmlnaW5hbEluZGV4ICo9IHRoaXMuZGF0YVBlclZlcnRleDtcblxuXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCB0aGlzLmRhdGFQZXJWZXJ0ZXg7IGorKylcblx0XHRcdFx0XHRcdHNwbGl0VmVydHNbc3BsaXRJbmRleCArIGpdID0gdmVydGljZXNbb3JpZ2luYWxJbmRleCArIGpdO1xuXG5cdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXREYXRhKHNwbGl0VmVydHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IDg7ICsraSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGV4dHNbaV0pIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0c1tpXS5kaXNwb3NlVmVydGV4RGF0YSh0aGlzKTtcblx0XHRcdFx0dGhpcy5jb250ZXh0c1tpXSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGRpc3Bvc2VCdWZmZXJzKClcblx0e1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IDg7ICsraSkge1xuXHRcdFx0aWYgKHRoaXMuYnVmZmVyc1tpXSkge1xuXHRcdFx0XHR0aGlzLmJ1ZmZlcnNbaV0uZGlzcG9zZSgpO1xuXHRcdFx0XHR0aGlzLmJ1ZmZlcnNbaV0gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQnVmZmVycygpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA4OyArK2kpXG5cdFx0XHR0aGlzLmludmFsaWRbaV0gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhXG5cdCAqIEBwYXJhbSBkYXRhUGVyVmVydGV4XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIHNldERhdGEoZGF0YTpBcnJheTxudW1iZXI+KVxuXHR7XG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoICE9IGRhdGEubGVuZ3RoKVxuXHRcdFx0dGhpcy5kaXNwb3NlQnVmZmVycygpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuaW52YWxpZGF0ZUJ1ZmZlcnMoKTtcblxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfb25WZXJ0aWNlc1VwZGF0ZWQoZXZlbnQ6U3ViR2VvbWV0cnlFdmVudClcblx0e1xuXHRcdHZhciBkYXRhVHlwZTpzdHJpbmcgPSB0aGlzLl9zdWJHZW9tZXRyeS5jb25jYXRlbmF0ZUFycmF5cz8gU3ViR2VvbWV0cnlCYXNlLlZFUlRFWF9EQVRBIDogZXZlbnQuZGF0YVR5cGU7XG5cblx0XHRpZiAoZGF0YVR5cGUgPT0gdGhpcy5fZGF0YVR5cGUpXG5cdFx0XHR0aGlzLl9kYXRhRGlydHkgPSB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCA9IFZlcnRleERhdGE7Il19 \ No newline at end of file diff --git a/lib/core/pool/VertexDataPool.js b/lib/core/pool/VertexDataPool.js deleted file mode 100755 index 6a97f414..00000000 --- a/lib/core/pool/VertexDataPool.js +++ /dev/null @@ -1,41 +0,0 @@ -var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -var VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); -/** - * - */ -var VertexDataPool = (function () { - function VertexDataPool() { - } - VertexDataPool.getItem = function (subGeometry, indexData, dataType) { - if (subGeometry.concatenateArrays) - dataType = SubGeometryBase.VERTEX_DATA; - var subGeometryDictionary = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object())); - var subGeometryData = (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array())); - var vertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType)); - vertexData.updateData(indexData.originalIndices, indexData.indexMappings); - return vertexData; - }; - VertexDataPool.disposeItem = function (subGeometry, level, dataType) { - var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; - var subGeometryData = subGeometryDictionary[dataType]; - subGeometryData[level].dispose(); - subGeometryData[level] = null; - }; - VertexDataPool.prototype.disposeData = function (subGeometry) { - var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; - for (var key in subGeometryDictionary) { - var subGeometryData = subGeometryDictionary[key]; - var len = subGeometryData.length; - for (var i = 0; i < len; i++) { - subGeometryData[i].dispose(); - subGeometryData[i] = null; - } - } - VertexDataPool._pool[subGeometry.id] = null; - }; - VertexDataPool._pool = new Object(); - return VertexDataPool; -})(); -module.exports = VertexDataPool; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvdmVydGV4ZGF0YXBvb2wudHMiXSwibmFtZXMiOlsiVmVydGV4RGF0YVBvb2wiLCJWZXJ0ZXhEYXRhUG9vbC5jb25zdHJ1Y3RvciIsIlZlcnRleERhdGFQb29sLmdldEl0ZW0iLCJWZXJ0ZXhEYXRhUG9vbC5kaXNwb3NlSXRlbSIsIlZlcnRleERhdGFQb29sLmRpc3Bvc2VEYXRhIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRy9FLElBQU8sVUFBVSxXQUFlLHlDQUF5QyxDQUFDLENBQUM7QUFFM0UsQUFHQTs7R0FERztJQUNHLGNBQWM7SUFJbkJBLFNBSktBLGNBQWNBO0lBTW5CQyxDQUFDQTtJQUVhRCxzQkFBT0EsR0FBckJBLFVBQXNCQSxXQUEyQkEsRUFBRUEsU0FBbUJBLEVBQUVBLFFBQWVBO1FBRXRGRSxFQUFFQSxDQUFDQSxDQUFDQSxXQUFXQSxDQUFDQSxpQkFBaUJBLENBQUNBO1lBQ2pDQSxRQUFRQSxHQUFHQSxlQUFlQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUV4Q0EsSUFBSUEscUJBQXFCQSxHQUFtQkEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDNUlBLElBQUlBLGVBQWVBLEdBQXlDQSxDQUFDQSxxQkFBcUJBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsR0FBR0EsSUFBSUEsS0FBS0EsRUFBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFN0pBLElBQUlBLFVBQVVBLEdBQWNBLGVBQWVBLENBQUNBLFNBQVNBLENBQUNBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLFNBQVNBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLFVBQVVBLENBQUNBLFdBQVdBLEVBQUVBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBO1FBQzNJQSxVQUFVQSxDQUFDQSxVQUFVQSxDQUFDQSxTQUFTQSxDQUFDQSxlQUFlQSxFQUFFQSxTQUFTQSxDQUFDQSxhQUFhQSxDQUFDQSxDQUFDQTtRQUUxRUEsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7SUFDbkJBLENBQUNBO0lBRWFGLDBCQUFXQSxHQUF6QkEsVUFBMEJBLFdBQTJCQSxFQUFFQSxLQUFZQSxFQUFFQSxRQUFlQTtRQUVuRkcsSUFBSUEscUJBQXFCQSxHQUFtQkEsY0FBY0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFDakZBLElBQUlBLGVBQWVBLEdBQXlDQSxxQkFBcUJBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1FBRTVGQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUNqQ0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDL0JBLENBQUNBO0lBRU1ILG9DQUFXQSxHQUFsQkEsVUFBbUJBLFdBQTJCQTtRQUU3Q0ksSUFBSUEscUJBQXFCQSxHQUFtQkEsY0FBY0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFFakZBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkNBLElBQUlBLGVBQWVBLEdBQXlDQSxxQkFBcUJBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBRXZGQSxJQUFJQSxHQUFHQSxHQUFVQSxlQUFlQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUN4Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7Z0JBQ3JDQSxlQUFlQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtnQkFDN0JBLGVBQWVBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1lBQzNCQSxDQUFDQTtRQUNGQSxDQUFDQTtRQUVEQSxjQUFjQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUM3Q0EsQ0FBQ0E7SUE1Q2NKLG9CQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtJQTZDNUNBLHFCQUFDQTtBQUFEQSxDQS9DQSxBQStDQ0EsSUFBQTtBQUVELEFBQXdCLGlCQUFmLGNBQWMsQ0FBQyIsImZpbGUiOiJjb3JlL3Bvb2wvVmVydGV4RGF0YVBvb2wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN1Ykdlb21ldHJ5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvU3ViR2VvbWV0cnlCYXNlXCIpO1xuXG5pbXBvcnQgSW5kZXhEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvSW5kZXhEYXRhXCIpO1xuaW1wb3J0IFZlcnRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9WZXJ0ZXhEYXRhXCIpO1xuXG4vKipcbiAqXG4gKi9cbmNsYXNzIFZlcnRleERhdGFQb29sXG57XG5cdHByaXZhdGUgc3RhdGljIF9wb29sOk9iamVjdCA9IG5ldyBPYmplY3QoKTtcblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZ2V0SXRlbShzdWJHZW9tZXRyeTpTdWJHZW9tZXRyeUJhc2UsIGluZGV4RGF0YTpJbmRleERhdGEsIGRhdGFUeXBlOnN0cmluZyk6VmVydGV4RGF0YVxuXHR7XG5cdFx0aWYgKHN1Ykdlb21ldHJ5LmNvbmNhdGVuYXRlQXJyYXlzKVxuXHRcdFx0ZGF0YVR5cGUgPSBTdWJHZW9tZXRyeUJhc2UuVkVSVEVYX0RBVEE7XG5cblx0XHR2YXIgc3ViR2VvbWV0cnlEaWN0aW9uYXJ5Ok9iamVjdCA9IDxPYmplY3Q+IChWZXJ0ZXhEYXRhUG9vbC5fcG9vbFtzdWJHZW9tZXRyeS5pZF0gfHwgKFZlcnRleERhdGFQb29sLl9wb29sW3N1Ykdlb21ldHJ5LmlkXSA9IG5ldyBPYmplY3QoKSkpO1xuXHRcdHZhciBzdWJHZW9tZXRyeURhdGE6QXJyYXk8VmVydGV4RGF0YT4gPSA8QXJyYXk8VmVydGV4RGF0YT4+IChzdWJHZW9tZXRyeURpY3Rpb25hcnlbZGF0YVR5cGVdIHx8IChzdWJHZW9tZXRyeURpY3Rpb25hcnlbZGF0YVR5cGVdID0gbmV3IEFycmF5PFZlcnRleERhdGE+KCkpKTtcblxuXHRcdHZhciB2ZXJ0ZXhEYXRhOlZlcnRleERhdGEgPSBzdWJHZW9tZXRyeURhdGFbaW5kZXhEYXRhLmxldmVsXSB8fCAoc3ViR2VvbWV0cnlEYXRhW2luZGV4RGF0YS5sZXZlbF0gPSBuZXcgVmVydGV4RGF0YShzdWJHZW9tZXRyeSwgZGF0YVR5cGUpKTtcblx0XHR2ZXJ0ZXhEYXRhLnVwZGF0ZURhdGEoaW5kZXhEYXRhLm9yaWdpbmFsSW5kaWNlcywgaW5kZXhEYXRhLmluZGV4TWFwcGluZ3MpO1xuXG5cdFx0cmV0dXJuIHZlcnRleERhdGE7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VJdGVtKHN1Ykdlb21ldHJ5OlN1Ykdlb21ldHJ5QmFzZSwgbGV2ZWw6bnVtYmVyLCBkYXRhVHlwZTpzdHJpbmcpXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEaWN0aW9uYXJ5Ok9iamVjdCA9IDxPYmplY3Q+IFZlcnRleERhdGFQb29sLl9wb29sW3N1Ykdlb21ldHJ5LmlkXTtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PFZlcnRleERhdGE+ID0gPEFycmF5PFZlcnRleERhdGE+PiBzdWJHZW9tZXRyeURpY3Rpb25hcnlbZGF0YVR5cGVdO1xuXG5cdFx0c3ViR2VvbWV0cnlEYXRhW2xldmVsXS5kaXNwb3NlKCk7XG5cdFx0c3ViR2VvbWV0cnlEYXRhW2xldmVsXSA9IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZURhdGEoc3ViR2VvbWV0cnk6U3ViR2VvbWV0cnlCYXNlKVxuXHR7XG5cdFx0dmFyIHN1Ykdlb21ldHJ5RGljdGlvbmFyeTpPYmplY3QgPSA8T2JqZWN0PiBWZXJ0ZXhEYXRhUG9vbC5fcG9vbFtzdWJHZW9tZXRyeS5pZF07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gc3ViR2VvbWV0cnlEaWN0aW9uYXJ5KSB7XG5cdFx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PFZlcnRleERhdGE+ID0gPEFycmF5PFZlcnRleERhdGE+PiBzdWJHZW9tZXRyeURpY3Rpb25hcnlba2V5XTtcblxuXHRcdFx0dmFyIGxlbjpudW1iZXIgPSBzdWJHZW9tZXRyeURhdGEubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0c3ViR2VvbWV0cnlEYXRhW2ldLmRpc3Bvc2UoKTtcblx0XHRcdFx0c3ViR2VvbWV0cnlEYXRhW2ldID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRWZXJ0ZXhEYXRhUG9vbC5fcG9vbFtzdWJHZW9tZXRyeS5pZF0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IFZlcnRleERhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/render/DefaultRenderer.js b/lib/core/render/DefaultRenderer.js deleted file mode 100755 index 6dee76fe7..00000000 --- a/lib/core/render/DefaultRenderer.js +++ /dev/null @@ -1,335 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); -var Vector3D = require("awayjs-core/lib/geom/Vector3D"); -var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); -var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); -var SkyboxRenderable = require("awayjs-stagegl/lib/core/pool/SkyboxRenderable"); -var DepthRenderer = require("awayjs-stagegl/lib/core/render/DepthRenderer"); -var Filter3DRenderer = require("awayjs-stagegl/lib/core/render/Filter3DRenderer"); -var RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); -var StageManager = require("awayjs-stagegl/lib/managers/StageManager"); -var DepthMapPass = require("awayjs-stagegl/lib/materials/passes/DepthMapPass"); -var DistanceMapPass = require("awayjs-stagegl/lib/materials/passes/DistanceMapPass"); -/** - * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the - * materials assigned to them. - * - * @class away.render.DefaultRenderer - */ -var DefaultRenderer = (function (_super) { - __extends(DefaultRenderer, _super); - /** - * Creates a new DefaultRenderer object. - * - * @param antiAlias The amount of anti-aliasing to use. - * @param renderMode The render mode to use. - */ - function DefaultRenderer(forceSoftware, profile, mode) { - if (forceSoftware === void 0) { forceSoftware = false; } - if (profile === void 0) { profile = "baseline"; } - if (mode === void 0) { mode = "auto"; } - _super.call(this); - this._skyboxProjection = new Matrix3D(); - this._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable); - this._pDepthRenderer = new DepthRenderer(new DepthMapPass()); - this._pDistanceRenderer = new DepthRenderer(new DistanceMapPass()); - if (this._pStage == null) - this.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode); - this._pRttBufferManager = RTTBufferManager.getInstance(this._pStage); - if (this._width == 0) - this.width = window.innerWidth; - else - this._pRttBufferManager.viewWidth = this._width; - if (this._height == 0) - this.height = window.innerHeight; - else - this._pRttBufferManager.viewHeight = this._height; - } - Object.defineProperty(DefaultRenderer.prototype, "antiAlias", { - get: function () { - return this._antiAlias; - }, - set: function (value) { - if (this._antiAlias == value) - return; - this._antiAlias = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DefaultRenderer.prototype, "depthPrepass", { - /** - * - */ - get: function () { - return this._depthPrepass; - }, - set: function (value) { - this._depthPrepass = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DefaultRenderer.prototype, "filters3d", { - /** - * - * @returns {*} - */ - get: function () { - return this._pFilter3DRenderer ? this._pFilter3DRenderer.filters : null; - }, - set: function (value) { - if (value && value.length == 0) - value = null; - if (this._pFilter3DRenderer && !value) { - this._pFilter3DRenderer.dispose(); - this._pFilter3DRenderer = null; - } - else if (!this._pFilter3DRenderer && value) { - this._pFilter3DRenderer = new Filter3DRenderer(this._pStage); - this._pFilter3DRenderer.filters = value; - } - if (this._pFilter3DRenderer) { - this._pFilter3DRenderer.filters = value; - this._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender; - } - else { - this._pRequireDepthRender = false; - if (this._pDepthRender) { - this._pDepthRender.dispose(); - this._pDepthRender = null; - } - } - }, - enumerable: true, - configurable: true - }); - DefaultRenderer.prototype.render = function (entityCollector) { - _super.prototype.render.call(this, entityCollector); - if (!this._pStage.recoverFromDisposal()) { - this._pBackBufferInvalid = true; - return; - } - if (this._pBackBufferInvalid) - this.pUpdateBackBuffer(); - if (this._shareContext && this._pContext) - this._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH); - if (this._pFilter3DRenderer) { - this.textureRatioX = this._pRttBufferManager.textureRatioX; - this.textureRatioY = this._pRttBufferManager.textureRatioY; - } - else { - this.textureRatioX = 1; - this.textureRatioY = 1; - } - if (this._pRequireDepthRender) - this.pRenderSceneDepthToTexture(entityCollector); - if (this._depthPrepass) - this.pRenderDepthPrepass(entityCollector); - if (this._pFilter3DRenderer && this._pContext) { - } - else { - if (this._shareContext) - this._iRender(entityCollector, null, this._pScissorRect); - else - this._iRender(entityCollector); - } - _super.prototype.render.call(this, entityCollector); - if (!this._shareContext && this._pContext) - this._pContext.present(); - // register that a view has been rendered - this._pStage.bufferClear = false; - }; - DefaultRenderer.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - this.updateLights(entityCollector); - // otherwise RTT will interfere with other RTTs - if (target) { - this.pCollectRenderables(entityCollector); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); - } - _super.prototype.pExecuteRender.call(this, entityCollector, target, scissorRect, surfaceSelector); - }; - DefaultRenderer.prototype.updateLights = function (entityCollector) { - var dirLights = entityCollector.directionalLights; - var pointLights = entityCollector.pointLights; - var len, i; - var light; - var shadowMapper; - len = dirLights.length; - for (i = 0; i < len; ++i) { - light = dirLights[i]; - shadowMapper = light.shadowMapper; - if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) - shadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer); - } - len = pointLights.length; - for (i = 0; i < len; ++i) { - light = pointLights[i]; - shadowMapper = light.shadowMapper; - if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) - shadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer); - } - }; - /** - * @inheritDoc - */ - DefaultRenderer.prototype.pDraw = function (entityCollector, target) { - if (!target) - this.pCollectRenderables(entityCollector); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - if (entityCollector.skyBox) { - this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); - this.drawSkybox(entityCollector); - } - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); - }; - /** - * Draw the skybox if present. - * - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DefaultRenderer.prototype.drawSkybox = function (entityCollector) { - var skyBox = this._skyboxRenderablePool.getItem(entityCollector.skyBox); - var material = entityCollector.skyBox.material; - var camera = entityCollector.camera; - this.updateSkyboxProjection(camera); - var activePass = this._pStage.context.getMaterial(material, this._pStage.profile).getMaterialPass(material._iScreenPasses[0], this._pStage.profile); - material._iActivatePass(activePass, this._pStage, camera); - material._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection); - material._iDeactivatePass(activePass, this._pStage); - }; - DefaultRenderer.prototype.updateSkyboxProjection = function (camera) { - var near = new Vector3D(); - this._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix); - this._skyboxProjection.copyRowTo(2, near); - var camPos = camera.scenePosition; - var cx = near.x; - var cy = near.y; - var cz = near.z; - var cw = -(near.x * camPos.x + near.y * camPos.y + near.z * camPos.z + Math.sqrt(cx * cx + cy * cy + cz * cz)); - var signX = cx >= 0 ? 1 : -1; - var signY = cy >= 0 ? 1 : -1; - var p = new Vector3D(signX, signY, 1, 1); - var inverse = this._skyboxProjection.clone(); - inverse.invert(); - var q = inverse.transformVector(p); - this._skyboxProjection.copyRowTo(3, p); - var a = (q.x * p.x + q.y * p.y + q.z * p.z + q.w * p.w) / (cx * q.x + cy * q.y + cz * q.z + cw * q.w); - this._skyboxProjection.copyRowFrom(2, new Vector3D(cx * a, cy * a, cz * a, cw * a)); - }; - /** - * Draw a list of renderables. - * - * @param renderables The renderables to draw. - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DefaultRenderer.prototype.drawRenderables = function (renderable, entityCollector) { - var i; - var len; - var passes; - var activePass; - var activeMaterial; - var context = this._pStage.context; - var camera = entityCollector.camera; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - //iterate through each screen pass - passes = renderable.material._iScreenPasses; - len = renderable.material._iNumScreenPasses(); - for (i = 0; i < len; i++) { - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(passes[i], this._pStage.profile); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - renderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - activeMaterial.material._iDeactivatePass(activePass, this._pStage); - } - renderable = renderable2; - } - }; - DefaultRenderer.prototype.dispose = function () { - if (!this._shareContext) - this._pStage.dispose(); - this._pDepthRenderer.dispose(); - this._pDistanceRenderer.dispose(); - this._pDepthRenderer = null; - this._pDistanceRenderer = null; - this._pDepthRender = null; - _super.prototype.dispose.call(this); - }; - /** - * - */ - DefaultRenderer.prototype.pRenderDepthPrepass = function (entityCollector) { - this._pDepthRenderer.disableColor = true; - if (this._pFilter3DRenderer) { - } - else { - this._pDepthRenderer.textureRatioX = 1; - this._pDepthRenderer.textureRatioY = 1; - this._pDepthRenderer._iRender(entityCollector); - } - this._pDepthRenderer.disableColor = false; - }; - /** - * - */ - DefaultRenderer.prototype.pRenderSceneDepthToTexture = function (entityCollector) { - if (this._pDepthTextureInvalid || !this._pDepthRender) - this.initDepthTexture(this._pStage.context); - this._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX; - this._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY; - this._pDepthRenderer._iRender(entityCollector, this._pDepthRender); - }; - /** - * Updates the backbuffer dimensions. - */ - DefaultRenderer.prototype.pUpdateBackBuffer = function () { - // No reason trying to configure back buffer if there is no context available. - // Doing this anyway (and relying on _stage to cache width/height for - // context does get available) means usesSoftwareRendering won't be reliable. - if (this._pStage.context && !this._shareContext) { - if (this._width && this._height) { - this._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true); - this._pBackBufferInvalid = false; - } - } - }; - DefaultRenderer.prototype.iSetStage = function (value) { - _super.prototype.iSetStage.call(this, value); - this._pDistanceRenderer.iSetStage(value); - this._pDepthRenderer.iSetStage(value); - }; - /** - * - */ - DefaultRenderer.prototype.initDepthTexture = function (context) { - this._pDepthTextureInvalid = false; - if (this._pDepthRender) - this._pDepthRender.dispose(); - this._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight); - }; - return DefaultRenderer; -})(RendererBase); -module.exports = DefaultRenderer; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9kZWZhdWx0cmVuZGVyZXIudHMiXSwibmFtZXMiOlsiRGVmYXVsdFJlbmRlcmVyIiwiRGVmYXVsdFJlbmRlcmVyLmNvbnN0cnVjdG9yIiwiRGVmYXVsdFJlbmRlcmVyLmFudGlBbGlhcyIsIkRlZmF1bHRSZW5kZXJlci5kZXB0aFByZXBhc3MiLCJEZWZhdWx0UmVuZGVyZXIuZmlsdGVyczNkIiwiRGVmYXVsdFJlbmRlcmVyLnJlbmRlciIsIkRlZmF1bHRSZW5kZXJlci5wRXhlY3V0ZVJlbmRlciIsIkRlZmF1bHRSZW5kZXJlci51cGRhdGVMaWdodHMiLCJEZWZhdWx0UmVuZGVyZXIucERyYXciLCJEZWZhdWx0UmVuZGVyZXIuZHJhd1NreWJveCIsIkRlZmF1bHRSZW5kZXJlci51cGRhdGVTa3lib3hQcm9qZWN0aW9uIiwiRGVmYXVsdFJlbmRlcmVyLmRyYXdSZW5kZXJhYmxlcyIsIkRlZmF1bHRSZW5kZXJlci5kaXNwb3NlIiwiRGVmYXVsdFJlbmRlcmVyLnBSZW5kZXJEZXB0aFByZXBhc3MiLCJEZWZhdWx0UmVuZGVyZXIucFJlbmRlclNjZW5lRGVwdGhUb1RleHR1cmUiLCJEZWZhdWx0UmVuZGVyZXIucFVwZGF0ZUJhY2tCdWZmZXIiLCJEZWZhdWx0UmVuZGVyZXIuaVNldFN0YWdlIiwiRGVmYXVsdFJlbmRlcmVyLmluaXREZXB0aFRleHR1cmUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sUUFBUSxXQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO0FBRWhFLElBQU8sUUFBUSxXQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO0FBQ2hFLElBQU8sYUFBYSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFJNUUsSUFBTyxjQUFjLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQWU3RSxJQUFPLGdCQUFnQixXQUFjLCtDQUErQyxDQUFDLENBQUM7QUFDdEYsSUFBTyxhQUFhLFdBQWMsOENBQThDLENBQUMsQ0FBQztBQUNs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bkNBLElBQUlBLENBQUNBLEdBQVlBLElBQUlBLFFBQVFBLENBQUNBLEtBQUtBLEVBQUVBLEtBQUtBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBRWxEQSxJQUFJQSxPQUFPQSxHQUFZQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBO1FBQ3REQSxPQUFPQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQTtRQUVqQkEsSUFBSUEsQ0FBQ0EsR0FBWUEsT0FBT0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFNUNBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFdkNBLElBQUlBLENBQUNBLEdBQVVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEVBQUVBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLEdBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBRTNGQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLFFBQVFBLENBQUNBLEVBQUVBLEdBQUNBLENBQUNBLEVBQUVBLEVBQUVBLEdBQUNBLENBQUNBLEVBQUVBLEVBQUVBLEdBQUNBLENBQUNBLEVBQUVBLEVBQUVBLEdBQUNBLENBQUNBLENBQUNBLENB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QUNBLGFBQWFBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBRTlCQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0E7SUFDckhBLENBQUNBO0lBQ0ZqQixzQkFBQ0E7QUFBREEsQ0F4WkEsQUF3WkNBLEVBeFo2QixZQUFZLEVBd1p6QztBQUVELEFBQXlCLGlCQUFoQixlQUFlLENBQUMiLCJmaWxlIjoiY29yZS9yZW5kZXIvRGVmYXVsdFJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBSZW5kZXJUZXh0dXJlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvUmVuZGVyVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcblxuaW1wb3J0IExpZ2h0QmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9MaWdodEJhc2VcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuaW1wb3J0IElSZW5kZXJlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcmVuZGVyL0lSZW5kZXJlclwiKTtcbmltcG9ydCBFbnRpdHlDb2xsZWN0b3JcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi90cmF2ZXJzZS9FbnRpdHlDb2xsZWN0b3JcIik7XG5pbXBvcnQgSUNvbGxlY3Rvclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvdHJhdmVyc2UvSUNvbGxlY3RvclwiKTtcbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9EaXJlY3Rpb25hbExpZ2h0XCIpO1xuaW1wb3J0IFBvaW50TGlnaHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL1BvaW50TGlnaHRcIik7XG5pbXBvcnQgTWF0ZXJpYWxCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IElNYXRlcmlhbFBhc3NcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvcGFzc2VzL0lNYXRlcmlhbFBhc3NcIik7XG5pbXBvcnQgU2hhZG93TWFwcGVyQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9zaGFkb3dtYXBwZXJzL1NoYWRvd01hcHBlckJhc2VcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBTa3lib3hSZW5kZXJhYmxlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1NreWJveFJlbmRlcmFibGVcIik7XG5pbXBvcnQgRGVwdGhSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlcHRoUmVuZGVyZXJcIik7XG5pbXBvcnQgRmlsdGVyM0RSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0ZpbHRlcjNEUmVuZGVyZXJcIik7XG5pbXBvcnQgUmVuZGVyZXJCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9SZW5kZXJlckJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQmxlbmRGYWN0b3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTEJsZW5kRmFjdG9yXCIpO1xuaW1wb3J0IENvbnRleHRHTENvbXBhcmVNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDbGVhck1hc2tcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENsZWFyTWFza1wiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IEZpbHRlcjNEQmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvZmlsdGVycy9GaWx0ZXIzREJhc2VcIik7XG5pbXBvcnQgUlRUQnVmZmVyTWFuYWdlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hbmFnZXJzL1JUVEJ1ZmZlck1hbmFnZXJcIik7XG5pbXBvcnQgU3RhZ2VNYW5hZ2VyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9TdGFnZU1hbmFnZXJcIik7XG5pbXBvcnQgRGVwdGhNYXBQYXNzXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL0RlcHRoTWFwUGFzc1wiKTtcbmltcG9ydCBEaXN0YW5jZU1hcFBhc3NcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL0Rpc3RhbmNlTWFwUGFzc1wiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuXG4vKipcbiAqIFRoZSBEZWZhdWx0UmVuZGVyZXIgY2xhc3MgcHJvdmlkZXMgdGhlIGRlZmF1bHQgcmVuZGVyaW5nIG1ldGhvZC4gSXQgcmVuZGVycyB0aGUgc2NlbmUgZ3JhcGggb2JqZWN0cyB1c2luZyB0aGVcbiAqIG1hdGVyaWFscyBhc3NpZ25lZCB0byB0aGVtLlxuICpcbiAqIEBjbGFzcyBhd2F5LnJlbmRlci5EZWZhdWx0UmVuZGVyZXJcbiAqL1xuY2xhc3MgRGVmYXVsdFJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXJCYXNlIGltcGxlbWVudHMgSVJlbmRlcmVyXG57XG5cdHB1YmxpYyBfcFJlcXVpcmVEZXB0aFJlbmRlcjpib29sZWFuO1xuXHRwcml2YXRlIF9za3lib3hSZW5kZXJhYmxlUG9vbDpSZW5kZXJhYmxlUG9vbDtcblxuLy9cdFx0cHJpdmF0ZSBfYWN0aXZlTWF0ZXJpYWw6TWF0ZXJpYWxCYXNlO1xuXHRwcml2YXRlIF9wRGlzdGFuY2VSZW5kZXJlcjpEZXB0aFJlbmRlcmVyO1xuXHRwcml2YXRlIF9wRGVwdGhSZW5kZXJlcjpEZXB0aFJlbmRlcmVyO1xuXHRwcml2YXRlIF9za3lib3hQcm9qZWN0aW9uOk1hdHJpeDNEID0gbmV3IE1hdHJpeDNEKCk7XG5cdHB1YmxpYyBfcEZpbHRlcjNEUmVuZGVyZXI6RmlsdGVyM0RSZW5kZXJlcjtcblxuXHRwdWJsaWMgX3BEZXB0aFJlbmRlcjpUZXh0dXJlUHJveHlCYXNlO1xuXG5cdHByaXZhdGUgX2FudGlBbGlhczpudW1iZXI7XG5cblx0cHVibGljIGdldCBhbnRpQWxpYXMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbnRpQWxpYXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFudGlBbGlhcyh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYW50aUFsaWFzID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fYW50aUFsaWFzID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRlcHRoUHJlcGFzcygpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9kZXB0aFByZXBhc3M7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRlcHRoUHJlcGFzcyh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5fZGVwdGhQcmVwYXNzID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGZpbHRlcnMzZCgpOkFycmF5PEZpbHRlcjNEQmFzZT5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9wRmlsdGVyM0RSZW5kZXJlcj8gdGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIuZmlsdGVycyA6IG51bGw7XG5cdH1cblx0cHVibGljIHNldCBmaWx0ZXJzM2QodmFsdWU6QXJyYXk8RmlsdGVyM0RCYXNlPilcblx0e1xuXHRcdGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMClcblx0XHRcdHZhbHVlID0gbnVsbDtcblxuXHRcdGlmICh0aGlzLl9wRmlsdGVyM0RSZW5kZXJlciAmJiAhdmFsdWUpIHtcblx0XHRcdHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLl9wRmlsdGVyM0RSZW5kZXJlciAmJiB2YWx1ZSkge1xuXHRcdFx0dGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIgPSBuZXcgRmlsdGVyM0RSZW5kZXJlcih0aGlzLl9wU3RhZ2UpO1xuXHRcdFx0dGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIuZmlsdGVycyA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wRmlsdGVyM0RSZW5kZXJlcikge1xuXHRcdFx0dGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIuZmlsdGVycyA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fcFJlcXVpcmVEZXB0aFJlbmRlciA9IHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyLnJlcXVpcmVEZXB0aFJlbmRlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcFJlcXVpcmVEZXB0aFJlbmRlciA9IGZhbHNlO1xuXG5cdFx0XHRpZiAodGhpcy5fcERlcHRoUmVuZGVyKSB7XG5cdFx0XHRcdHRoaXMuX3BEZXB0aFJlbmRlci5kaXNwb3NlKCk7XG5cdFx0XHRcdHRoaXMuX3BEZXB0aFJlbmRlciA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGVmYXVsdFJlbmRlcmVyIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIGFudGlBbGlhcyBUaGUgYW1vdW50IG9mIGFudGktYWxpYXNpbmcgdG8gdXNlLlxuXHQgKiBAcGFyYW0gcmVuZGVyTW9kZSBUaGUgcmVuZGVyIG1vZGUgdG8gdXNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoZm9yY2VTb2Z0d2FyZTpib29sZWFuID0gZmFsc2UsIHByb2ZpbGU6c3RyaW5nID0gXCJiYXNlbGluZVwiLCBtb2RlID0gXCJhdXRvXCIpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fc2t5Ym94UmVuZGVyYWJsZVBvb2wgPSBSZW5kZXJhYmxlUG9vbC5nZXRQb29sKFNreWJveFJlbmRlcmFibGUpO1xuXG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIgPSBuZXcgRGVwdGhSZW5kZXJlcihuZXcgRGVwdGhNYXBQYXNzKCkpO1xuXHRcdHRoaXMuX3BEaXN0YW5jZVJlbmRlcmVyID0gbmV3IERlcHRoUmVuZGVyZXIobmV3IERpc3RhbmNlTWFwUGFzcygpKTtcblxuXHRcdGlmICh0aGlzLl9wU3RhZ2UgPT0gbnVsbClcblx0XHRcdHRoaXMuc3RhZ2UgPSBTdGFnZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRGcmVlU3RhZ2UoZm9yY2VTb2Z0d2FyZSwgcHJvZmlsZSwgbW9kZSk7XG5cblx0XHR0aGlzLl9wUnR0QnVmZmVyTWFuYWdlciA9IFJUVEJ1ZmZlck1hbmFnZXIuZ2V0SW5zdGFuY2UodGhpcy5fcFN0YWdlKTtcblxuXHRcdGlmICh0aGlzLl93aWR0aCA9PSAwKVxuXHRcdFx0dGhpcy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnZpZXdXaWR0aCA9IHRoaXMuX3dpZHRoO1xuXG5cdFx0aWYgKHRoaXMuX2hlaWdodCA9PSAwKVxuXHRcdFx0dGhpcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudmlld0hlaWdodCA9IHRoaXMuX2hlaWdodDtcblx0fVxuXG5cdHB1YmxpYyByZW5kZXIoZW50aXR5Q29sbGVjdG9yOklDb2xsZWN0b3IpXG5cdHtcblx0XHRzdXBlci5yZW5kZXIoZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdGlmICghdGhpcy5fcFN0YWdlLnJlY292ZXJGcm9tRGlzcG9zYWwoKSkgey8vaWYgY29udGV4dCBoYXMgRGlzcG9zZWQgYnkgdGhlIE9TLGRvbid0IHJlbmRlciBhdCB0aGlzIGZyYW1lXG5cdFx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wQmFja0J1ZmZlckludmFsaWQpLy8gcmVzZXQgb3IgdXBkYXRlIHJlbmRlciBzZXR0aW5nc1xuXHRcdFx0dGhpcy5wVXBkYXRlQmFja0J1ZmZlcigpO1xuXG5cdFx0aWYgKHRoaXMuX3NoYXJlQ29udGV4dCAmJiB0aGlzLl9wQ29udGV4dClcblx0XHRcdHRoaXMuX3BDb250ZXh0LmNsZWFyKDAsIDAsIDAsIDEsIDEsIDAsIENvbnRleHRHTENsZWFyTWFzay5ERVBUSCk7XG5cblx0XHRpZiAodGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIpIHtcblx0XHRcdHRoaXMudGV4dHVyZVJhdGlvWCA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1g7XG5cdFx0XHR0aGlzLnRleHR1cmVSYXRpb1kgPSB0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci50ZXh0dXJlUmF0aW9ZO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRleHR1cmVSYXRpb1ggPSAxO1xuXHRcdFx0dGhpcy50ZXh0dXJlUmF0aW9ZID0gMTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcFJlcXVpcmVEZXB0aFJlbmRlcilcblx0XHRcdHRoaXMucFJlbmRlclNjZW5lRGVwdGhUb1RleHR1cmUoPEVudGl0eUNvbGxlY3Rvcj4gZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdGlmICh0aGlzLl9kZXB0aFByZXBhc3MpXG5cdFx0XHR0aGlzLnBSZW5kZXJEZXB0aFByZXBhc3MoPEVudGl0eUNvbGxlY3Rvcj4gZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdGlmICh0aGlzLl9wRmlsdGVyM0RSZW5kZXJlciAmJiB0aGlzLl9wQ29udGV4dCkgeyAvL1RPRE9cblx0XHRcdC8vdGhpcy5faVJlbmRlcihlbnRpdHlDb2xsZWN0b3IsIHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyLmdldE1haW5JbnB1dFRleHR1cmUodGhpcy5fcFN0YWdlKSwgdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIucmVuZGVyVG9UZXh0dXJlUmVjdCk7XG5cdFx0XHQvL3RoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyLnJlbmRlcih0aGlzLl9wU3RhZ2UsIGVudGl0eUNvbGxlY3Rvci5jYW1lcmEsIHRoaXMuX3BEZXB0aFJlbmRlcik7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAodGhpcy5fc2hhcmVDb250ZXh0KVxuXHRcdFx0XHR0aGlzLl9pUmVuZGVyKGVudGl0eUNvbGxlY3RvciwgbnVsbCwgdGhpcy5fcFNjaXNzb3JSZWN0KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy5faVJlbmRlcihlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdH1cblxuXHRcdHN1cGVyLnJlbmRlcihlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0aWYgKCF0aGlzLl9zaGFyZUNvbnRleHQgJiYgdGhpcy5fcENvbnRleHQpXG5cdFx0XHR0aGlzLl9wQ29udGV4dC5wcmVzZW50KCk7XG5cblx0XHQvLyByZWdpc3RlciB0aGF0IGEgdmlldyBoYXMgYmVlbiByZW5kZXJlZFxuXHRcdHRoaXMuX3BTdGFnZS5idWZmZXJDbGVhciA9IGZhbHNlO1xuXHR9XG5cblx0cHVibGljIHBFeGVjdXRlUmVuZGVyKGVudGl0eUNvbGxlY3RvcjpFbnRpdHlDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlID0gbnVsbCwgc2Npc3NvclJlY3Q6UmVjdGFuZ2xlID0gbnVsbCwgc3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDApXG5cdHtcblx0XHR0aGlzLnVwZGF0ZUxpZ2h0cyhlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0Ly8gb3RoZXJ3aXNlIFJUVCB3aWxsIGludGVyZmVyZSB3aXRoIG90aGVyIFJUVHNcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHR0aGlzLnBDb2xsZWN0UmVuZGVyYWJsZXMoZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdFx0dGhpcy5kcmF3UmVuZGVyYWJsZXModGhpcy5fcE9wYXF1ZVJlbmRlcmFibGVIZWFkLCBlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdFx0dGhpcy5kcmF3UmVuZGVyYWJsZXModGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCwgZW50aXR5Q29sbGVjdG9yKTtcblx0XHR9XG5cblx0XHRzdXBlci5wRXhlY3V0ZVJlbmRlcihlbnRpdHlDb2xsZWN0b3IsIHRhcmdldCwgc2Npc3NvclJlY3QsIHN1cmZhY2VTZWxlY3Rvcik7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUxpZ2h0cyhlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0dmFyIGRpckxpZ2h0czpBcnJheTxEaXJlY3Rpb25hbExpZ2h0PiA9IGVudGl0eUNvbGxlY3Rvci5kaXJlY3Rpb25hbExpZ2h0cztcblx0XHR2YXIgcG9pbnRMaWdodHM6QXJyYXk8UG9pbnRMaWdodD4gPSBlbnRpdHlDb2xsZWN0b3IucG9pbnRMaWdodHM7XG5cdFx0dmFyIGxlbjpudW1iZXIsIGk6bnVtYmVyO1xuXHRcdHZhciBsaWdodDpMaWdodEJhc2U7XG5cdFx0dmFyIHNoYWRvd01hcHBlcjpTaGFkb3dNYXBwZXJCYXNlO1xuXG5cdFx0bGVuID0gZGlyTGlnaHRzLmxlbmd0aDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdGxpZ2h0ID0gZGlyTGlnaHRzW2ldO1xuXG5cdFx0XHRzaGFkb3dNYXBwZXIgPSBsaWdodC5zaGFkb3dNYXBwZXI7XG5cblx0XHRcdGlmIChsaWdodC5jYXN0c1NoYWRvd3MgJiYgKHNoYWRvd01hcHBlci5hdXRvVXBkYXRlU2hhZG93cyB8fCBzaGFkb3dNYXBwZXIuX2lTaGFkb3dzSW52YWxpZCApKVxuXHRcdFx0XHRzaGFkb3dNYXBwZXIuaVJlbmRlckRlcHRoTWFwKGVudGl0eUNvbGxlY3RvciwgdGhpcy5fcERlcHRoUmVuZGVyZXIpO1xuXHRcdH1cblxuXHRcdGxlbiA9IHBvaW50TGlnaHRzLmxlbmd0aDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdGxpZ2h0ID0gcG9pbnRMaWdodHNbaV07XG5cblx0XHRcdHNoYWRvd01hcHBlciA9IGxpZ2h0LnNoYWRvd01hcHBlcjtcblxuXHRcdFx0aWYgKGxpZ2h0LmNhc3RzU2hhZG93cyAmJiAoc2hhZG93TWFwcGVyLmF1dG9VcGRhdGVTaGFkb3dzIHx8IHNoYWRvd01hcHBlci5faVNoYWRvd3NJbnZhbGlkKSlcblx0XHRcdFx0c2hhZG93TWFwcGVyLmlSZW5kZXJEZXB0aE1hcChlbnRpdHlDb2xsZWN0b3IsIHRoaXMuX3BEaXN0YW5jZVJlbmRlcmVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBwRHJhdyhlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSlcblx0e1xuXHRcdGlmICghdGFyZ2V0KVxuXHRcdFx0dGhpcy5wQ29sbGVjdFJlbmRlcmFibGVzKGVudGl0eUNvbGxlY3Rvcik7XG5cblx0XHR0aGlzLl9wQ29udGV4dC5zZXRCbGVuZEZhY3RvcnMoQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FLCBDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPKTtcblxuXHRcdGlmIChlbnRpdHlDb2xsZWN0b3Iuc2t5Qm94KSB7XG5cdFx0XHR0aGlzLl9wQ29udGV4dC5zZXREZXB0aFRlc3QoZmFsc2UsIENvbnRleHRHTENvbXBhcmVNb2RlLkFMV0FZUyk7XG5cblx0XHRcdHRoaXMuZHJhd1NreWJveChlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BDb250ZXh0LnNldERlcHRoVGVzdCh0cnVlLCBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMKTtcblxuXHRcdHRoaXMuZHJhd1JlbmRlcmFibGVzKHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCwgZW50aXR5Q29sbGVjdG9yKTtcblx0XHR0aGlzLmRyYXdSZW5kZXJhYmxlcyh0aGlzLl9wQmxlbmRlZFJlbmRlcmFibGVIZWFkLCBlbnRpdHlDb2xsZWN0b3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERyYXcgdGhlIHNreWJveCBpZiBwcmVzZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5Q29sbGVjdG9yIFRoZSBFbnRpdHlDb2xsZWN0b3IgY29udGFpbmluZyBhbGwgcG90ZW50aWFsbHkgdmlzaWJsZSBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZHJhd1NreWJveChlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0dmFyIHNreUJveDpTa3lib3hSZW5kZXJhYmxlID0gPFNreWJveFJlbmRlcmFibGU+IHRoaXMuX3NreWJveFJlbmRlcmFibGVQb29sLmdldEl0ZW0oZW50aXR5Q29sbGVjdG9yLnNreUJveCk7XG5cblx0XHR2YXIgbWF0ZXJpYWw6TWF0ZXJpYWxCYXNlID0gZW50aXR5Q29sbGVjdG9yLnNreUJveC5tYXRlcmlhbDtcblxuXHRcdHZhciBjYW1lcmE6Q2FtZXJhID0gZW50aXR5Q29sbGVjdG9yLmNhbWVyYTtcblxuXHRcdHRoaXMudXBkYXRlU2t5Ym94UHJvamVjdGlvbihjYW1lcmEpO1xuXG5cdFx0dmFyIGFjdGl2ZVBhc3M6TWF0ZXJpYWxQYXNzRGF0YSA9ICg8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dCkuZ2V0TWF0ZXJpYWwobWF0ZXJpYWwsIHRoaXMuX3BTdGFnZS5wcm9maWxlKS5nZXRNYXRlcmlhbFBhc3MoPE1hdGVyaWFsUGFzc0Jhc2U+IG1hdGVyaWFsLl9pU2NyZWVuUGFzc2VzWzBdLCB0aGlzLl9wU3RhZ2UucHJvZmlsZSk7XG5cblx0XHRtYXRlcmlhbC5faUFjdGl2YXRlUGFzcyhhY3RpdmVQYXNzLCB0aGlzLl9wU3RhZ2UsIGNhbWVyYSk7XG5cdFx0bWF0ZXJpYWwuX2lSZW5kZXJQYXNzKGFjdGl2ZVBhc3MsIHNreUJveCwgdGhpcy5fcFN0YWdlLCBjYW1lcmEsIHRoaXMuX3NreWJveFByb2plY3Rpb24pO1xuXHRcdG1hdGVyaWFsLl9pRGVhY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlU2t5Ym94UHJvamVjdGlvbihjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0dmFyIG5lYXI6VmVjdG9yM0QgPSBuZXcgVmVjdG9yM0QoKTtcblxuXHRcdHRoaXMuX3NreWJveFByb2plY3Rpb24uY29weUZyb20odGhpcy5fcFJ0dFZpZXdQcm9qZWN0aW9uTWF0cml4KTtcblx0XHR0aGlzLl9za3lib3hQcm9qZWN0aW9uLmNvcHlSb3dUbygyLCBuZWFyKTtcblxuXHRcdHZhciBjYW1Qb3M6VmVjdG9yM0QgPSBjYW1lcmEuc2NlbmVQb3NpdGlvbjtcblxuXHRcdHZhciBjeDpudW1iZXIgPSBuZWFyLng7XG5cdFx0dmFyIGN5Om51bWJlciA9IG5lYXIueTtcblx0XHR2YXIgY3o6bnVtYmVyID0gbmVhci56O1xuXHRcdHZhciBjdzpudW1iZXIgPSAtKG5lYXIueCpjYW1Qb3MueCArIG5lYXIueSpjYW1Qb3MueSArIG5lYXIueipjYW1Qb3MueiArIE1hdGguc3FydChjeCpjeCArIGN5KmN5ICsgY3oqY3opKTtcblxuXHRcdHZhciBzaWduWDpudW1iZXIgPSBjeCA+PSAwPyAxIDogLTE7XG5cdFx0dmFyIHNpZ25ZOm51bWJlciA9IGN5ID49IDA/IDEgOiAtMTtcblxuXHRcdHZhciBwOlZlY3RvcjNEID0gbmV3IFZlY3RvcjNEKHNpZ25YLCBzaWduWSwgMSwgMSk7XG5cblx0XHR2YXIgaW52ZXJzZTpNYXRyaXgzRCA9IHRoaXMuX3NreWJveFByb2plY3Rpb24uY2xvbmUoKTtcblx0XHRpbnZlcnNlLmludmVydCgpO1xuXG5cdFx0dmFyIHE6VmVjdG9yM0QgPSBpbnZlcnNlLnRyYW5zZm9ybVZlY3RvcihwKTtcblxuXHRcdHRoaXMuX3NreWJveFByb2plY3Rpb24uY29weVJvd1RvKDMsIHApO1xuXG5cdFx0dmFyIGE6bnVtYmVyID0gKHEueCpwLnggKyBxLnkqcC55ICsgcS56KnAueiArIHEudypwLncpLyhjeCpxLnggKyBjeSpxLnkgKyBjeipxLnogKyBjdypxLncpO1xuXG5cdFx0dGhpcy5fc2t5Ym94UHJvamVjdGlvbi5jb3B5Um93RnJvbSgyLCBuZXcgVmVjdG9yM0QoY3gqYSwgY3kqYSwgY3oqYSwgY3cqYSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERyYXcgYSBsaXN0IG9mIHJlbmRlcmFibGVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVuZGVyYWJsZXMgVGhlIHJlbmRlcmFibGVzIHRvIGRyYXcuXG5cdCAqIEBwYXJhbSBlbnRpdHlDb2xsZWN0b3IgVGhlIEVudGl0eUNvbGxlY3RvciBjb250YWluaW5nIGFsbCBwb3RlbnRpYWxseSB2aXNpYmxlIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkcmF3UmVuZGVyYWJsZXMocmVuZGVyYWJsZTpSZW5kZXJhYmxlQmFzZSwgZW50aXR5Q29sbGVjdG9yOklDb2xsZWN0b3IpXG5cdHtcblx0XHR2YXIgaTpudW1iZXI7XG5cdFx0dmFyIGxlbjpudW1iZXI7XG5cdFx0dmFyIHBhc3NlczpBcnJheTxJTWF0ZXJpYWxQYXNzPjtcblx0XHR2YXIgYWN0aXZlUGFzczpNYXRlcmlhbFBhc3NEYXRhO1xuXHRcdHZhciBhY3RpdmVNYXRlcmlhbDpNYXRlcmlhbERhdGE7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gdGhpcy5fcFN0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIGNhbWVyYTpDYW1lcmEgPSBlbnRpdHlDb2xsZWN0b3IuY2FtZXJhO1xuXHRcdHZhciByZW5kZXJhYmxlMjpSZW5kZXJhYmxlQmFzZTtcblxuXHRcdHdoaWxlIChyZW5kZXJhYmxlKSB7XG5cdFx0XHRhY3RpdmVNYXRlcmlhbCA9IGNvbnRleHQuZ2V0TWF0ZXJpYWwocmVuZGVyYWJsZS5tYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHQvL2l0ZXJhdGUgdGhyb3VnaCBlYWNoIHNjcmVlbiBwYXNzXG5cdFx0XHRwYXNzZXMgPSByZW5kZXJhYmxlLm1hdGVyaWFsLl9pU2NyZWVuUGFzc2VzO1xuXHRcdFx0bGVuID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5faU51bVNjcmVlblBhc3NlcygpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlbmRlcmFibGUyID0gcmVuZGVyYWJsZTtcblxuXHRcdFx0XHRhY3RpdmVQYXNzID0gYWN0aXZlTWF0ZXJpYWwuZ2V0TWF0ZXJpYWxQYXNzKDxNYXRlcmlhbFBhc3NCYXNlPiBwYXNzZXNbaV0sIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdFx0XHRyZW5kZXJhYmxlLm1hdGVyaWFsLl9pQWN0aXZhdGVQYXNzKGFjdGl2ZVBhc3MsIHRoaXMuX3BTdGFnZSwgY2FtZXJhKTtcblxuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0cmVuZGVyYWJsZS5tYXRlcmlhbC5faVJlbmRlclBhc3MoYWN0aXZlUGFzcywgcmVuZGVyYWJsZTIsIHRoaXMuX3BTdGFnZSwgY2FtZXJhLCB0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXgpO1xuXG5cdFx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlMi5uZXh0O1xuXG5cdFx0XHRcdH0gd2hpbGUgKHJlbmRlcmFibGUyICYmIHJlbmRlcmFibGUyLm1hdGVyaWFsID09IHJlbmRlcmFibGUubWF0ZXJpYWwpO1xuXG5cdFx0XHRcdGFjdGl2ZU1hdGVyaWFsLm1hdGVyaWFsLl9pRGVhY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlKTtcblx0XHRcdH1cblxuXHRcdFx0cmVuZGVyYWJsZSA9IHJlbmRlcmFibGUyO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGlmICghdGhpcy5fc2hhcmVDb250ZXh0KVxuXHRcdFx0dGhpcy5fcFN0YWdlLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLmRpc3Bvc2UoKTtcblx0XHR0aGlzLl9wRGlzdGFuY2VSZW5kZXJlci5kaXNwb3NlKCk7XG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIgPSBudWxsO1xuXHRcdHRoaXMuX3BEaXN0YW5jZVJlbmRlcmVyID0gbnVsbDtcblxuXHRcdHRoaXMuX3BEZXB0aFJlbmRlciA9IG51bGw7XG5cblx0XHRzdXBlci5kaXNwb3NlKCk7XG5cdH1cblxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHBSZW5kZXJEZXB0aFByZXBhc3MoZW50aXR5Q29sbGVjdG9yOkVudGl0eUNvbGxlY3Rvcilcblx0e1xuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLmRpc2FibGVDb2xvciA9IHRydWU7XG5cblx0XHRpZiAodGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIpIHsgLy9UT0RPXG4vL1x0XHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIudGV4dHVyZVJhdGlvWCA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1g7XG4vL1x0XHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIudGV4dHVyZVJhdGlvWSA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1k7XG4vL1x0XHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIuX2lSZW5kZXIoZW50aXR5Q29sbGVjdG9yLCB0aGlzLl9wRmlsdGVyM0RSZW5kZXJlci5nZXRNYWluSW5wdXRUZXh0dXJlKHRoaXMuX3BTdGFnZSksIHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnJlbmRlclRvVGV4dHVyZVJlY3QpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci50ZXh0dXJlUmF0aW9YID0gMTtcblx0XHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLnRleHR1cmVSYXRpb1kgPSAxO1xuXHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIuX2lSZW5kZXIoZW50aXR5Q29sbGVjdG9yKTtcblx0XHR9XG5cblx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci5kaXNhYmxlQ29sb3IgPSBmYWxzZTtcblx0fVxuXG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcFJlbmRlclNjZW5lRGVwdGhUb1RleHR1cmUoZW50aXR5Q29sbGVjdG9yOkVudGl0eUNvbGxlY3Rvcilcblx0e1xuXHRcdGlmICh0aGlzLl9wRGVwdGhUZXh0dXJlSW52YWxpZCB8fCAhdGhpcy5fcERlcHRoUmVuZGVyKVxuXHRcdFx0dGhpcy5pbml0RGVwdGhUZXh0dXJlKDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0KTtcblxuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLnRleHR1cmVSYXRpb1ggPSB0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci50ZXh0dXJlUmF0aW9YO1xuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLnRleHR1cmVSYXRpb1kgPSB0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci50ZXh0dXJlUmF0aW9ZO1xuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLl9pUmVuZGVyKGVudGl0eUNvbGxlY3RvciwgdGhpcy5fcERlcHRoUmVuZGVyKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGJhY2tidWZmZXIgZGltZW5zaW9ucy5cblx0ICovXG5cdHB1YmxpYyBwVXBkYXRlQmFja0J1ZmZlcigpXG5cdHtcblx0XHQvLyBObyByZWFzb24gdHJ5aW5nIHRvIGNvbmZpZ3VyZSBiYWNrIGJ1ZmZlciBpZiB0aGVyZSBpcyBubyBjb250ZXh0IGF2YWlsYWJsZS5cblx0XHQvLyBEb2luZyB0aGlzIGFueXdheSAoYW5kIHJlbHlpbmcgb24gX3N0YWdlIHRvIGNhY2hlIHdpZHRoL2hlaWdodCBmb3Jcblx0XHQvLyBjb250ZXh0IGRvZXMgZ2V0IGF2YWlsYWJsZSkgbWVhbnMgdXNlc1NvZnR3YXJlUmVuZGVyaW5nIHdvbid0IGJlIHJlbGlhYmxlLlxuXHRcdGlmICh0aGlzLl9wU3RhZ2UuY29udGV4dCAmJiAhdGhpcy5fc2hhcmVDb250ZXh0KSB7XG5cdFx0XHRpZiAodGhpcy5fd2lkdGggJiYgdGhpcy5faGVpZ2h0KSB7XG5cdFx0XHRcdHRoaXMuX3BTdGFnZS5jb25maWd1cmVCYWNrQnVmZmVyKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHRoaXMuX2FudGlBbGlhcywgdHJ1ZSk7XG5cdFx0XHRcdHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpU2V0U3RhZ2UodmFsdWU6U3RhZ2UpXG5cdHtcblx0XHRzdXBlci5pU2V0U3RhZ2UodmFsdWUpO1xuXG5cdFx0dGhpcy5fcERpc3RhbmNlUmVuZGVyZXIuaVNldFN0YWdlKHZhbHVlKTtcblx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci5pU2V0U3RhZ2UodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwcml2YXRlIGluaXREZXB0aFRleHR1cmUoY29udGV4dDpJQ29udGV4dFN0YWdlR0wpOnZvaWRcblx0e1xuXHRcdHRoaXMuX3BEZXB0aFRleHR1cmVJbnZhbGlkID0gZmFsc2U7XG5cblx0XHRpZiAodGhpcy5fcERlcHRoUmVuZGVyKVxuXHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3BEZXB0aFJlbmRlciA9IG5ldyBSZW5kZXJUZXh0dXJlKHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVXaWR0aCwgdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudGV4dHVyZUhlaWdodCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gRGVmYXVsdFJlbmRlcmVyOyJdfQ== \ No newline at end of file diff --git a/lib/core/render/DepthRenderer.js b/lib/core/render/DepthRenderer.js deleted file mode 100755 index 8d77e356..00000000 --- a/lib/core/render/DepthRenderer.js +++ /dev/null @@ -1,141 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -/** - * The DepthRenderer class renders 32-bit depth information encoded as RGBA - * - * @class away.render.DepthRenderer - */ -var DepthRenderer = (function (_super) { - __extends(DepthRenderer, _super); - /** - * Creates a new DepthRenderer object. - * @param renderBlended Indicates whether semi-transparent objects should be rendered. - * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based - */ - function DepthRenderer(pass, renderBlended) { - if (renderBlended === void 0) { renderBlended = false; } - _super.call(this); - this._pass = pass; - this._renderBlended = renderBlended; - this._iBackgroundR = 1; - this._iBackgroundG = 1; - this._iBackgroundB = 1; - } - Object.defineProperty(DepthRenderer.prototype, "disableColor", { - get: function () { - return this._disableColor; - }, - set: function (value) { - this._disableColor = value; - }, - enumerable: true, - configurable: true - }); - DepthRenderer.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { - this.pCollectRenderables(entityCollector); - this._pContext.setRenderTarget(target, true, 0); - this._pContext.clear(1, 1, 1, 1, 1, 0); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); - var head = this._pOpaqueRenderableHead; - var first = true; - for (var i = numCascades - 1; i >= 0; --i) { - this._pStage.scissorRect = scissorRects[i]; - this.drawCascadeRenderables(head, cameras[i], first ? null : cameras[i].frustumPlanes); - first = false; - } - //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! - this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); - this._pStage.scissorRect = null; - }; - DepthRenderer.prototype.drawCascadeRenderables = function (renderable, camera, cullPlanes) { - var activePass; - var activeMaterial; - var context = this._pStage.context; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); - //TODO: generalise this test - if (activePass.key == "") - this._pContext.calcAnimationCode(renderable.material, activePass); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - // if completely in front, it will fall in a different cascade - // do not use near and far planes - if (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) { - renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - } - else { - renderable2.cascaded = true; - } - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded); - renderable.material._iDeactivatePass(activePass, this._pStage); - renderable = renderable2; - } - }; - /** - * @inheritDoc - */ - DepthRenderer.prototype.pDraw = function (entityCollector, target) { - this.pCollectRenderables(entityCollector); - this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); - this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); - if (this._disableColor) - this._pContext.setColorMask(false, false, false, false); - if (this._renderBlended) - this.drawRenderables(this._pBlendedRenderableHead, entityCollector); - if (this._disableColor) - this._pContext.setColorMask(true, true, true, true); - }; - /** - * Draw a list of renderables. - * @param renderables The renderables to draw. - * @param entityCollector The EntityCollector containing all potentially visible information. - */ - DepthRenderer.prototype.drawRenderables = function (renderable, entityCollector) { - var activePass; - var activeMaterial; - var context = this._pStage.context; - var camera = entityCollector.camera; - var renderable2; - while (renderable) { - activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); - // otherwise this would result in depth rendered anyway because fragment shader kil is ignored - if (this._disableColor && renderable.material.alphaThreshold != 0) { - renderable2 = renderable; - do { - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - } - else { - renderable2 = renderable; - activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); - //TODO: generalise this test - if (activePass.key == "") - this._pContext.calcAnimationCode(renderable.material, activePass); - renderable.material._iActivatePass(activePass, this._pStage, camera); - do { - renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); - renderable2 = renderable2.next; - } while (renderable2 && renderable2.material == renderable.material); - renderable.material._iDeactivatePass(activePass, this._pStage); - } - renderable = renderable2; - } - }; - return DepthRenderer; -})(RendererBase); -module.exports = DepthRenderer; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9kZXB0aHJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbIkRlcHRoUmVuZGVyZXIiLCJEZXB0aFJlbmRlcmVyLmNvbnN0cnVjdG9yIiwiRGVwdGhSZW5kZXJlci5kaXNhYmxlQ29sb3IiLCJEZXB0aFJlbmRlcmVyLl9pUmVuZGVyQ2FzY2FkZXMiLCJEZXB0aFJlbmRlcmVyLmRyYXdDYXNjYWRlUmVuZGVyYWJsZXMiLCJEZXB0aFJlbmRlcmVyLnBEcmF3IiwiRGVwdGhSZW5kZXJlci5kcmF3UmVuZGVyYWJsZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQVlBLElBQU8sWUFBWSxXQUFlLDZDQUE2QyxDQUFDLENBQUM7QUFDakYsSUFBTyxvQkFBb0IsV0FBYSxzREFBc0QsQ0FBQyxDQUFDO0FBQ2hHLElBQU8sb0JBQW9CLFdBQWEsc0RBQXNELENBQUMsQ0FBQztBQUtoRyxBQUtBOzs7O0dBREc7SUFDRyxhQUFhO0lBQVNBLFVBQXRCQSxhQUFhQSxVQUFxQkE7SUFNdkNBOzs7O09BSUdBO0lBQ0hBLFNBWEtBLGFBQWFBLENBV05BLElBQXFCQSxFQUFFQSxhQUE2QkE7UUFBN0JDLDZCQUE2QkEsR0FBN0JBLHFCQUE2QkE7UUFFL0RBLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVsQkEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsYUFBYUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7SUFFeEJBLENBQUNBO0lBRURELHNCQUFXQSx1Q0FBWUE7YUFBdkJBO1lBRUNFLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBO1FBQzNCQSxDQUFDQTthQUVERixV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QUFTQSxDQUFDQSxpQkFBaUJBLENBQUNBLFVBQVVBLENBQUNBLFFBQVFBLEVBQUVBLFVBQVVBLENBQUNBLENBQUNBO2dCQUVuRUEsVUFBVUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsVUFBVUEsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsRUFBRUEsTUFBTUEsQ0FBQ0EsQ0FBQ0E7Z0JBRXJFQSxHQUFHQSxDQUFDQTtvQkFDSEEsV0FBV0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsVUFBVUEsRUFBRUEsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsRUFBRUEsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EseUJBQXlCQSxDQUFDQSxDQUFDQTtvQkFFakhBLFdBQVdBLEdBQUdBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBO2dCQUVoQ0EsQ0FBQ0EsUUFBUUEsV0FBV0EsSUFBSUEsV0FBV0EsQ0FBQ0EsUUFBUUEsSUFBSUEsVUFBVUEsQ0FBQ0EsUUFBUUEsRUFBRUE7Z0JBRXJFQSxVQUFVQSxDQUFDQSxRQUFRQSxDQUFDQSxnQkFBZ0JBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1lBQ2hFQSxDQUFDQTtZQUVEQSxVQUFVQSxHQUFHQSxXQUFXQSxDQUFDQTtRQUMxQkEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFDRk4sb0JBQUNBO0FBQURBLENBM0tBLEFBMktDQSxFQTNLMkIsWUFBWSxFQTJLdkM7QUFFRCxBQUF1QixpQkFBZCxhQUFhLENBQUMiLCJmaWxlIjoiY29yZS9yZW5kZXIvRGVwdGhSZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGxhbmUzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1BsYW5lM0RcIik7XG5pbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcblxuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgSUVudGl0eVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9JRW50aXR5XCIpO1xuaW1wb3J0IEVudGl0eUNvbGxlY3Rvclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3RyYXZlcnNlL0VudGl0eUNvbGxlY3RvclwiKTtcbmltcG9ydCBTaGFkb3dDYXN0ZXJDb2xsZWN0b3JcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3RyYXZlcnNlL1NoYWRvd0Nhc3RlckNvbGxlY3RvclwiKTtcblxuaW1wb3J0IE1hdGVyaWFsRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsRGF0YVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgUmVuZGVyZXJCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9SZW5kZXJlckJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQmxlbmRGYWN0b3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTEJsZW5kRmFjdG9yXCIpO1xuaW1wb3J0IENvbnRleHRHTENvbXBhcmVNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5cblxuLyoqXG4gKiBUaGUgRGVwdGhSZW5kZXJlciBjbGFzcyByZW5kZXJzIDMyLWJpdCBkZXB0aCBpbmZvcm1hdGlvbiBlbmNvZGVkIGFzIFJHQkFcbiAqXG4gKiBAY2xhc3MgYXdheS5yZW5kZXIuRGVwdGhSZW5kZXJlclxuICovXG5jbGFzcyBEZXB0aFJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXJCYXNlXG57XG5cdHByaXZhdGUgX3Bhc3M6TWF0ZXJpYWxQYXNzQmFzZTtcblx0cHJpdmF0ZSBfcmVuZGVyQmxlbmRlZDpib29sZWFuO1xuXHRwcml2YXRlIF9kaXNhYmxlQ29sb3I6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBEZXB0aFJlbmRlcmVyIG9iamVjdC5cblx0ICogQHBhcmFtIHJlbmRlckJsZW5kZWQgSW5kaWNhdGVzIHdoZXRoZXIgc2VtaS10cmFuc3BhcmVudCBvYmplY3RzIHNob3VsZCBiZSByZW5kZXJlZC5cblx0ICogQHBhcmFtIGRpc3RhbmNlQmFzZWQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdyaXR0ZW4gZGVwdGggdmFsdWUgaXMgZGlzdGFuY2UtYmFzZWQgb3IgcHJvamVjdGVkIGRlcHRoLWJhc2VkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXNzOk1hdGVyaWFsUGFzc0Jhc2UsIHJlbmRlckJsZW5kZWQ6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX3Bhc3MgPSBwYXNzO1xuXG5cdFx0dGhpcy5fcmVuZGVyQmxlbmRlZCA9IHJlbmRlckJsZW5kZWQ7XG5cdFx0dGhpcy5faUJhY2tncm91bmRSID0gMTtcblx0XHR0aGlzLl9pQmFja2dyb3VuZEcgPSAxO1xuXHRcdHRoaXMuX2lCYWNrZ3JvdW5kQiA9IDE7XG5cblx0fVxuXG5cdHB1YmxpYyBnZXQgZGlzYWJsZUNvbG9yKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc2FibGVDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlzYWJsZUNvbG9yKHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLl9kaXNhYmxlQ29sb3IgPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBfaVJlbmRlckNhc2NhZGVzKGVudGl0eUNvbGxlY3RvcjpTaGFkb3dDYXN0ZXJDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlLCBudW1DYXNjYWRlczpudW1iZXIsIHNjaXNzb3JSZWN0czpBcnJheTxSZWN0YW5nbGU+LCBjYW1lcmFzOkFycmF5PENhbWVyYT4pXG5cdHtcblx0XHR0aGlzLnBDb2xsZWN0UmVuZGVyYWJsZXMoZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdHRoaXMuX3BDb250ZXh0LnNldFJlbmRlclRhcmdldCh0YXJnZXQsIHRydWUsIDApO1xuXHRcdHRoaXMuX3BDb250ZXh0LmNsZWFyKDEsIDEsIDEsIDEsIDEsIDApO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KHRydWUsIENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1MpO1xuXG5cdFx0dmFyIGhlYWQ6UmVuZGVyYWJsZUJhc2UgPSB0aGlzLl9wT3BhcXVlUmVuZGVyYWJsZUhlYWQ7XG5cblx0XHR2YXIgZmlyc3Q6Ym9vbGVhbiA9IHRydWU7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IG51bUNhc2NhZGVzIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0XHRcdHRoaXMuX3BTdGFnZS5zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0c1tpXTtcblx0XHRcdHRoaXMuZHJhd0Nhc2NhZGVSZW5kZXJhYmxlcyhoZWFkLCBjYW1lcmFzW2ldLCBmaXJzdD8gbnVsbCA6IGNhbWVyYXNbaV0uZnJ1c3R1bVBsYW5lcyk7XG5cdFx0XHRmaXJzdCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vbGluZSByZXF1aXJlZCBmb3IgY29ycmVjdCByZW5kZXJpbmcgd2hlbiB1c2luZyBhd2F5M2Qgd2l0aCBzdGFybGluZy4gRE8gTk9UIFJFTU9WRSBVTkxFU1MgU1RBUkxJTkcgSU5URUdSQVRJT04gSVMgUkVURVNURUQhXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KGZhbHNlLCBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMKTtcblxuXHRcdHRoaXMuX3BTdGFnZS5zY2lzc29yUmVjdCA9IG51bGw7XG5cblx0fVxuXG5cdHByaXZhdGUgZHJhd0Nhc2NhZGVSZW5kZXJhYmxlcyhyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBjYW1lcmE6Q2FtZXJhLCBjdWxsUGxhbmVzOkFycmF5PFBsYW5lM0Q+KVxuXHR7XG5cdFx0dmFyIGFjdGl2ZVBhc3M6TWF0ZXJpYWxQYXNzRGF0YTtcblx0XHR2YXIgYWN0aXZlTWF0ZXJpYWw6TWF0ZXJpYWxEYXRhO1xuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0O1xuXHRcdHZhciByZW5kZXJhYmxlMjpSZW5kZXJhYmxlQmFzZTtcblxuXHRcdHdoaWxlIChyZW5kZXJhYmxlKSB7XG5cdFx0XHRhY3RpdmVNYXRlcmlhbCA9IGNvbnRleHQuZ2V0TWF0ZXJpYWwocmVuZGVyYWJsZS5tYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHRyZW5kZXJhYmxlMiA9IHJlbmRlcmFibGU7XG5cblx0XHRcdGFjdGl2ZVBhc3MgPSBhY3RpdmVNYXRlcmlhbC5nZXRNYXRlcmlhbFBhc3ModGhpcy5fcGFzcywgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHQvL1RPRE86IGdlbmVyYWxpc2UgdGhpcyB0ZXN0XG5cdFx0XHRpZiAoYWN0aXZlUGFzcy5rZXkgPT0gXCJcIilcblx0XHRcdFx0dGhpcy5fcENvbnRleHQuY2FsY0FuaW1hdGlvbkNvZGUocmVuZGVyYWJsZS5tYXRlcmlhbCwgYWN0aXZlUGFzcyk7XG5cblx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lBY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdC8vIGlmIGNvbXBsZXRlbHkgaW4gZnJvbnQsIGl0IHdpbGwgZmFsbCBpbiBhIGRpZmZlcmVudCBjYXNjYWRlXG5cdFx0XHRcdC8vIGRvIG5vdCB1c2UgbmVhciBhbmQgZmFyIHBsYW5lc1xuXHRcdFx0XHRpZiAoIWN1bGxQbGFuZXMgfHwgcmVuZGVyYWJsZTIuc291cmNlRW50aXR5LndvcmxkQm91bmRzLmlzSW5GcnVzdHVtKGN1bGxQbGFuZXMsIDQpKSB7XG5cdFx0XHRcdFx0cmVuZGVyYWJsZTIubWF0ZXJpYWwuX2lSZW5kZXJQYXNzKGFjdGl2ZVBhc3MsIHJlbmRlcmFibGUyLCB0aGlzLl9wU3RhZ2UsIGNhbWVyYSwgdGhpcy5fcFJ0dFZpZXdQcm9qZWN0aW9uTWF0cml4KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZW5kZXJhYmxlMi5jYXNjYWRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZW5kZXJhYmxlMiA9IHJlbmRlcmFibGUyLm5leHQ7XG5cblx0XHRcdH0gd2hpbGUgKHJlbmRlcmFibGUyICYmIHJlbmRlcmFibGUyLm1hdGVyaWFsID09IHJlbmRlcmFibGUubWF0ZXJpYWwgJiYgIXJlbmRlcmFibGUyLmNhc2NhZGVkKTtcblxuXHRcdFx0cmVuZGVyYWJsZS5tYXRlcmlhbC5faURlYWN0aXZhdGVQYXNzKGFjdGl2ZVBhc3MsIHRoaXMuX3BTdGFnZSk7XG5cblx0XHRcdHJlbmRlcmFibGUgPSByZW5kZXJhYmxlMjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBwRHJhdyhlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSlcblx0e1xuXHRcdHRoaXMucENvbGxlY3RSZW5kZXJhYmxlcyhlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cblx0XHR0aGlzLl9wQ29udGV4dC5zZXREZXB0aFRlc3QodHJ1ZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTUyk7XG5cblx0XHR0aGlzLmRyYXdSZW5kZXJhYmxlcyh0aGlzLl9wT3BhcXVlUmVuZGVyYWJsZUhlYWQsIGVudGl0eUNvbGxlY3Rvcik7XG5cblx0XHRpZiAodGhpcy5fZGlzYWJsZUNvbG9yKVxuXHRcdFx0dGhpcy5fcENvbnRleHQuc2V0Q29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLl9yZW5kZXJCbGVuZGVkKVxuXHRcdFx0dGhpcy5kcmF3UmVuZGVyYWJsZXModGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCwgZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdGlmICh0aGlzLl9kaXNhYmxlQ29sb3IpXG5cdFx0XHR0aGlzLl9wQ29udGV4dC5zZXRDb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRHJhdyBhIGxpc3Qgb2YgcmVuZGVyYWJsZXMuXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlcyBUaGUgcmVuZGVyYWJsZXMgdG8gZHJhdy5cblx0ICogQHBhcmFtIGVudGl0eUNvbGxlY3RvciBUaGUgRW50aXR5Q29sbGVjdG9yIGNvbnRhaW5pbmcgYWxsIHBvdGVudGlhbGx5IHZpc2libGUgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGRyYXdSZW5kZXJhYmxlcyhyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0dmFyIGFjdGl2ZVBhc3M6TWF0ZXJpYWxQYXNzRGF0YTtcblx0XHR2YXIgYWN0aXZlTWF0ZXJpYWw6TWF0ZXJpYWxEYXRhO1xuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0O1xuXHRcdHZhciBjYW1lcmE6Q2FtZXJhID0gZW50aXR5Q29sbGVjdG9yLmNhbWVyYTtcblx0XHR2YXIgcmVuZGVyYWJsZTI6UmVuZGVyYWJsZUJhc2U7XG5cblx0XHR3aGlsZSAocmVuZGVyYWJsZSkge1xuXHRcdFx0YWN0aXZlTWF0ZXJpYWwgPSBjb250ZXh0LmdldE1hdGVyaWFsKHJlbmRlcmFibGUubWF0ZXJpYWwsIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoaXMgd291bGQgcmVzdWx0IGluIGRlcHRoIHJlbmRlcmVkIGFueXdheSBiZWNhdXNlIGZyYWdtZW50IHNoYWRlciBraWwgaXMgaWdub3JlZFxuXHRcdFx0aWYgKHRoaXMuX2Rpc2FibGVDb2xvciAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmFscGhhVGhyZXNob2xkICE9IDApIHtcblx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlO1xuXHRcdFx0XHQvLyBmYXN0IGZvcndhcmRcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdHJlbmRlcmFibGUyID0gcmVuZGVyYWJsZTIubmV4dDtcblxuXHRcdFx0XHR9IHdoaWxlIChyZW5kZXJhYmxlMiAmJiByZW5kZXJhYmxlMi5tYXRlcmlhbCA9PSByZW5kZXJhYmxlLm1hdGVyaWFsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcmFibGUyID0gcmVuZGVyYWJsZTtcblxuXHRcdFx0XHRhY3RpdmVQYXNzID0gYWN0aXZlTWF0ZXJpYWwuZ2V0TWF0ZXJpYWxQYXNzKHRoaXMuX3Bhc3MsIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdFx0XHQvL1RPRE86IGdlbmVyYWxpc2UgdGhpcyB0ZXN0XG5cdFx0XHRcdGlmIChhY3RpdmVQYXNzLmtleSA9PSBcIlwiKVxuXHRcdFx0XHRcdHRoaXMuX3BDb250ZXh0LmNhbGNBbmltYXRpb25Db2RlKHJlbmRlcmFibGUubWF0ZXJpYWwsIGFjdGl2ZVBhc3MpO1xuXG5cdFx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lBY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRyZW5kZXJhYmxlMi5tYXRlcmlhbC5faVJlbmRlclBhc3MoYWN0aXZlUGFzcywgcmVuZGVyYWJsZTIsIHRoaXMuX3BTdGFnZSwgY2FtZXJhLCB0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXgpO1xuXG5cdFx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlMi5uZXh0O1xuXG5cdFx0XHRcdH0gd2hpbGUgKHJlbmRlcmFibGUyICYmIHJlbmRlcmFibGUyLm1hdGVyaWFsID09IHJlbmRlcmFibGUubWF0ZXJpYWwpO1xuXG5cdFx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lEZWFjdGl2YXRlUGFzcyhhY3RpdmVQYXNzLCB0aGlzLl9wU3RhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZW5kZXJhYmxlID0gcmVuZGVyYWJsZTI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCA9IERlcHRoUmVuZGVyZXI7Il19 \ No newline at end of file diff --git a/lib/core/render/Filter3DRenderer.js b/lib/core/render/Filter3DRenderer.js deleted file mode 100755 index 3ec65a0e..00000000 --- a/lib/core/render/Filter3DRenderer.js +++ /dev/null @@ -1,140 +0,0 @@ -var Event = require("awayjs-core/lib/events/Event"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); -/** - * @class away.render.Filter3DRenderer - */ -var Filter3DRenderer = (function () { - function Filter3DRenderer(stage) { - var _this = this; - this._filterSizesInvalid = true; - this._onRTTResizeDelegate = function (event) { return _this.onRTTResize(event); }; - this._stage = stage; - this._rttManager = RTTBufferManager.getInstance(stage); - this._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate); - } - Filter3DRenderer.prototype.onRTTResize = function (event) { - this._filterSizesInvalid = true; - }; - Object.defineProperty(Filter3DRenderer.prototype, "requireDepthRender", { - get: function () { - return this._requireDepthRender; - }, - enumerable: true, - configurable: true - }); - Filter3DRenderer.prototype.getMainInputTexture = function (stage) { - if (this._filterTasksInvalid) { - this.updateFilterTasks(stage); - } - return this._mainInputTexture; - }; - Object.defineProperty(Filter3DRenderer.prototype, "filters", { - get: function () { - return this._filters; - }, - set: function (value) { - this._filters = value; - this._filterTasksInvalid = true; - this._requireDepthRender = false; - if (!this._filters) { - return; - } - for (var i = 0; i < this._filters.length; ++i) { - // TODO: check logic: - // this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender ) - var s = this._filters[i]; - var b = (s.requireDepthRender == null) ? false : s.requireDepthRender; - this._requireDepthRender = this._requireDepthRender || b; - } - this._filterSizesInvalid = true; - }, - enumerable: true, - configurable: true - }); - Filter3DRenderer.prototype.updateFilterTasks = function (stage) { - var len; - if (this._filterSizesInvalid) { - this.updateFilterSizes(); - } - if (!this._filters) { - this._tasks = null; - return; - } - this._tasks = new Array(); - len = this._filters.length - 1; - var filter; - for (var i = 0; i <= len; ++i) { - // make sure all internal tasks are linked together - filter = this._filters[i]; - // TODO: check logic - // filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage); - filter.setRenderTargets(i == len ? null : this._filters[i + 1].getMainInputTexture(stage), stage); - this._tasks = this._tasks.concat(filter.tasks); - } - this._mainInputTexture = this._filters[0].getMainInputTexture(stage); - }; - Filter3DRenderer.prototype.render = function (stage, camera, depthTexture) { - var len; - var i; - var task; - var context = stage.context; - var indexBuffer = this._rttManager.indexBuffer; - var vertexBuffer = this._rttManager.renderToTextureVertexBuffer; - if (!this._filters) { - return; - } - if (this._filterSizesInvalid) { - this.updateFilterSizes(); - } - if (this._filterTasksInvalid) { - this.updateFilterTasks(stage); - } - len = this._filters.length; - for (i = 0; i < len; ++i) { - this._filters[i].update(stage, camera); - } - len = this._tasks.length; - if (len > 1) { - context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); - } - for (i = 0; i < len; ++i) { - task = this._tasks[i]; - //stage.setRenderTarget(task.target); //TODO - if (!task.target) { - stage.scissorRect = null; - vertexBuffer = this._rttManager.renderToScreenVertexBuffer; - context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); - } - context.setTextureAt(0, task.getMainInputTexture(stage)); - context.setProgram(task.getProgram(stage)); - context.clear(0.0, 0.0, 0.0, 0.0); - task.activate(stage, camera, depthTexture); - context.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); - context.drawTriangles(indexBuffer, 0, 2); - task.deactivate(stage); - } - context.setTextureAt(0, null); - context.setVertexBufferAt(0, null); - context.setVertexBufferAt(1, null); - }; - Filter3DRenderer.prototype.updateFilterSizes = function () { - for (var i = 0; i < this._filters.length; ++i) { - this._filters[i].textureWidth = this._rttManager.textureWidth; - this._filters[i].textureHeight = this._rttManager.textureHeight; - } - this._filterSizesInvalid = true; - }; - Filter3DRenderer.prototype.dispose = function () { - this._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate); - this._rttManager = null; - this._stage = null; - }; - return Filter3DRenderer; -})(); -module.exports = Filter3DRenderer; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9maWx0ZXIzZHJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbIkZpbHRlcjNEUmVuZGVyZXIiLCJGaWx0ZXIzRFJlbmRlcmVyLmNvbnN0cnVjdG9yIiwiRmlsdGVyM0RSZW5kZXJlci5vblJUVFJlc2l6ZSIsIkZpbHRlcjNEUmVuZGVyZXIucmVxdWlyZURlcHRoUmVuZGVyIiwiRmlsdGVyM0RSZW5kZXJlci5nZXRNYWluSW5wdXRUZXh0dXJlIiwiRmlsdGVyM0RSZW5kZXJlci5maWx0ZXJzIiwiRmlsdGVyM0RSZW5kZXJlci51cGRhdGVGaWx0ZXJUYXNrcyIsIkZpbHRlcjNEUmVuZGVyZXIucmVuZGVyIiwiRmlsdGVyM0RSZW5kZXJlci51cGRhdGVGaWx0ZXJTaXplcyIsIkZpbHRlcjNEUmVuZGVyZXIuZGlzcG9zZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxLQUFLLFdBQWdCLDhCQUE4QixDQUFDLENBQUM7QUFLNUQsSUFBTyxvQkFBb0IsV0FBYSxzREFBc0QsQ0FBQyxDQUFDO0FBQ2hHLElBQU8sMkJBQTJCLFdBQVcsNkRBQTZELENBQUMsQ0FBQztBQU81RyxJQUFPLGdCQUFnQixXQUFjLDhDQUE4QyxDQUFDLENBQUM7QUFFckYsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQVlyQkEsU0FaS0EsZ0JBQWdCQSxDQVlUQSxLQUFXQTtRQVp4QkMsaUJBME1DQTtRQWpNUUEsd0JBQW1CQSxHQUFXQSxJQUFJQSxDQUFDQTtRQUsxQ0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxVQUFDQSxLQUFXQSxJQUFLQSxPQUFBQSxLQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUF2QkEsQ0FBdUJBLENBQUNBO1FBRXJFQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUNwQkEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsZ0JBQWdCQSxDQUFDQSxXQUFXQSxDQUFDQSxLQUFLQSxD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Q0EsRUFBRUEsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsMkJBQTJCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtRQUNwRkEsQ0FBQ0E7UUFFREEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7WUFFMUJBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBRXRCQSxBQUVBQSw0Q0FGNENBO1lBRTVDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFFbEJBLEtBQUtBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLENBQUNBO2dCQUN6QkEsWUFBWUEsR0FBR0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsMEJBQTBCQSxDQUFDQTtnQkFDM0RBLE9BQU9BLENBQUNBLGlCQUFpQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsMkJBQTJCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtnQkFDbkZBLE9BQU9BLENBQUNBLGlCQUFpQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsMkJBQTJCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtZQUVwRkEsQ0FBQ0E7WUFFREEsT0FBT0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUN6REEsT0FBT0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDM0NBLE9BQU9BLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLEVBQUVBLEdBQUdBLEVBQUVBLEdBQUdBLEVBQUVBLEdBQUdBLENBQUNBLENBQUNBO1lBRWxDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxLQUFLQSxFQUFFQSxNQUFNQSxFQUFFQSxZQUFZQSxDQUFDQSxDQUFDQTtZQUUzQ0EsT0FBT0EsQ0FBQ0EsZUFBZUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxHQUFHQSxFQUFFQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQzdFQSxPQUFPQSxDQUFDQSxhQUFhQSxDQUFDQSxXQUFXQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUV6Q0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDeEJBLENBQUNBO1FBRURBLE9BQU9BLENBQUNBLFlBQVlBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO1FBQzlCQSxPQUFPQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO1FBQ25DQSxPQUFPQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO0lBQ3BDQSxDQUFDQTtJQUVPUCw0Q0FBaUJBLEdBQXpCQTtRQUVDUSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxNQUFNQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQTtZQUN0REEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsWUFBWUEsR0FBR0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsWUFBWUEsQ0FBQ0E7WUFDOURBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGFBQWFBLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLGFBQWFBLENBQUNBO1FBQ2pFQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxtQkFBbUJBLEdBQUdBLElBQUlBLENBQUNBO0lBRWpDQSxDQUFDQTtJQUVNUixrQ0FBT0EsR0FBZEE7UUFFQ1MsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxFQUFFQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBO1FBQzlFQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDcEJBLENBQUNBO0lBQ0ZULHVCQUFDQTtBQUFEQSxDQTFNQSxBQTBNQ0EsSUFBQTtBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJjb3JlL3JlbmRlci9GaWx0ZXIzRFJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnRcIik7XG5cbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IENvbnRleHRHTEJsZW5kRmFjdG9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xCbGVuZEZhY3RvclwiKTtcbmltcG9ydCBDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgSUluZGV4QnVmZmVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUluZGV4QnVmZmVyXCIpO1xuaW1wb3J0IElUZXh0dXJlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVGV4dHVyZVwiKTtcbmltcG9ydCBJVmVydGV4QnVmZmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lWZXJ0ZXhCdWZmZXJcIik7XG5pbXBvcnQgRmlsdGVyM0RCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL0ZpbHRlcjNEQmFzZVwiKTtcbmltcG9ydCBGaWx0ZXIzRFRhc2tCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvZmlsdGVycy90YXNrcy9GaWx0ZXIzRFRhc2tCYXNlXCIpO1xuaW1wb3J0IFJUVEJ1ZmZlck1hbmFnZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9SVFRCdWZmZXJNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIEBjbGFzcyBhd2F5LnJlbmRlci5GaWx0ZXIzRFJlbmRlcmVyXG4gKi9cbmNsYXNzIEZpbHRlcjNEUmVuZGVyZXJcbntcblx0cHJpdmF0ZSBfZmlsdGVyczpBcnJheTxGaWx0ZXIzREJhc2U+O1xuXHRwcml2YXRlIF90YXNrczpBcnJheTxGaWx0ZXIzRFRhc2tCYXNlPjtcblx0cHJpdmF0ZSBfZmlsdGVyVGFza3NJbnZhbGlkOmJvb2xlYW47XG5cdHByaXZhdGUgX21haW5JbnB1dFRleHR1cmU6SVRleHR1cmU7XG5cdHByaXZhdGUgX3JlcXVpcmVEZXB0aFJlbmRlcjpib29sZWFuO1xuXHRwcml2YXRlIF9ydHRNYW5hZ2VyOlJUVEJ1ZmZlck1hbmFnZXI7XG5cdHByaXZhdGUgX3N0YWdlOlN0YWdlO1xuXHRwcml2YXRlIF9maWx0ZXJTaXplc0ludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHByaXZhdGUgX29uUlRUUmVzaXplRGVsZWdhdGU6KGV2ZW50OkV2ZW50KSA9PiB2b2lkO1xuXG5cdGNvbnN0cnVjdG9yKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dGhpcy5fb25SVFRSZXNpemVEZWxlZ2F0ZSA9IChldmVudDpFdmVudCkgPT4gdGhpcy5vblJUVFJlc2l6ZShldmVudCk7XG5cblx0XHR0aGlzLl9zdGFnZSA9IHN0YWdlO1xuXHRcdHRoaXMuX3J0dE1hbmFnZXIgPSBSVFRCdWZmZXJNYW5hZ2VyLmdldEluc3RhbmNlKHN0YWdlKTtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRXZlbnQuUkVTSVpFLCB0aGlzLl9vblJUVFJlc2l6ZURlbGVnYXRlKTtcblxuXHR9XG5cblx0cHJpdmF0ZSBvblJUVFJlc2l6ZShldmVudDpFdmVudClcblx0e1xuXHRcdHRoaXMuX2ZpbHRlclNpemVzSW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlcXVpcmVEZXB0aFJlbmRlcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZTpTdGFnZSk6SVRleHR1cmVcblx0e1xuXHRcdGlmICh0aGlzLl9maWx0ZXJUYXNrc0ludmFsaWQpIHtcblxuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZSk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fbWFpbklucHV0VGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZmlsdGVycygpOkZpbHRlcjNEQmFzZVtdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZmlsdGVycztcblx0fVxuXG5cdHB1YmxpYyBzZXQgZmlsdGVycyh2YWx1ZTpGaWx0ZXIzREJhc2VbXSlcblx0e1xuXHRcdHRoaXMuX2ZpbHRlcnMgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX2ZpbHRlclRhc2tzSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXIgPSBmYWxzZTtcblxuXHRcdGlmICghdGhpcy5fZmlsdGVycykge1xuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgKytpKSB7XG5cblx0XHRcdC8vIFRPRE86IGNoZWNrIGxvZ2ljOlxuXHRcdFx0Ly8gdGhpcy5fcmVxdWlyZURlcHRoUmVuZGVyIHx8PSAgQm9vbGVhbiAoIHRoaXMuX2ZpbHRlcnNbaV0ucmVxdWlyZURlcHRoUmVuZGVyIClcblxuXHRcdFx0dmFyIHM6YW55ID0gdGhpcy5fZmlsdGVyc1tpXTtcblx0XHRcdHZhciBiOmJvb2xlYW4gPSA8Ym9vbGVhbj4gKCBzLnJlcXVpcmVEZXB0aFJlbmRlciA9PSBudWxsICk/IGZhbHNlIDogcy5yZXF1aXJlRGVwdGhSZW5kZXI7XG5cblx0XHRcdHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciA9IHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciB8fCBiO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fZmlsdGVyU2l6ZXNJbnZhbGlkID0gdHJ1ZTtcblxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHZhciBsZW46bnVtYmVyO1xuXG5cdFx0aWYgKHRoaXMuX2ZpbHRlclNpemVzSW52YWxpZCkge1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlclNpemVzKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX2ZpbHRlcnMpIHtcblx0XHRcdHRoaXMuX3Rhc2tzID0gbnVsbDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl90YXNrcyA9IG5ldyBBcnJheTxGaWx0ZXIzRFRhc2tCYXNlPigpO1xuXG5cdFx0bGVuID0gdGhpcy5fZmlsdGVycy5sZW5ndGggLSAxO1xuXG5cdFx0dmFyIGZpbHRlcjpGaWx0ZXIzREJhc2U7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPD0gbGVuOyArK2kpIHtcblxuXHRcdFx0Ly8gbWFrZSBzdXJlIGFsbCBpbnRlcm5hbCB0YXNrcyBhcmUgbGlua2VkIHRvZ2V0aGVyXG5cdFx0XHRmaWx0ZXIgPSB0aGlzLl9maWx0ZXJzW2ldO1xuXG5cdFx0XHQvLyBUT0RPOiBjaGVjayBsb2dpY1xuXHRcdFx0Ly8gZmlsdGVyLnNldFJlbmRlclRhcmdldHMoaSA9PSBsZW4/IG51bGwgOiBGaWx0ZXIzREJhc2UoX2ZpbHRlcnNbaSArIDFdKS5nZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlKSwgc3RhZ2UpO1xuXG5cdFx0XHRmaWx0ZXIuc2V0UmVuZGVyVGFyZ2V0cyhpID09IGxlbj8gbnVsbCA6IHRoaXMuX2ZpbHRlcnNbaSArIDFdLmdldE1haW5JbnB1dFRleHR1cmUoc3RhZ2UpLCBzdGFnZSk7XG5cblx0XHRcdHRoaXMuX3Rhc2tzID0gdGhpcy5fdGFza3MuY29uY2F0KGZpbHRlci50YXNrcyk7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9tYWluSW5wdXRUZXh0dXJlID0gdGhpcy5fZmlsdGVyc1swXS5nZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlKTtcblxuXHR9XG5cblx0cHVibGljIHJlbmRlcihzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgZGVwdGhUZXh0dXJlOklUZXh0dXJlKVxuXHR7XG5cdFx0dmFyIGxlbjpudW1iZXI7XG5cdFx0dmFyIGk6bnVtYmVyO1xuXHRcdHZhciB0YXNrOkZpbHRlcjNEVGFza0Jhc2U7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdHZhciBpbmRleEJ1ZmZlcjpJSW5kZXhCdWZmZXIgPSB0aGlzLl9ydHRNYW5hZ2VyLmluZGV4QnVmZmVyO1xuXG5cdFx0dmFyIHZlcnRleEJ1ZmZlcjpJVmVydGV4QnVmZmVyID0gdGhpcy5fcnR0TWFuYWdlci5yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXI7XG5cblx0XHRpZiAoIXRoaXMuX2ZpbHRlcnMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fZmlsdGVyU2l6ZXNJbnZhbGlkKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlclNpemVzKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2ZpbHRlclRhc2tzSW52YWxpZCkge1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZSk7XG5cdFx0fVxuXG5cdFx0bGVuID0gdGhpcy5fZmlsdGVycy5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdHRoaXMuX2ZpbHRlcnNbaV0udXBkYXRlKHN0YWdlLCBjYW1lcmEpO1xuXHRcdH1cblxuXHRcdGxlbiA9IHRoaXMuX3Rhc2tzLmxlbmd0aDtcblxuXHRcdGlmIChsZW4gPiAxKSB7XG5cdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDAsIHZlcnRleEJ1ZmZlciwgMCwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXHRcdFx0Y29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdCgxLCB2ZXJ0ZXhCdWZmZXIsIDIsIENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5GTE9BVF8yKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblxuXHRcdFx0dGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xuXG5cdFx0XHQvL3N0YWdlLnNldFJlbmRlclRhcmdldCh0YXNrLnRhcmdldCk7IC8vVE9ET1xuXG5cdFx0XHRpZiAoIXRhc2sudGFyZ2V0KSB7XG5cblx0XHRcdFx0c3RhZ2Uuc2Npc3NvclJlY3QgPSBudWxsO1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl9ydHRNYW5hZ2VyLnJlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyO1xuXHRcdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDAsIHZlcnRleEJ1ZmZlciwgMCwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXHRcdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDEsIHZlcnRleEJ1ZmZlciwgMiwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnRleHQuc2V0VGV4dHVyZUF0KDAsIHRhc2suZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZSkpO1xuXHRcdFx0Y29udGV4dC5zZXRQcm9ncmFtKHRhc2suZ2V0UHJvZ3JhbShzdGFnZSkpO1xuXHRcdFx0Y29udGV4dC5jbGVhcigwLjAsIDAuMCwgMC4wLCAwLjApO1xuXG5cdFx0XHR0YXNrLmFjdGl2YXRlKHN0YWdlLCBjYW1lcmEsIGRlcHRoVGV4dHVyZSk7XG5cblx0XHRcdGNvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cdFx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoaW5kZXhCdWZmZXIsIDAsIDIpO1xuXG5cdFx0XHR0YXNrLmRlYWN0aXZhdGUoc3RhZ2UpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuc2V0VGV4dHVyZUF0KDAsIG51bGwpO1xuXHRcdGNvbnRleHQuc2V0VmVydGV4QnVmZmVyQXQoMCwgbnVsbCk7XG5cdFx0Y29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdCgxLCBudWxsKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRmlsdGVyU2l6ZXMoKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7ICsraSkge1xuXHRcdFx0dGhpcy5fZmlsdGVyc1tpXS50ZXh0dXJlV2lkdGggPSB0aGlzLl9ydHRNYW5hZ2VyLnRleHR1cmVXaWR0aDtcblx0XHRcdHRoaXMuX2ZpbHRlcnNbaV0udGV4dHVyZUhlaWdodCA9IHRoaXMuX3J0dE1hbmFnZXIudGV4dHVyZUhlaWdodDtcblx0XHR9XG5cblx0XHR0aGlzLl9maWx0ZXJTaXplc0ludmFsaWQgPSB0cnVlO1xuXG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnQuUkVTSVpFLCB0aGlzLl9vblJUVFJlc2l6ZURlbGVnYXRlKTtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyID0gbnVsbDtcblx0XHR0aGlzLl9zdGFnZSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gRmlsdGVyM0RSZW5kZXJlcjsiXX0= \ No newline at end of file diff --git a/lib/core/render/RendererBase.js b/lib/core/render/RendererBase.js deleted file mode 100755 index 82e31909..00000000 --- a/lib/core/render/RendererBase.js +++ /dev/null @@ -1,555 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); -var Point = require("awayjs-core/lib/geom/Point"); -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); -var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); -var RenderableMergeSort = require("awayjs-display/lib/sort/RenderableMergeSort"); -var RendererEvent = require("awayjs-display/lib/events/RendererEvent"); -var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); -var BillboardRenderable = require("awayjs-stagegl/lib/core/pool/BillboardRenderable"); -var LineSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/LineSubMeshRenderable"); -var TriangleSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); -/** - * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the - * contents of a partition - * - * @class away.render.RendererBase - */ -var RendererBase = (function (_super) { - __extends(RendererBase, _super); - /** - * Creates a new RendererBase object. - */ - function RendererBase() { - var _this = this; - _super.call(this); - this._viewPort = new Rectangle(); - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this._depthPrepass = false; - this._backgroundR = 0; - this._backgroundG = 0; - this._backgroundB = 0; - this._backgroundAlpha = 1; - this._shareContext = false; - this.textureRatioX = 1; - this.textureRatioY = 1; - this._pRttViewProjectionMatrix = new Matrix3D(); - this._localPos = new Point(); - this._globalPos = new Point(); - this._pScissorRect = new Rectangle(); - this._pNumTriangles = 0; - this._onViewportUpdatedDelegate = function (event) { return _this.onViewportUpdated(event); }; - this._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable); - this._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable); - this._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable); - this._onContextUpdateDelegate = function (event) { return _this.onContextUpdate(event); }; - //default sorting algorithm - this.renderableSorter = new RenderableMergeSort(); - } - Object.defineProperty(RendererBase.prototype, "numTriangles", { - /** - * - */ - get: function () { - return this._pNumTriangles; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "viewPort", { - /** - * A viewPort rectangle equivalent of the Stage size and position. - */ - get: function () { - return this._viewPort; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "scissorRect", { - /** - * A scissor rectangle equivalent of the view size and position. - */ - get: function () { - return this._pScissorRect; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "x", { - /** - * - */ - get: function () { - return this._localPos.x; - }, - set: function (value) { - if (this.x == value) - return; - this._globalPos.x = this._localPos.x = value; - this.updateGlobalPos(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "y", { - /** - * - */ - get: function () { - return this._localPos.y; - }, - set: function (value) { - if (this.y == value) - return; - this._globalPos.y = this._localPos.y = value; - this.updateGlobalPos(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "width", { - /** - * - */ - get: function () { - return this._width; - }, - set: function (value) { - if (this._width == value) - return; - this._width = value; - this._pScissorRect.width = value; - if (this._pRttBufferManager) - this._pRttBufferManager.viewWidth = value; - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this.notifyScissorUpdate(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "height", { - /** - * - */ - get: function () { - return this._height; - }, - set: function (value) { - if (this._height == value) - return; - this._height = value; - this._pScissorRect.height = value; - if (this._pRttBufferManager) - this._pRttBufferManager.viewHeight = value; - this._pBackBufferInvalid = true; - this._pDepthTextureInvalid = true; - this.notifyScissorUpdate(); - }, - enumerable: true, - configurable: true - }); - RendererBase.prototype._iCreateEntityCollector = function () { - return new EntityCollector(); - }; - Object.defineProperty(RendererBase.prototype, "_iBackgroundR", { - /** - * The background color's red component, used when clearing. - * - * @private - */ - get: function () { - return this._backgroundR; - }, - set: function (value) { - if (this._backgroundR == value) - return; - this._backgroundR = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "_iBackgroundG", { - /** - * The background color's green component, used when clearing. - * - * @private - */ - get: function () { - return this._backgroundG; - }, - set: function (value) { - if (this._backgroundG == value) - return; - this._backgroundG = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "_iBackgroundB", { - /** - * The background color's blue component, used when clearing. - * - * @private - */ - get: function () { - return this._backgroundB; - }, - set: function (value) { - if (this._backgroundB == value) - return; - this._backgroundB = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RendererBase.prototype, "stage", { - /** - * The Stage that will provide the ContextGL used for rendering. - */ - get: function () { - return this._pStage; - }, - set: function (value) { - if (value == this._pStage) - return; - this.iSetStage(value); - }, - enumerable: true, - configurable: true - }); - RendererBase.prototype.iSetStage = function (value) { - if (this._pStage) { - this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - } - if (!value) { - this._pStage = null; - this._pContext = null; - } - else { - this._pStage = value; - this._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - /* - if (_backgroundImageRenderer) - _backgroundImageRenderer.stage = value; - */ - if (this._pStage.context) - this._pContext = this._pStage.context; - } - this._pBackBufferInvalid = true; - this.updateGlobalPos(); - }; - Object.defineProperty(RendererBase.prototype, "shareContext", { - /** - * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks - * to share the same ContextGL object. - */ - get: function () { - return this._shareContext; - }, - set: function (value) { - if (this._shareContext == value) - return; - this._shareContext = value; - this.updateGlobalPos(); - }, - enumerable: true, - configurable: true - }); - /** - * Disposes the resources used by the RendererBase. - */ - RendererBase.prototype.dispose = function () { - if (this._pRttBufferManager) - this._pRttBufferManager.dispose(); - this._pRttBufferManager = null; - this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); - this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); - this._pStage = null; - /* - if (_backgroundImageRenderer) { - _backgroundImageRenderer.dispose(); - _backgroundImageRenderer = null; - } - */ - }; - RendererBase.prototype.render = function (entityCollector) { - this._viewportDirty = false; - this._scissorDirty = false; - }; - /** - * Renders the potentially visible geometry to the back buffer or texture. - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - * @param target An option target texture to render to. - * @param surfaceSelector The index of a CubeTexture's face to render to. - * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. - */ - RendererBase.prototype._iRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - //TODO refactor setTarget so that rendertextures are created before this check - if (!this._pStage || !this._pContext) - return; - this._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection); - this._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1); - this.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector); - for (var i = 0; i < 8; ++i) { - this._pContext.setVertexBufferAt(i, null); - this._pContext.setTextureAt(i, null); - } - }; - RendererBase.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { - }; - RendererBase.prototype.pCollectRenderables = function (entityCollector) { - //reset head values - this._pBlendedRenderableHead = null; - this._pOpaqueRenderableHead = null; - this._pNumTriangles = 0; - //grab entity head - var item = entityCollector.entityHead; - //set temp values for entry point and camera forward vector - this._pCamera = entityCollector.camera; - this._iEntryPoint = this._pCamera.scenePosition; - this._pCameraForward = this._pCamera.transform.forwardVector; - while (item) { - item.entity._iCollectRenderables(this); - item = item.next; - } - //sort the resulting renderables - this._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead); - this._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead); - }; - /** - * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up. - * - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - * @param target An option target texture to render to. - * @param surfaceSelector The index of a CubeTexture's face to render to. - * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. - */ - RendererBase.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { - if (target === void 0) { target = null; } - if (scissorRect === void 0) { scissorRect = null; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - this._pContext.setRenderTarget(target, true, surfaceSelector); - if ((target || !this._shareContext) && !this._depthPrepass) - this._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0); - this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); - this._pStage.scissorRect = scissorRect; - /* - if (_backgroundImageRenderer) - _backgroundImageRenderer.render(); - */ - this.pDraw(entityCollector, target); - //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! - //this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie - if (!this._shareContext) { - if (this._snapshotRequired && this._snapshotBitmapData) { - this._pContext.drawToBitmapData(this._snapshotBitmapData); - this._snapshotRequired = false; - } - } - this._pStage.scissorRect = null; - }; - /* - * Will draw the renderer's output on next render to the provided bitmap data. - * */ - RendererBase.prototype.queueSnapshot = function (bmd) { - this._snapshotRequired = true; - this._snapshotBitmapData = bmd; - }; - /** - * Performs the actual drawing of geometry to the target. - * @param entityCollector The EntityCollector object containing the potentially visible geometry. - */ - RendererBase.prototype.pDraw = function (entityCollector, target) { - throw new AbstractMethodError(); - }; - /** - * Assign the context once retrieved - */ - RendererBase.prototype.onContextUpdate = function (event) { - this._pContext = this._pStage.context; - }; - Object.defineProperty(RendererBase.prototype, "_iBackgroundAlpha", { - get: function () { - return this._backgroundAlpha; - }, - set: function (value) { - if (this._backgroundAlpha == value) - return; - this._backgroundAlpha = value; - this._pBackBufferInvalid = true; - }, - enumerable: true, - configurable: true - }); - /* - public get iBackground():Texture2DBase - { - return this._background; - } - */ - /* - public set iBackground(value:Texture2DBase) - { - if (this._backgroundImageRenderer && !value) { - this._backgroundImageRenderer.dispose(); - this._backgroundImageRenderer = null; - } - - if (!this._backgroundImageRenderer && value) - { - - this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage); - - } - - - this._background = value; - - if (this._backgroundImageRenderer) - this._backgroundImageRenderer.texture = value; - } - */ - /* - public get backgroundImageRenderer():BackgroundImageRenderer - { - return _backgroundImageRenderer; - } - */ - /** - * @private - */ - RendererBase.prototype.notifyScissorUpdate = function () { - if (this._scissorDirty) - return; - this._scissorDirty = true; - if (!this._scissorUpdated) - this._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED); - this.dispatchEvent(this._scissorUpdated); - }; - /** - * @private - */ - RendererBase.prototype.notifyViewportUpdate = function () { - if (this._viewportDirty) - return; - this._viewportDirty = true; - if (!this._viewPortUpdated) - this._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED); - this.dispatchEvent(this._viewPortUpdated); - }; - /** - * - */ - RendererBase.prototype.onViewportUpdated = function (event) { - this._viewPort = this._pStage.viewPort; - //TODO stop firing viewport updated for every stagegl viewport change - if (this._shareContext) { - this._pScissorRect.x = this._globalPos.x - this._pStage.x; - this._pScissorRect.y = this._globalPos.y - this._pStage.y; - this.notifyScissorUpdate(); - } - this.notifyViewportUpdate(); - }; - /** - * - */ - RendererBase.prototype.updateGlobalPos = function () { - if (this._shareContext) { - this._pScissorRect.x = this._globalPos.x - this._viewPort.x; - this._pScissorRect.y = this._globalPos.y - this._viewPort.y; - } - else { - this._pScissorRect.x = 0; - this._pScissorRect.y = 0; - this._viewPort.x = this._globalPos.x; - this._viewPort.y = this._globalPos.y; - } - this.notifyScissorUpdate(); - }; - /** - * - * @param billboard - * @protected - */ - RendererBase.prototype.applyBillboard = function (billboard) { - this._applyRenderable(this._billboardRenderablePool.getItem(billboard)); - }; - /** - * - * @param triangleSubMesh - */ - RendererBase.prototype.applyTriangleSubMesh = function (triangleSubMesh) { - this._applyRenderable(this._triangleSubMeshRenderablePool.getItem(triangleSubMesh)); - }; - /** - * - * @param lineSubMesh - */ - RendererBase.prototype.applyLineSubMesh = function (lineSubMesh) { - this._applyRenderable(this._lineSubMeshRenderablePool.getItem(lineSubMesh)); - }; - /** - * - * @param renderable - * @protected - */ - RendererBase.prototype._applyRenderable = function (renderable) { - var material = renderable.materialOwner.material; - var entity = renderable.sourceEntity; - var position = entity.scenePosition; - if (!material) - material = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner); - //update material if invalidated - material._iUpdateMaterial(); - //set ids for faster referencing - renderable.material = material; - renderable.materialId = material._iMaterialId; - renderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId; - renderable.cascaded = false; - // project onto camera's z-axis - position = this._iEntryPoint.subtract(position); - renderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward); - //store reference to scene transform - renderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera); - if (material.requiresBlending) { - renderable.next = this._pBlendedRenderableHead; - this._pBlendedRenderableHead = renderable; - } - else { - renderable.next = this._pOpaqueRenderableHead; - this._pOpaqueRenderableHead = renderable; - } - this._pNumTriangles += renderable.numTriangles; - //handle any overflow for renderables with data that exceeds GPU limitations - if (renderable.overflow) - this._applyRenderable(renderable.overflow); - }; - return RendererBase; -})(EventDispatcher); -module.exports = RendererBase; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9yZW5kZXJlcmJhc2UudHMiXSwibmFtZXMiOlsiUmVuZGVyZXJCYXNlIiwiUmVuZGVyZXJCYXNlLmNvbnN0cnVjdG9yIiwiUmVuZGVyZXJCYXNlLm51bVRyaWFuZ2xlcyIsIlJlbmRlcmVyQmFzZS52aWV3UG9ydCIsIlJlbmRlcmVyQmFzZS5zY2lzc29yUmVjdCIsIlJlbmRlcmVyQmFzZS54IiwiUmVuZGVyZXJCYXNlLnkiLCJSZW5kZXJlckJhc2Uud2lkdGgiLCJSZW5kZXJlckJhc2UuaGVpZ2h0IiwiUmVuZGVyZXJCYXNlLl9pQ3JlYXRlRW50aXR5Q29sbGVjdG9yIiwiUmVuZGVyZXJCYXNlLl9pQmFja2dyb3VuZFIiLCJSZW5kZXJlckJhc2UuX2lCYWNrZ3JvdW5kRyIsIlJlbmRlcmVyQmFzZS5faUJhY2tncm91bmRCIiwiUmVuZGVyZXJCYXNlLnN0YWdlIiwiUmVuZGVyZXJCYXNlLmlTZXRTdGFnZSIsIlJlbmRlcmVyQmFzZS5zaGFyZUNvbnRleHQiLCJSZW5kZXJlckJhc2UuZGlzcG9zZSIsIlJlbmRlcmVyQmFzZS5yZW5kZXIiLCJSZW5kZXJlckJhc2UuX2lSZW5kZXIiLCJSZW5kZXJlckJhc2UuX2lSZW5kZXJDYXNjYWRlcyIsIlJlbmRlcmVyQmFzZS5wQ29sbGVjdFJlbmRlcmFibGVzIiwiUmVuZGVyZXJCYXNlLnBFeGVjdXRlUmVuZGVyIiwiUmVuZGVyZXJCYXNlLnF1ZXVlU25hcHNob3QiLCJSZW5kZXJlckJhc2UucERyYXciLCJSZW5kZXJlckJhc2Uub25Db250ZXh0VXBkYXRlIiwiUmVuZGVyZXJCYXNlLl9pQmFja2dyb3VuZEFscGhhIiwiUmVuZGVyZXJCYXNlLm5vdGlmeVNjaXNzb3JVcGRhdGUiLCJSZW5kZXJlckJhc2Uubm90aWZ5Vmlld3BvcnRVcGRhdGUiLCJSZW5kZXJlckJhc2Uub25WaWV3cG9ydFVwZGF0ZWQiLCJSZW5kZXJlckJhc2UudXBkYXRlR2xvYmFsUG9zIiwiUmVuZGVyZXJCYXNlLmFwcGx5QmlsbGJvYXJkIiwiUmVuZGVyZXJCYXNlLmFwcGx5VHJpYW5nbGVTdWJNZXNoIiwiUmVuZGVyZXJCYXNlLmFwcGx5TGluZVN1Yk1lc2giLCJSZW5kZXJlckJhc2UuX2FwcGx5UmVuZGVyYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBTyxRQUFRLFdBQWdCLCtCQUErQixDQUFDLENBQUM7QUFDaEUsSUFBTyxLQUFLLFdBQWdCLDRCQUE0QixDQUFDLENBQUM7QUFDMUQsSUFBTyxTQUFTLFdBQWUsZ0NBQWdDLENBQUMsQ0FBQztBQUVqRSxJQUFPLG1CQUFtQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFDckYsSUFBTyxlQUFlLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQU85RSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTdFLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQU90RixJQUFPLGFBQWEsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzdFLElBQU8sVUFBVSxXQUFlLHNDQUFzQyxDQUFDLENBQUM7QUFHeEUsSUFBTyxlQUFlLFdBQWMsNkNBQTZDLENBQUMsQ0FBQztBQUluRixJQUFPLG1CQUFtQixXQUFhLGtEQUFrRCxDQUFDLENBQUM7QUFDM0YsSUFBTyxxQkFBcUIsV0FBWSxvREFBb0QsQ0FBQyxDQUFDO0FBRTlGLElBQU8seUJBQXlCLFdBQVcsd0RBQXdELENBQUMsQ0FBQztBQUNyRyxJQUFPLG9CQUFvQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFHaEcsSUFBTyxzQkFBc0IsV0FBWSwyREFBMkQsQ0FBQyxDQUFDO0FBRXRHLEFBTUE7Ozs7O0dBREc7SUFDRyxZQUFZO0lBQVNBLFVBQXJCQSxZQUFZQSxVQUF3QkE7SUEwS3pDQTs7T0FFR0E7SUFDSEEsU0E3S0tBLFlBQVlBO1FBQWxCQyxpQkEycEJDQTtRQTVlQ0EsaUJBQU9BLENBQUNBO1FBaktEQSxjQUFTQSxHQUFhQSxJQUFJQSxTQUFTQSxFQUFFQSxDQUFDQTtR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LEVBM3BCMEIsZUFBZSxFQTJwQnpDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImNvcmUvcmVuZGVyL1JlbmRlcmVyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgUG9pbnRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9Qb2ludFwiKTtcbmltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlUHJveHlCYXNlXCIpO1xuXG5pbXBvcnQgTGluZVN1Yk1lc2hcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGluZVN1Yk1lc2hcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJNZXNoXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Yk1lc2hcIik7XG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEVudGl0eUxpc3RJdGVtXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9FbnRpdHlMaXN0SXRlbVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvUmVuZGVyYWJsZVBvb2xcIik7XG5pbXBvcnQgSUVudGl0eVNvcnRlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3NvcnQvSUVudGl0eVNvcnRlclwiKTtcbmltcG9ydCBSZW5kZXJhYmxlTWVyZ2VTb3J0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3NvcnQvUmVuZGVyYWJsZU1lcmdlU29ydFwiKTtcbmltcG9ydCBJUmVuZGVyZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3JlbmRlci9JUmVuZGVyZXJcIik7XG5pbXBvcnQgQmlsbGJvYXJkXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9CaWxsYm9hcmRcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBJRW50aXR5XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0lFbnRpdHlcIik7XG5pbXBvcnQgU2t5Ym94XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL1NreWJveFwiKTtcblxuaW1wb3J0IFJlbmRlcmVyRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvUmVuZGVyZXJFdmVudFwiKTtcbmltcG9ydCBTdGFnZUV2ZW50XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvU3RhZ2VFdmVudFwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5cbmltcG9ydCBFbnRpdHlDb2xsZWN0b3JcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi90cmF2ZXJzZS9FbnRpdHlDb2xsZWN0b3JcIik7XG5pbXBvcnQgSUNvbGxlY3Rvclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvdHJhdmVyc2UvSUNvbGxlY3RvclwiKTtcbmltcG9ydCBTaGFkb3dDYXN0ZXJDb2xsZWN0b3JcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3RyYXZlcnNlL1NoYWRvd0Nhc3RlckNvbGxlY3RvclwiKTtcblxuaW1wb3J0IEJpbGxib2FyZFJlbmRlcmFibGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL0JpbGxib2FyZFJlbmRlcmFibGVcIik7XG5pbXBvcnQgTGluZVN1Yk1lc2hSZW5kZXJhYmxlXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTGluZVN1Yk1lc2hSZW5kZXJhYmxlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQ29tcGFyZU1vZGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBSVFRCdWZmZXJNYW5hZ2VyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWFuYWdlcnMvUlRUQnVmZmVyTWFuYWdlclwiKTtcbmltcG9ydCBEZWZhdWx0TWF0ZXJpYWxNYW5hZ2VyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvRGVmYXVsdE1hdGVyaWFsTWFuYWdlclwiKTtcblxuLyoqXG4gKiBSZW5kZXJlckJhc2UgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgdG8gcmVuZGVyIHRoZVxuICogY29udGVudHMgb2YgYSBwYXJ0aXRpb25cbiAqXG4gKiBAY2xhc3MgYXdheS5yZW5kZXIuUmVuZGVyZXJCYXNlXG4gKi9cbmNsYXNzIFJlbmRlcmVyQmFzZSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlclxue1xuXHRwcml2YXRlIF9iaWxsYm9hcmRSZW5kZXJhYmxlUG9vbDpSZW5kZXJhYmxlUG9vbDtcblx0cHJpdmF0ZSBfdHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZVBvb2w6UmVuZGVyYWJsZVBvb2w7XG5cdHByaXZhdGUgX2xpbmVTdWJNZXNoUmVuZGVyYWJsZVBvb2w6UmVuZGVyYWJsZVBvb2w7XG5cblx0cHVibGljIF9wQ29udGV4dDpJQ29udGV4dFN0YWdlR0w7XG5cdHB1YmxpYyBfcFN0YWdlOlN0YWdlO1xuXG5cdHB1YmxpYyBfcENhbWVyYTpDYW1lcmE7XG5cdHB1YmxpYyBfaUVudHJ5UG9pbnQ6VmVjdG9yM0Q7XG5cdHB1YmxpYyBfcENhbWVyYUZvcndhcmQ6VmVjdG9yM0Q7XG5cblx0cHVibGljIF9wUnR0QnVmZmVyTWFuYWdlcjpSVFRCdWZmZXJNYW5hZ2VyO1xuXHRwcml2YXRlIF92aWV3UG9ydDpSZWN0YW5nbGUgPSBuZXcgUmVjdGFuZ2xlKCk7XG5cdHByaXZhdGUgX3ZpZXdwb3J0RGlydHk6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfc2Npc3NvckRpcnR5OmJvb2xlYW47XG5cblx0cHVibGljIF9wQmFja0J1ZmZlckludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHB1YmxpYyBfcERlcHRoVGV4dHVyZUludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHB1YmxpYyBfZGVwdGhQcmVwYXNzOmJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZFI6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEc6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEI6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEFscGhhOm51bWJlciA9IDE7XG5cdHB1YmxpYyBfc2hhcmVDb250ZXh0OmJvb2xlYW4gPSBmYWxzZTtcblxuXHQvLyBvbmx5IHVzZWQgYnkgcmVuZGVyZXJzIHRoYXQgbmVlZCB0byByZW5kZXIgZ2VvbWV0cnkgdG8gdGV4dHVyZXNcblx0cHVibGljIF93aWR0aDpudW1iZXI7XG5cdHB1YmxpYyBfaGVpZ2h0Om51bWJlcjtcblxuXHRwdWJsaWMgdGV4dHVyZVJhdGlvWDpudW1iZXIgPSAxO1xuXHRwdWJsaWMgdGV4dHVyZVJhdGlvWTpudW1iZXIgPSAxO1xuXG5cdHByaXZhdGUgX3NuYXBzaG90Qml0bWFwRGF0YTpCaXRtYXBEYXRhO1xuXHRwcml2YXRlIF9zbmFwc2hvdFJlcXVpcmVkOmJvb2xlYW47XG5cblx0cHVibGljIF9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXg6TWF0cml4M0QgPSBuZXcgTWF0cml4M0QoKTtcblxuXHRwcml2YXRlIF9sb2NhbFBvczpQb2ludCA9IG5ldyBQb2ludCgpO1xuXHRwcml2YXRlIF9nbG9iYWxQb3M6UG9pbnQgPSBuZXcgUG9pbnQoKTtcblx0cHVibGljIF9wU2Npc3NvclJlY3Q6UmVjdGFuZ2xlID0gbmV3IFJlY3RhbmdsZSgpO1xuXG5cdHByaXZhdGUgX3NjaXNzb3JVcGRhdGVkOlJlbmRlcmVyRXZlbnQ7XG5cdHByaXZhdGUgX3ZpZXdQb3J0VXBkYXRlZDpSZW5kZXJlckV2ZW50O1xuXG5cdHByaXZhdGUgX29uQ29udGV4dFVwZGF0ZURlbGVnYXRlOkZ1bmN0aW9uO1xuXHRwcml2YXRlIF9vblZpZXdwb3J0VXBkYXRlZERlbGVnYXRlO1xuXG5cdHB1YmxpYyBfcE51bVRyaWFuZ2xlczpudW1iZXIgPSAwO1xuXG5cdHB1YmxpYyBfcE9wYXF1ZVJlbmRlcmFibGVIZWFkOlJlbmRlcmFibGVCYXNlO1xuXHRwdWJsaWMgX3BCbGVuZGVkUmVuZGVyYWJsZUhlYWQ6UmVuZGVyYWJsZUJhc2U7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVRyaWFuZ2xlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BOdW1UcmlhbmdsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyByZW5kZXJhYmxlU29ydGVyOklFbnRpdHlTb3J0ZXI7XG5cblxuXHQvKipcblx0ICogQSB2aWV3UG9ydCByZWN0YW5nbGUgZXF1aXZhbGVudCBvZiB0aGUgU3RhZ2Ugc2l6ZSBhbmQgcG9zaXRpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHZpZXdQb3J0KCk6UmVjdGFuZ2xlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld1BvcnQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzY2lzc29yIHJlY3RhbmdsZSBlcXVpdmFsZW50IG9mIHRoZSB2aWV3IHNpemUgYW5kIHBvc2l0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBzY2lzc29yUmVjdCgpOlJlY3RhbmdsZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BTY2lzc29yUmVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCB4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxQb3MueDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgeCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy54ID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZ2xvYmFsUG9zLnggPSB0aGlzLl9sb2NhbFBvcy54ID0gdmFsdWU7XG5cblx0XHR0aGlzLnVwZGF0ZUdsb2JhbFBvcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHkoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9sb2NhbFBvcy55O1xuXHR9XG5cblx0cHVibGljIHNldCB5KHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLnkgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9nbG9iYWxQb3MueSA9IHRoaXMuX2xvY2FsUG9zLnkgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlR2xvYmFsUG9zKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBnZXQgd2lkdGgoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl93aWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgd2lkdGgodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3dpZHRoID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fd2lkdGggPSB2YWx1ZTtcblx0XHR0aGlzLl9wU2Npc3NvclJlY3Qud2lkdGggPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLl9wUnR0QnVmZmVyTWFuYWdlcilcblx0XHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnZpZXdXaWR0aCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0XHR0aGlzLl9wRGVwdGhUZXh0dXJlSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLm5vdGlmeVNjaXNzb3JVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCBoZWlnaHQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGhlaWdodCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5faGVpZ2h0ID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faGVpZ2h0ID0gdmFsdWU7XG5cdFx0dGhpcy5fcFNjaXNzb3JSZWN0LmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyKVxuXHRcdFx0dGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudmlld0hlaWdodCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0XHR0aGlzLl9wRGVwdGhUZXh0dXJlSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLm5vdGlmeVNjaXNzb3JVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFJlbmRlcmVyQmFzZSBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fb25WaWV3cG9ydFVwZGF0ZWREZWxlZ2F0ZSA9IChldmVudDpTdGFnZUV2ZW50KSA9PiB0aGlzLm9uVmlld3BvcnRVcGRhdGVkKGV2ZW50KTtcblxuXHRcdHRoaXMuX2JpbGxib2FyZFJlbmRlcmFibGVQb29sID0gUmVuZGVyYWJsZVBvb2wuZ2V0UG9vbChCaWxsYm9hcmRSZW5kZXJhYmxlKTtcblx0XHR0aGlzLl90cmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlUG9vbCA9IFJlbmRlcmFibGVQb29sLmdldFBvb2woVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZSk7XG5cdFx0dGhpcy5fbGluZVN1Yk1lc2hSZW5kZXJhYmxlUG9vbCA9IFJlbmRlcmFibGVQb29sLmdldFBvb2woTGluZVN1Yk1lc2hSZW5kZXJhYmxlKTtcblxuXHRcdHRoaXMuX29uQ29udGV4dFVwZGF0ZURlbGVnYXRlID0gKGV2ZW50OkV2ZW50KSA9PiB0aGlzLm9uQ29udGV4dFVwZGF0ZShldmVudCk7XG5cblx0XHQvL2RlZmF1bHQgc29ydGluZyBhbGdvcml0aG1cblx0XHR0aGlzLnJlbmRlcmFibGVTb3J0ZXIgPSBuZXcgUmVuZGVyYWJsZU1lcmdlU29ydCgpO1xuXHR9XG5cblx0cHVibGljIF9pQ3JlYXRlRW50aXR5Q29sbGVjdG9yKCk6SUNvbGxlY3RvclxuXHR7XG5cdFx0cmV0dXJuIG5ldyBFbnRpdHlDb2xsZWN0b3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvcidzIHJlZCBjb21wb25lbnQsIHVzZWQgd2hlbiBjbGVhcmluZy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBnZXQgX2lCYWNrZ3JvdW5kUigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2JhY2tncm91bmRSO1xuXHR9XG5cblx0cHVibGljIHNldCBfaUJhY2tncm91bmRSKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9iYWNrZ3JvdW5kUiA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2JhY2tncm91bmRSID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yJ3MgZ3JlZW4gY29tcG9uZW50LCB1c2VkIHdoZW4gY2xlYXJpbmcuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pQmFja2dyb3VuZEcoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kRztcblx0fVxuXG5cdHB1YmxpYyBzZXQgX2lCYWNrZ3JvdW5kRyh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYmFja2dyb3VuZEcgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kRyA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvcidzIGJsdWUgY29tcG9uZW50LCB1c2VkIHdoZW4gY2xlYXJpbmcuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pQmFja2dyb3VuZEIoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgX2lCYWNrZ3JvdW5kQih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYmFja2dyb3VuZEIgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kQiA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgU3RhZ2UgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIENvbnRleHRHTCB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN0YWdlKCk6U3RhZ2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wU3RhZ2U7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHN0YWdlKHZhbHVlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHZhbHVlID09IHRoaXMuX3BTdGFnZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuaVNldFN0YWdlKHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBpU2V0U3RhZ2UodmFsdWU6U3RhZ2UpXG5cdHtcblx0XHRpZiAodGhpcy5fcFN0YWdlKSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5DT05URVhUX1JFQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5WSUVXUE9SVF9VUERBVEVELCB0aGlzLl9vblZpZXdwb3J0VXBkYXRlZERlbGVnYXRlKTtcblx0XHR9XG5cblx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UgPSBudWxsO1xuXHRcdFx0dGhpcy5fcENvbnRleHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UgPSB2YWx1ZTtcblx0XHRcdHRoaXMuX3BTdGFnZS5hZGRFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuQ09OVEVYVF9DUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0XHR0aGlzLl9wU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfUkVDUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0XHR0aGlzLl9wU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LlZJRVdQT1JUX1VQREFURUQsIHRoaXMuX29uVmlld3BvcnRVcGRhdGVkRGVsZWdhdGUpO1xuXG5cdFx0XHQvKlxuXHRcdFx0IGlmIChfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIpXG5cdFx0XHQgX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyLnN0YWdlID0gdmFsdWU7XG5cdFx0XHQgKi9cblx0XHRcdGlmICh0aGlzLl9wU3RhZ2UuY29udGV4dClcblx0XHRcdFx0dGhpcy5fcENvbnRleHQgPSA8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dDtcblx0XHR9XG5cblx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXG5cdFx0dGhpcy51cGRhdGVHbG9iYWxQb3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZlcnMgY29udHJvbCBvZiBDb250ZXh0R0wgY2xlYXIoKSBhbmQgcHJlc2VudCgpIGNhbGxzIHRvIFN0YWdlLCBlbmFibGluZyBtdWx0aXBsZSBTdGFnZSBmcmFtZXdvcmtzXG5cdCAqIHRvIHNoYXJlIHRoZSBzYW1lIENvbnRleHRHTCBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNoYXJlQ29udGV4dCgpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9zaGFyZUNvbnRleHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNoYXJlQ29udGV4dCh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NoYXJlQ29udGV4dCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3NoYXJlQ29udGV4dCA9IHZhbHVlO1xuXG5cdFx0dGhpcy51cGRhdGVHbG9iYWxQb3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwb3NlcyB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFJlbmRlcmVyQmFzZS5cblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGlmICh0aGlzLl9wUnR0QnVmZmVyTWFuYWdlcilcblx0XHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyID0gbnVsbDtcblxuXHRcdHRoaXMuX3BTdGFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuQ09OVEVYVF9DUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5DT05URVhUX1JFQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdHRoaXMuX3BTdGFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuVklFV1BPUlRfVVBEQVRFRCwgdGhpcy5fb25WaWV3cG9ydFVwZGF0ZWREZWxlZ2F0ZSk7XG5cblx0XHR0aGlzLl9wU3RhZ2UgPSBudWxsO1xuXG5cdFx0Lypcblx0XHQgaWYgKF9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcikge1xuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIgPSBudWxsO1xuXHRcdCB9XG5cdFx0ICovXG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yKVxuXHR7XG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IGZhbHNlO1xuXHRcdHRoaXMuX3NjaXNzb3JEaXJ0eSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlcnMgdGhlIHBvdGVudGlhbGx5IHZpc2libGUgZ2VvbWV0cnkgdG8gdGhlIGJhY2sgYnVmZmVyIG9yIHRleHR1cmUuXG5cdCAqIEBwYXJhbSBlbnRpdHlDb2xsZWN0b3IgVGhlIEVudGl0eUNvbGxlY3RvciBvYmplY3QgY29udGFpbmluZyB0aGUgcG90ZW50aWFsbHkgdmlzaWJsZSBnZW9tZXRyeS5cblx0ICogQHBhcmFtIHRhcmdldCBBbiBvcHRpb24gdGFyZ2V0IHRleHR1cmUgdG8gcmVuZGVyIHRvLlxuXHQgKiBAcGFyYW0gc3VyZmFjZVNlbGVjdG9yIFRoZSBpbmRleCBvZiBhIEN1YmVUZXh0dXJlJ3MgZmFjZSB0byByZW5kZXIgdG8uXG5cdCAqIEBwYXJhbSBhZGRpdGlvbmFsQ2xlYXJNYXNrIEFkZGl0aW9uYWwgY2xlYXIgbWFzayBpbmZvcm1hdGlvbiwgaW4gY2FzZSBleHRyYSBjbGVhciBjaGFubmVscyBhcmUgdG8gYmUgb21pdHRlZC5cblx0ICovXG5cdHB1YmxpYyBfaVJlbmRlcihlbnRpdHlDb2xsZWN0b3I6SUNvbGxlY3RvciwgdGFyZ2V0OlRleHR1cmVQcm94eUJhc2UgPSBudWxsLCBzY2lzc29yUmVjdDpSZWN0YW5nbGUgPSBudWxsLCBzdXJmYWNlU2VsZWN0b3I6bnVtYmVyID0gMClcblx0e1xuXHRcdC8vVE9ETyByZWZhY3RvciBzZXRUYXJnZXQgc28gdGhhdCByZW5kZXJ0ZXh0dXJlcyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhpcyBjaGVja1xuXHRcdGlmICghdGhpcy5fcFN0YWdlIHx8ICF0aGlzLl9wQ29udGV4dClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3BSdHRWaWV3UHJvamVjdGlvbk1hdHJpeC5jb3B5RnJvbShlbnRpdHlDb2xsZWN0b3IuY2FtZXJhLnZpZXdQcm9qZWN0aW9uKTtcblx0XHR0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXguYXBwZW5kU2NhbGUodGhpcy50ZXh0dXJlUmF0aW9YLCB0aGlzLnRleHR1cmVSYXRpb1ksIDEpO1xuXG5cdFx0dGhpcy5wRXhlY3V0ZVJlbmRlcihlbnRpdHlDb2xsZWN0b3IsIHRhcmdldCwgc2Npc3NvclJlY3QsIHN1cmZhY2VTZWxlY3Rvcik7XG5cblx0XHQvLyBnZW5lcmF0ZSBtaXAgbWFwcyBvbiB0YXJnZXQgKGlmIHRhcmdldCBleGlzdHMpIC8vVE9ET1xuXHRcdC8vaWYgKHRhcmdldClcblx0XHQvL1x0KDxUZXh0dXJlPnRhcmdldCkuZ2VuZXJhdGVNaXBtYXBzKCk7XG5cblx0XHQvLyBjbGVhciBidWZmZXJzXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgODsgKytpKSB7XG5cdFx0XHR0aGlzLl9wQ29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdChpLCBudWxsKTtcblx0XHRcdHRoaXMuX3BDb250ZXh0LnNldFRleHR1cmVBdChpLCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgX2lSZW5kZXJDYXNjYWRlcyhlbnRpdHlDb2xsZWN0b3I6U2hhZG93Q2FzdGVyQ29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSwgbnVtQ2FzY2FkZXM6bnVtYmVyLCBzY2lzc29yUmVjdHM6QXJyYXk8UmVjdGFuZ2xlPiwgY2FtZXJhczpBcnJheTxDYW1lcmE+KVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBwQ29sbGVjdFJlbmRlcmFibGVzKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yKVxuXHR7XG5cdFx0Ly9yZXNldCBoZWFkIHZhbHVlc1xuXHRcdHRoaXMuX3BCbGVuZGVkUmVuZGVyYWJsZUhlYWQgPSBudWxsO1xuXHRcdHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCA9IG51bGw7XG5cdFx0dGhpcy5fcE51bVRyaWFuZ2xlcyA9IDA7XG5cblx0XHQvL2dyYWIgZW50aXR5IGhlYWRcblx0XHR2YXIgaXRlbTpFbnRpdHlMaXN0SXRlbSA9IGVudGl0eUNvbGxlY3Rvci5lbnRpdHlIZWFkO1xuXG5cdFx0Ly9zZXQgdGVtcCB2YWx1ZXMgZm9yIGVudHJ5IHBvaW50IGFuZCBjYW1lcmEgZm9yd2FyZCB2ZWN0b3Jcblx0XHR0aGlzLl9wQ2FtZXJhID0gZW50aXR5Q29sbGVjdG9yLmNhbWVyYTtcblx0XHR0aGlzLl9pRW50cnlQb2ludCA9IHRoaXMuX3BDYW1lcmEuc2NlbmVQb3NpdGlvbjtcblx0XHR0aGlzLl9wQ2FtZXJhRm9yd2FyZCA9IHRoaXMuX3BDYW1lcmEudHJhbnNmb3JtLmZvcndhcmRWZWN0b3I7XG5cblx0XHQvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgZW50aXRpZXNcblx0XHR3aGlsZSAoaXRlbSkge1xuXHRcdFx0aXRlbS5lbnRpdHkuX2lDb2xsZWN0UmVuZGVyYWJsZXModGhpcyk7XG5cdFx0XHRpdGVtID0gaXRlbS5uZXh0O1xuXHRcdH1cblxuXHRcdC8vc29ydCB0aGUgcmVzdWx0aW5nIHJlbmRlcmFibGVzXG5cdFx0dGhpcy5fcE9wYXF1ZVJlbmRlcmFibGVIZWFkID0gPFJlbmRlcmFibGVCYXNlPiB0aGlzLnJlbmRlcmFibGVTb3J0ZXIuc29ydE9wYXF1ZVJlbmRlcmFibGVzKHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCk7XG5cdFx0dGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCA9IDxSZW5kZXJhYmxlQmFzZT4gdGhpcy5yZW5kZXJhYmxlU29ydGVyLnNvcnRCbGVuZGVkUmVuZGVyYWJsZXModGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVycyB0aGUgcG90ZW50aWFsbHkgdmlzaWJsZSBnZW9tZXRyeSB0byB0aGUgYmFjayBidWZmZXIgb3IgdGV4dHVyZS4gT25seSBleGVjdXRlZCBpZiBldmVyeXRoaW5nIGlzIHNldCB1cC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eUNvbGxlY3RvciBUaGUgRW50aXR5Q29sbGVjdG9yIG9iamVjdCBjb250YWluaW5nIHRoZSBwb3RlbnRpYWxseSB2aXNpYmxlIGdlb21ldHJ5LlxuXHQgKiBAcGFyYW0gdGFyZ2V0IEFuIG9wdGlvbiB0YXJnZXQgdGV4dHVyZSB0byByZW5kZXIgdG8uXG5cdCAqIEBwYXJhbSBzdXJmYWNlU2VsZWN0b3IgVGhlIGluZGV4IG9mIGEgQ3ViZVRleHR1cmUncyBmYWNlIHRvIHJlbmRlciB0by5cblx0ICogQHBhcmFtIGFkZGl0aW9uYWxDbGVhck1hc2sgQWRkaXRpb25hbCBjbGVhciBtYXNrIGluZm9ybWF0aW9uLCBpbiBjYXNlIGV4dHJhIGNsZWFyIGNoYW5uZWxzIGFyZSB0byBiZSBvbWl0dGVkLlxuXHQgKi9cblx0cHVibGljIHBFeGVjdXRlUmVuZGVyKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSA9IG51bGwsIHNjaXNzb3JSZWN0OlJlY3RhbmdsZSA9IG51bGwsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cdFx0dGhpcy5fcENvbnRleHQuc2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgdHJ1ZSwgc3VyZmFjZVNlbGVjdG9yKTtcblxuXHRcdGlmICgodGFyZ2V0IHx8ICF0aGlzLl9zaGFyZUNvbnRleHQpICYmICF0aGlzLl9kZXB0aFByZXBhc3MpXG5cdFx0XHR0aGlzLl9wQ29udGV4dC5jbGVhcih0aGlzLl9iYWNrZ3JvdW5kUiwgdGhpcy5fYmFja2dyb3VuZEcsIHRoaXMuX2JhY2tncm91bmRCLCB0aGlzLl9iYWNrZ3JvdW5kQWxwaGEsIDEsIDApO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KGZhbHNlLCBDb250ZXh0R0xDb21wYXJlTW9kZS5BTFdBWVMpO1xuXG5cdFx0dGhpcy5fcFN0YWdlLnNjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7XG5cblx0XHQvKlxuXHRcdCBpZiAoX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyKVxuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIucmVuZGVyKCk7XG5cdFx0ICovXG5cblx0XHR0aGlzLnBEcmF3KGVudGl0eUNvbGxlY3RvciwgdGFyZ2V0KTtcblxuXHRcdC8vbGluZSByZXF1aXJlZCBmb3IgY29ycmVjdCByZW5kZXJpbmcgd2hlbiB1c2luZyBhd2F5M2Qgd2l0aCBzdGFybGluZy4gRE8gTk9UIFJFTU9WRSBVTkxFU1MgU1RBUkxJTkcgSU5URUdSQVRJT04gSVMgUkVURVNURUQhXG5cdFx0Ly90aGlzLl9wQ29udGV4dC5zZXREZXB0aFRlc3QoZmFsc2UsIENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUwpOyAvL29vcHNpZVxuXG5cdFx0aWYgKCF0aGlzLl9zaGFyZUNvbnRleHQpIHtcblx0XHRcdGlmICh0aGlzLl9zbmFwc2hvdFJlcXVpcmVkICYmIHRoaXMuX3NuYXBzaG90Qml0bWFwRGF0YSkge1xuXHRcdFx0XHR0aGlzLl9wQ29udGV4dC5kcmF3VG9CaXRtYXBEYXRhKHRoaXMuX3NuYXBzaG90Qml0bWFwRGF0YSk7XG5cdFx0XHRcdHRoaXMuX3NuYXBzaG90UmVxdWlyZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9wU3RhZ2Uuc2Npc3NvclJlY3QgPSBudWxsO1xuXHR9XG5cblx0Lypcblx0ICogV2lsbCBkcmF3IHRoZSByZW5kZXJlcidzIG91dHB1dCBvbiBuZXh0IHJlbmRlciB0byB0aGUgcHJvdmlkZWQgYml0bWFwIGRhdGEuXG5cdCAqICovXG5cdHB1YmxpYyBxdWV1ZVNuYXBzaG90KGJtZDpCaXRtYXBEYXRhKVxuXHR7XG5cdFx0dGhpcy5fc25hcHNob3RSZXF1aXJlZCA9IHRydWU7XG5cdFx0dGhpcy5fc25hcHNob3RCaXRtYXBEYXRhID0gYm1kO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgZHJhd2luZyBvZiBnZW9tZXRyeSB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gZW50aXR5Q29sbGVjdG9yIFRoZSBFbnRpdHlDb2xsZWN0b3Igb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBvdGVudGlhbGx5IHZpc2libGUgZ2VvbWV0cnkuXG5cdCAqL1xuXHRwdWJsaWMgcERyYXcoZW50aXR5Q29sbGVjdG9yOklDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3NpZ24gdGhlIGNvbnRleHQgb25jZSByZXRyaWV2ZWRcblx0ICovXG5cdHByaXZhdGUgb25Db250ZXh0VXBkYXRlKGV2ZW50OkV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fcENvbnRleHQgPSA8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgX2lCYWNrZ3JvdW5kQWxwaGEoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQWxwaGE7XG5cdH1cblxuXHRwdWJsaWMgc2V0IF9pQmFja2dyb3VuZEFscGhhKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9iYWNrZ3JvdW5kQWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kQWxwaGEgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHQvKlxuXHQgcHVibGljIGdldCBpQmFja2dyb3VuZCgpOlRleHR1cmUyREJhc2Vcblx0IHtcblx0IHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kO1xuXHQgfVxuXHQgKi9cblxuXHQvKlxuXHQgcHVibGljIHNldCBpQmFja2dyb3VuZCh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHQge1xuXHQgaWYgKHRoaXMuX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyICYmICF2YWx1ZSkge1xuXHQgdGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHQgdGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIgPSBudWxsO1xuXHQgfVxuXG5cdCBpZiAoIXRoaXMuX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyICYmIHZhbHVlKVxuXHQge1xuXG5cdCB0aGlzLl9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlciA9IG5ldyBCYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcih0aGlzLl9wU3RhZ2UpO1xuXG5cdCB9XG5cblxuXHQgdGhpcy5fYmFja2dyb3VuZCA9IHZhbHVlO1xuXG5cdCBpZiAodGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIpXG5cdCB0aGlzLl9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlci50ZXh0dXJlID0gdmFsdWU7XG5cdCB9XG5cdCAqL1xuXHQvKlxuXHQgcHVibGljIGdldCBiYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcigpOkJhY2tncm91bmRJbWFnZVJlbmRlcmVyXG5cdCB7XG5cdCByZXR1cm4gX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyO1xuXHQgfVxuXHQgKi9cblxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBub3RpZnlTY2lzc29yVXBkYXRlKClcblx0e1xuXHRcdGlmICh0aGlzLl9zY2lzc29yRGlydHkpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9zY2lzc29yRGlydHkgPSB0cnVlO1xuXG5cdFx0aWYgKCF0aGlzLl9zY2lzc29yVXBkYXRlZClcblx0XHRcdHRoaXMuX3NjaXNzb3JVcGRhdGVkID0gbmV3IFJlbmRlcmVyRXZlbnQoUmVuZGVyZXJFdmVudC5TQ0lTU09SX1VQREFURUQpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuX3NjaXNzb3JVcGRhdGVkKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIG5vdGlmeVZpZXdwb3J0VXBkYXRlKClcblx0e1xuXHRcdGlmICh0aGlzLl92aWV3cG9ydERpcnR5KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IHRydWU7XG5cblx0XHRpZiAoIXRoaXMuX3ZpZXdQb3J0VXBkYXRlZClcblx0XHRcdHRoaXMuX3ZpZXdQb3J0VXBkYXRlZCA9IG5ldyBSZW5kZXJlckV2ZW50KFJlbmRlcmVyRXZlbnQuVklFV1BPUlRfVVBEQVRFRCk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fdmlld1BvcnRVcGRhdGVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG9uVmlld3BvcnRVcGRhdGVkKGV2ZW50OlN0YWdlRXZlbnQpXG5cdHtcblx0XHR0aGlzLl92aWV3UG9ydCA9IHRoaXMuX3BTdGFnZS52aWV3UG9ydDtcblx0XHQvL1RPRE8gc3RvcCBmaXJpbmcgdmlld3BvcnQgdXBkYXRlZCBmb3IgZXZlcnkgc3RhZ2VnbCB2aWV3cG9ydCBjaGFuZ2VcblxuXHRcdGlmICh0aGlzLl9zaGFyZUNvbnRleHQpIHtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC54ID0gdGhpcy5fZ2xvYmFsUG9zLnggLSB0aGlzLl9wU3RhZ2UueDtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC55ID0gdGhpcy5fZ2xvYmFsUG9zLnkgLSB0aGlzLl9wU3RhZ2UueTtcblx0XHRcdHRoaXMubm90aWZ5U2Npc3NvclVwZGF0ZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMubm90aWZ5Vmlld3BvcnRVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHVwZGF0ZUdsb2JhbFBvcygpXG5cdHtcblx0XHRpZiAodGhpcy5fc2hhcmVDb250ZXh0KSB7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueCA9IHRoaXMuX2dsb2JhbFBvcy54IC0gdGhpcy5fdmlld1BvcnQueDtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC55ID0gdGhpcy5fZ2xvYmFsUG9zLnkgLSB0aGlzLl92aWV3UG9ydC55O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueCA9IDA7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueSA9IDA7XG5cdFx0XHR0aGlzLl92aWV3UG9ydC54ID0gdGhpcy5fZ2xvYmFsUG9zLng7XG5cdFx0XHR0aGlzLl92aWV3UG9ydC55ID0gdGhpcy5fZ2xvYmFsUG9zLnk7XG5cdFx0fVxuXG5cdFx0dGhpcy5ub3RpZnlTY2lzc29yVXBkYXRlKCk7XG5cdH1cblxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYmlsbGJvYXJkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBhcHBseUJpbGxib2FyZChiaWxsYm9hcmQ6QmlsbGJvYXJkKVxuXHR7XG5cdFx0dGhpcy5fYXBwbHlSZW5kZXJhYmxlKDxSZW5kZXJhYmxlQmFzZT4gdGhpcy5fYmlsbGJvYXJkUmVuZGVyYWJsZVBvb2wuZ2V0SXRlbShiaWxsYm9hcmQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gdHJpYW5nbGVTdWJNZXNoXG5cdCAqL1xuXHRwdWJsaWMgYXBwbHlUcmlhbmdsZVN1Yk1lc2godHJpYW5nbGVTdWJNZXNoOlRyaWFuZ2xlU3ViTWVzaClcblx0e1xuXHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZSg8UmVuZGVyYWJsZUJhc2U+IHRoaXMuX3RyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVQb29sLmdldEl0ZW0odHJpYW5nbGVTdWJNZXNoKSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGxpbmVTdWJNZXNoXG5cdCAqL1xuXHRwdWJsaWMgYXBwbHlMaW5lU3ViTWVzaChsaW5lU3ViTWVzaDpMaW5lU3ViTWVzaClcblx0e1xuXHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZSg8UmVuZGVyYWJsZUJhc2U+IHRoaXMuX2xpbmVTdWJNZXNoUmVuZGVyYWJsZVBvb2wuZ2V0SXRlbShsaW5lU3ViTWVzaCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHByaXZhdGUgX2FwcGx5UmVuZGVyYWJsZShyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlKVxuXHR7XG5cdFx0dmFyIG1hdGVyaWFsOk1hdGVyaWFsQmFzZSA9IHJlbmRlcmFibGUubWF0ZXJpYWxPd25lci5tYXRlcmlhbDtcblx0XHR2YXIgZW50aXR5OklFbnRpdHkgPSByZW5kZXJhYmxlLnNvdXJjZUVudGl0eTtcblx0XHR2YXIgcG9zaXRpb246VmVjdG9yM0QgPSBlbnRpdHkuc2NlbmVQb3NpdGlvbjtcblxuXHRcdGlmICghbWF0ZXJpYWwpXG5cdFx0XHRtYXRlcmlhbCA9IERlZmF1bHRNYXRlcmlhbE1hbmFnZXIuZ2V0RGVmYXVsdE1hdGVyaWFsKHJlbmRlcmFibGUubWF0ZXJpYWxPd25lcik7XG5cblx0XHQvL3VwZGF0ZSBtYXRlcmlhbCBpZiBpbnZhbGlkYXRlZFxuXHRcdG1hdGVyaWFsLl9pVXBkYXRlTWF0ZXJpYWwoKTtcblxuXHRcdC8vc2V0IGlkcyBmb3IgZmFzdGVyIHJlZmVyZW5jaW5nXG5cdFx0cmVuZGVyYWJsZS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHJlbmRlcmFibGUubWF0ZXJpYWxJZCA9IG1hdGVyaWFsLl9pTWF0ZXJpYWxJZDtcblx0XHRyZW5kZXJhYmxlLnJlbmRlck9yZGVySWQgPSB0aGlzLl9wQ29udGV4dC5nZXRNYXRlcmlhbChtYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpLnJlbmRlck9yZGVySWQ7XG5cdFx0cmVuZGVyYWJsZS5jYXNjYWRlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gcHJvamVjdCBvbnRvIGNhbWVyYSdzIHotYXhpc1xuXHRcdHBvc2l0aW9uID0gdGhpcy5faUVudHJ5UG9pbnQuc3VidHJhY3QocG9zaXRpb24pO1xuXHRcdHJlbmRlcmFibGUuekluZGV4ID0gZW50aXR5LnpPZmZzZXQgKyBwb3NpdGlvbi5kb3RQcm9kdWN0KHRoaXMuX3BDYW1lcmFGb3J3YXJkKTtcblxuXHRcdC8vc3RvcmUgcmVmZXJlbmNlIHRvIHNjZW5lIHRyYW5zZm9ybVxuXHRcdHJlbmRlcmFibGUucmVuZGVyU2NlbmVUcmFuc2Zvcm0gPSByZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5nZXRSZW5kZXJTY2VuZVRyYW5zZm9ybSh0aGlzLl9wQ2FtZXJhKTtcblxuXHRcdGlmIChtYXRlcmlhbC5yZXF1aXJlc0JsZW5kaW5nKSB7XG5cdFx0XHRyZW5kZXJhYmxlLm5leHQgPSB0aGlzLl9wQmxlbmRlZFJlbmRlcmFibGVIZWFkO1xuXHRcdFx0dGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCA9IHJlbmRlcmFibGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbmRlcmFibGUubmV4dCA9IHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZDtcblx0XHRcdHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCA9IHJlbmRlcmFibGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcE51bVRyaWFuZ2xlcyArPSByZW5kZXJhYmxlLm51bVRyaWFuZ2xlcztcblxuXHRcdC8vaGFuZGxlIGFueSBvdmVyZmxvdyBmb3IgcmVuZGVyYWJsZXMgd2l0aCBkYXRhIHRoYXQgZXhjZWVkcyBHUFUgbGltaXRhdGlvbnNcblx0XHRpZiAocmVuZGVyYWJsZS5vdmVyZmxvdylcblx0XHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZShyZW5kZXJhYmxlLm92ZXJmbG93KTtcblx0fVxufVxuXG5leHBvcnQgPSBSZW5kZXJlckJhc2U7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLBase.js b/lib/core/stagegl/ContextGLBase.js deleted file mode 100755 index ceb82c7e..00000000 --- a/lib/core/stagegl/ContextGLBase.js +++ /dev/null @@ -1,343 +0,0 @@ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); -var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); -var TextureDataPool = require("awayjs-stagegl/lib/core/pool/TextureDataPool"); -var ProgramDataPool = require("awayjs-stagegl/lib/core/pool/ProgramDataPool"); -var MaterialDataPool = require("awayjs-stagegl/lib/core/pool/MaterialDataPool"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -/** - * Stage provides a proxy class to handle the creation and attachment of the Context - * (and in turn the back buffer) it uses. Stage should never be created directly, - * but requested through StageManager. - * - * @see away.managers.StageManager - * - */ -var ContextGLBase = (function () { - function ContextGLBase(stageIndex) { - this._programData = new Array(); - this._numUsedStreams = 0; - this._numUsedTextures = 0; - //private static _frameEventDriver:Shape = new Shape(); // TODO: add frame driver / request animation frame - this._stageIndex = -1; - this._antiAlias = 0; - this._renderTarget = null; - this._renderSurfaceSelector = 0; - this._stageIndex = stageIndex; - this._texturePool = new TextureDataPool(this); - this._materialDataPool = new MaterialDataPool(this); - this._programDataPool = new ProgramDataPool(this); - } - Object.defineProperty(ContextGLBase.prototype, "container", { - get: function () { - return this._pContainer; - }, - enumerable: true, - configurable: true - }); - ContextGLBase.prototype.setRenderTarget = function (target, enableDepthAndStencil, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - if (this._renderTarget === target && surfaceSelector == this._renderSurfaceSelector && this._enableDepthAndStencil == enableDepthAndStencil) - return; - this._renderTarget = target; - this._renderSurfaceSelector = surfaceSelector; - this._enableDepthAndStencil = enableDepthAndStencil; - if (target instanceof RenderTexture) { - this.setRenderToTexture(this.getRenderTexture(target), enableDepthAndStencil, this._antiAlias, surfaceSelector); - } - else { - this.setRenderToBackBuffer(); - this.configureBackBuffer(this._width, this._height, this._antiAlias, this._enableDepthAndStencil); - } - }; - ContextGLBase.prototype.getRenderTexture = function (textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) - textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); - return textureData.texture; - }; - ContextGLBase.prototype.getProgram = function (materialPassData) { - //check key doesn't need re-concatenating - if (!materialPassData.key.length) { - materialPassData.key = materialPassData.animationVertexCode + materialPassData.vertexCode + "---" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode; - } - else { - return materialPassData.programData; - } - var programData = this._programDataPool.getItem(materialPassData.key); - //check program data hasn't changed, keep count of program usages - if (materialPassData.programData != programData) { - if (materialPassData.programData) - materialPassData.programData.dispose(); - materialPassData.programData = programData; - programData.usages++; - } - return programData; - }; - /** - * - * @param material - */ - ContextGLBase.prototype.getMaterial = function (material, profile) { - var materialData = this._materialDataPool.getItem(material); - if (materialData.invalidAnimation) { - materialData.invalidAnimation = false; - var materialDataPasses = materialData.getMaterialPasses(profile); - var enabledGPUAnimation = this.getEnabledGPUAnimation(material, materialDataPasses); - var renderOrderId = 0; - var mult = 1; - var materialPassData; - var len = materialDataPasses.length; - for (var i = 0; i < len; i++) { - materialPassData = materialDataPasses[i]; - if (materialPassData.usesAnimation != enabledGPUAnimation) { - materialPassData.usesAnimation = enabledGPUAnimation; - materialPassData.key == ""; - } - if (materialPassData.key == "") - this.calcAnimationCode(material, materialPassData); - renderOrderId += this.getProgram(materialPassData).id * mult; - mult *= 1000; - } - materialData.renderOrderId = renderOrderId; - } - return materialData; - }; - /** - * Assigns an attribute stream - * - * @param index The attribute stream index for the vertex shader - * @param buffer - * @param offset - * @param stride - * @param format - */ - ContextGLBase.prototype.activateBuffer = function (index, buffer, offset, format) { - if (!buffer.contexts[this._stageIndex]) - buffer.contexts[this._stageIndex] = this; - if (!buffer.buffers[this._stageIndex]) { - buffer.buffers[this._stageIndex] = this.createVertexBuffer(buffer.data.length / buffer.dataPerVertex, buffer.dataPerVertex); - buffer.invalid[this._stageIndex] = true; - } - if (buffer.invalid[this._stageIndex]) { - buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length / buffer.dataPerVertex); - buffer.invalid[this._stageIndex] = false; - } - this.setVertexBufferAt(index, buffer.buffers[this._stageIndex], offset, format); - }; - ContextGLBase.prototype.disposeVertexData = function (buffer) { - buffer.buffers[this._stageIndex].dispose(); - buffer.buffers[this._stageIndex] = null; - }; - ContextGLBase.prototype.activateRenderTexture = function (index, textureProxy) { - this.setTextureAt(index, this.getRenderTexture(textureProxy)); - }; - ContextGLBase.prototype.activateMaterialPass = function (materialPassData, stage, camera) { - var shaderObject = materialPassData.shaderObject; - for (var i = shaderObject.numUsedStreams; i < this._numUsedStreams; i++) - this.setVertexBufferAt(i, null); - for (var i = shaderObject.numUsedTextures; i < this._numUsedTextures; i++) - this.setTextureAt(i, null); - if (materialPassData.usesAnimation) - materialPassData.material.animationSet.activate(shaderObject, stage); - //activate shader object - shaderObject.iActivate(stage, camera); - //check program data is uploaded - var programData = this.getProgram(materialPassData); - if (!programData.program) { - programData.program = this.createProgram(); - var vertexByteCode = (new AGALMiniAssembler().assemble("part vertex 1\n" + materialPassData.animationVertexCode + materialPassData.vertexCode + "endpart"))['vertex'].data; - var fragmentByteCode = (new AGALMiniAssembler().assemble("part fragment 1\n" + materialPassData.fragmentCode + materialPassData.animationFragmentCode + materialPassData.postAnimationFragmentCode + "endpart"))['fragment'].data; - programData.program.upload(vertexByteCode, fragmentByteCode); - } - //set program data - this.setProgram(programData.program); - }; - ContextGLBase.prototype.deactivateMaterialPass = function (materialPassData, stage) { - var shaderObject = materialPassData.shaderObject; - if (materialPassData.usesAnimation) - materialPassData.material.animationSet.deactivate(shaderObject, stage); - materialPassData.shaderObject.iDeactivate(stage); - this._numUsedStreams = shaderObject.numUsedStreams; - this._numUsedTextures = shaderObject.numUsedTextures; - }; - ContextGLBase.prototype.activateTexture = function (index, textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) { - textureData.texture = this.createTexture(textureProxy.width, textureProxy.height, ContextGLTextureFormat.BGRA, true); - textureData.invalid = true; - } - if (textureData.invalid) { - textureData.invalid = false; - if (textureProxy.generateMipmaps) { - var mipmapData = textureProxy._iGetMipmapData(); - var len = mipmapData.length; - for (var i = 0; i < len; i++) - textureData.texture.uploadFromData(mipmapData[i], i); - } - else { - textureData.texture.uploadFromData(textureProxy._iGetTextureData(), 0); - } - } - this.setTextureAt(index, textureData.texture); - }; - ContextGLBase.prototype.activateCubeTexture = function (index, textureProxy) { - var textureData = this._texturePool.getItem(textureProxy); - if (!textureData.texture) { - textureData.texture = this.createCubeTexture(textureProxy.size, ContextGLTextureFormat.BGRA, false); - textureData.invalid = true; - } - if (textureData.invalid) { - textureData.invalid = false; - for (var i = 0; i < 6; ++i) { - if (textureProxy.generateMipmaps) { - var mipmapData = textureProxy._iGetMipmapData(i); - var len = mipmapData.length; - for (var j = 0; j < len; j++) - textureData.texture.uploadFromData(mipmapData[j], i, j); - } - else { - textureData.texture.uploadFromData(textureProxy._iGetTextureData(i), i, 0); - } - } - } - this.setTextureAt(index, textureData.texture); - }; - /** - * Retrieves the VertexBuffer object that contains triangle indices. - * @param context The ContextWeb for which we request the buffer - * @return The VertexBuffer object that contains triangle indices. - */ - ContextGLBase.prototype.getIndexBuffer = function (buffer) { - if (!buffer.contexts[this._stageIndex]) - buffer.contexts[this._stageIndex] = this; - if (!buffer.buffers[this._stageIndex]) { - buffer.buffers[this._stageIndex] = this.createIndexBuffer(buffer.data.length); - buffer.invalid[this._stageIndex] = true; - } - if (buffer.invalid[this._stageIndex]) { - buffer.buffers[this._stageIndex].uploadFromArray(buffer.data, 0, buffer.data.length); - buffer.invalid[this._stageIndex] = false; - } - return buffer.buffers[this._stageIndex]; - }; - ContextGLBase.prototype.disposeIndexData = function (buffer) { - buffer.buffers[this._stageIndex].dispose(); - buffer.buffers[this._stageIndex] = null; - }; - ContextGLBase.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - }; - ContextGLBase.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - this._width = width; - this._height = height; - }; - ContextGLBase.prototype.createIndexBuffer = function (numIndices) { - throw new AbstractMethodError(); - }; - ContextGLBase.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - throw new AbstractMethodError(); - }; - ContextGLBase.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - throw new AbstractMethodError(); - }; - ContextGLBase.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - throw new AbstractMethodError(); - }; - ContextGLBase.prototype.createProgram = function () { - throw new AbstractMethodError(); - }; - ContextGLBase.prototype.dispose = function () { - }; - ContextGLBase.prototype.present = function () { - }; - ContextGLBase.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - }; - ContextGLBase.prototype.setRenderToBackBuffer = function () { - }; - ContextGLBase.prototype.setScissorRectangle = function (rectangle) { - }; - ContextGLBase.prototype.setTextureAt = function (sampler, texture) { - }; - ContextGLBase.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } - }; - ContextGLBase.prototype.setProgram = function (program) { - }; - ContextGLBase.prototype.registerProgram = function (programData) { - var i = 0; - while (this._programData[i] != null) - i++; - this._programData[i] = programData; - programData.id = i; - }; - ContextGLBase.prototype.unRegisterProgram = function (programData) { - this._programData[programData.id] = null; - programData.id = -1; - }; - /** - * test if animation will be able to run on gpu BEFORE compiling materials - * test if the shader objects supports animating the animation set in the vertex shader - * if any object using this material fails to support accelerated animations for any of the shader objects, - * we should do everything on cpu (otherwise we have the cost of both gpu + cpu animations) - */ - ContextGLBase.prototype.getEnabledGPUAnimation = function (material, materialDataPasses) { - if (material.animationSet) { - material.animationSet.resetGPUCompatibility(); - var owners = material.iOwners; - var numOwners = owners.length; - var len = materialDataPasses.length; - for (var i = 0; i < len; i++) - for (var j = 0; j < numOwners; j++) - if (owners[j].animator) - owners[j].animator.testGPUCompatibility(materialDataPasses[i].shaderObject); - return !material.animationSet.usesCPU; - } - return false; - }; - ContextGLBase.prototype.calcAnimationCode = function (material, materialPassData) { - //reset key so that the program is re-calculated - materialPassData.key = ""; - materialPassData.animationVertexCode = ""; - materialPassData.animationFragmentCode = ""; - var shaderObject = materialPassData.shaderObject; - //check to see if GPU animation is used - if (materialPassData.usesAnimation) { - var animationSet = material.animationSet; - materialPassData.animationVertexCode += animationSet.getAGALVertexCode(shaderObject); - if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) - materialPassData.animationVertexCode += animationSet.getAGALUVCode(shaderObject); - if (shaderObject.usesFragmentAnimation) - materialPassData.animationFragmentCode += animationSet.getAGALFragmentCode(shaderObject, materialPassData.shadedTarget); - animationSet.doneAGALCode(shaderObject); - } - else { - // simply write attributes to targets, do not animate them - // projection will pick up on targets[0] to do the projection - var len = shaderObject.animatableAttributes.length; - for (var i = 0; i < len; ++i) - materialPassData.animationVertexCode += "mov " + shaderObject.animationTargetRegisters[i] + ", " + shaderObject.animatableAttributes[i] + "\n"; - if (shaderObject.uvDependencies > 0 && !shaderObject.usesUVTransform) - materialPassData.animationVertexCode += "mov " + shaderObject.uvTarget + "," + shaderObject.uvSource + "\n"; - } - }; - return ContextGLBase; -})(); -module.exports = ContextGLBase; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsYmFzZS50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xCYXNlIiwiQ29udGV4dEdMQmFzZS5jb25zdHJ1Y3RvciIsIkNvbnRleHRHTEJhc2UuY29udGFpbmVyIiwiQ29udGV4dEdMQmFzZS5zZXRSZW5kZXJUYXJnZXQiLCJDb250ZXh0R0xCYXNlLmdldFJlbmRlclRleHR1cmUiLCJDb250ZXh0R0xCYXNlLmdldFByb2dyYW0iLCJDb250ZXh0R0xCYXNlLmdldE1hdGVyaWFsIiwiQ29udGV4dEdMQmFzZS5hY3RpdmF0ZUJ1ZmZlciIsIkNvbnRleHRHTEJhc2UuZGlzcG9zZVZlcnRleERhdGEiLCJDb250ZXh0R0xCYXNlLmFjdGl2YXRlUmVuZGVyVGV4dHVyZSIsIkNvbnRleHRHTEJhc2UuYWN0aXZhdGVNYXRlcmlhbFBhc3MiLCJDb250ZXh0R0xCYXNlLmRlYWN0aXZhdGVNYXRlcmlhbFBhc3MiLCJDb250ZXh0R0xCYXNlLmFjdGl2YXRlVGV4dHVyZSIsIkNvbnRleHRHTEJhc2UuYWN0aXZhdGVDdWJlVGV4dHVyZSIsIkNvbnRleHRHTEJhc2UuZ2V0SW5kZXhCdWZmZXIiLCJDb250ZXh0R0xCYXNlLmRpc3Bvc2VJbmRleERhdGEiLCJDb250ZXh0R0xCYXNlLmNsZWFyIiwiQ29udGV4dEdMQmFzZS5jb25maWd1cmVCYWNrQnVmZmVyIiwiQ29udGV4dEdMQmFzZS5jcmVhdGVJbmRleEJ1ZmZlciIsIkNvbnRleHRHTEJhc2UuY3JlYXRlVmVydGV4QnVmZmVyIiwiQ29udGV4dEdMQmFzZS5jcmVhdGVUZXh0dXJlIiwiQ29udGV4dEdMQmFzZS5jcmVhdGVDdWJlVGV4dHVyZSIsIkNvbnRleHRHTEJhc2UuY3JlYXRlUHJvZ3JhbSIsIkNvbnRleHRHTEJhc2UuZGlzcG9zZSIsIkNvbnRleHRHTEJhc2UucHJlc2VudCIsIkNvbnRleHRHTEJhc2Uuc2V0UmVuZGVyVG9UZXh0dXJlIiwiQ29udGV4dEdMQmFzZS5zZXRSZW5kZXJUb0JhY2tCdWZmZXIiLCJDb250ZXh0R0xCYXNlLnNldFNjaXNzb3JSZWN0YW5nbGUiLCJDb250ZXh0R0xCYXNlLnNldFRleHR1cmVBdCIsIkNvbnRleHRHTEJhc2Uuc2V0VmVydGV4QnVmZmVyQXQiLCJDb250ZXh0R0xCYXNlLnNldFByb2dyYW0iLCJDb250ZXh0R0xCYXNlLnJlZ2lzdGVyUHJvZ3JhbSIsIkNvbnRleHRHTEJhc2UudW5SZWdpc3RlclByb2dyYW0iLCJDb250ZXh0R0xCYXNlLmdldEVuYWJsZWRHUFVBbmltYXRpb24iLCJDb250ZXh0R0xCYXNlLmNhbGNBbmltYXRpb25Db2RlIl0sIm1hcHBpbmdzIjoiQUFHQSxJQUFPLG1CQUFtQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFFckYsSUFBTyxhQUFhLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQVU1RSxJQUFPLGlCQUFpQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFPN0YsSUFBTyxlQUFlLFdBQWMsOENBQThDLENBQUMsQ0FBQztBQUVwRixJQUFPLGVBQWUsV0FBYyw4Q0FBOEMsQ0FBQyxDQUFDO0FBR3BGLElBQU8sZ0JBQWdCLFdBQWMsK0NBQStDLENBQUMsQ0FBQztBQUV0RixJQUFPLGtCQUFrQixXQUFhLG9EQUFvRCxDQUFDLENBQUM7QUFDNUYsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBVW5HLEFBUUE7Ozs7Ozs7R0FERztJQUNHLGFBQWE7SUE4QmxCQSxTQTlCS0EsYUFBYUEsQ0E4Qk5BLFVBQWlCQTtRQTVCckJDLGlCQUFZQSxHQUFzQkEsSUFBSUEsS0FBS0EsRUFBZUEsQ0FBQ0E7UUFDM0RBLG9CQUFlQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUMzQkEscUJBQWdCQSxHQUFVQSxDQUFDQSxDQUFDQTtRQWFwQ0EsMkdBQTJHQTtRQUVuR0EsZ0JBQVdBLEdBQVVBLENBQUNBLENBQUNBLENBQUNBO1FBQ3hCQSxlQUFVQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUV0QkEsa0JBQWFBLEdBQW9C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QUFZQSxDQUFDQSxDQUFDQTtRQUV6Q0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsQUFFQUEsMERBRjBEQTtZQUMxREEsNkRBQTZEQTtnQkFDekRBLEdBQUdBLEdBQVVBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDMURBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLEVBQUVBLENBQUNBO2dCQUNsQ0EsZ0JBQWdCQSxDQUFDQSxtQkFBbUJBLElBQUlBLE1BQU1BLEdBQUdBLFlBQVlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsR0FBR0EsWUFBWUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUVoSkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7Z0JBQ3BFQSxnQkFBZ0JBLENBQUNBLG1CQUFtQkEsSUFBSUEsTUFBTUEsR0FBR0EsWUFBWUEsQ0FBQ0EsUUFBUUEsR0FBR0EsR0FBR0EsR0FBR0EsWUFBWUEsQ0FBQ0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDOUdBLENBQUNBO0lBQ0ZBLENBQUNBO0lBQ0ZsQyxvQkFBQ0E7QUFBREEsQ0FqY0EsQUFpY0NBLElBQUE7QUFFRCxBQUF1QixpQkFBZCxhQUFhLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRHTEJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdG1hcERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgUmVuZGVyVGV4dHVyZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1JlbmRlclRleHR1cmVcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5pbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5pbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmltcG9ydCBJTWF0ZXJpYWxPd25lclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvSU1hdGVyaWFsT3duZXJcIik7XG5pbXBvcnQgSUNvbnRleHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZGlzcGxheS9JQ29udGV4dFwiKTtcbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEFHQUxNaW5pQXNzZW1ibGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FnbHNsL2Fzc2VtYmxlci9BR0FMTWluaUFzc2VtYmxlclwiKTtcbmltcG9ydCBBbmltYXRvckJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRvckJhc2VcIik7XG5pbXBvcnQgQW5pbWF0aW9uU2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRpb25TZXRCYXNlXCIpO1xuaW1wb3J0IEluZGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL0luZGV4RGF0YVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVBvb2xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sXCIpO1xuaW1wb3J0IFRleHR1cmVEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvVGV4dHVyZURhdGFcIik7XG5pbXBvcnQgVGV4dHVyZURhdGFQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1RleHR1cmVEYXRhUG9vbFwiKTtcbmltcG9ydCBQcm9ncmFtRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1Byb2dyYW1EYXRhXCIpO1xuaW1wb3J0IFByb2dyYW1EYXRhUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9Qcm9ncmFtRGF0YVBvb2xcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhXCIpO1xuaW1wb3J0IE1hdGVyaWFsRGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxEYXRhUG9vbFwiKTtcbmltcG9ydCBWZXJ0ZXhEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvVmVydGV4RGF0YVwiKTtcbmltcG9ydCBDb250ZXh0R0xDbGVhck1hc2tcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENsZWFyTWFza1wiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZvcm1hdFwiKTtcbmltcG9ydCBJQ3ViZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ3ViZVRleHR1cmVcIik7XG5pbXBvcnQgSUluZGV4QnVmZmVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUluZGV4QnVmZmVyXCIpO1xuaW1wb3J0IElQcm9ncmFtXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JUHJvZ3JhbVwiKTtcbmltcG9ydCBJVGV4dHVyZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVRleHR1cmVcIik7XG5pbXBvcnQgSVRleHR1cmVCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVRleHR1cmVCYXNlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVZlcnRleEJ1ZmZlclwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcblxuLyoqXG4gKiBTdGFnZSBwcm92aWRlcyBhIHByb3h5IGNsYXNzIHRvIGhhbmRsZSB0aGUgY3JlYXRpb24gYW5kIGF0dGFjaG1lbnQgb2YgdGhlIENvbnRleHRcbiAqIChhbmQgaW4gdHVybiB0aGUgYmFjayBidWZmZXIpIGl0IHVzZXMuIFN0YWdlIHNob3VsZCBuZXZlciBiZSBjcmVhdGVkIGRpcmVjdGx5LFxuICogYnV0IHJlcXVlc3RlZCB0aHJvdWdoIFN0YWdlTWFuYWdlci5cbiAqXG4gKiBAc2VlIGF3YXkubWFuYWdlcnMuU3RhZ2VNYW5hZ2VyXG4gKlxuICovXG5jbGFzcyBDb250ZXh0R0xCYXNlIGltcGxlbWVudHMgSUNvbnRleHRcbntcblx0cHJpdmF0ZSBfcHJvZ3JhbURhdGE6QXJyYXk8UHJvZ3JhbURhdGE+ID0gbmV3IEFycmF5PFByb2dyYW1EYXRhPigpO1xuXHRwcml2YXRlIF9udW1Vc2VkU3RyZWFtczpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9udW1Vc2VkVGV4dHVyZXM6bnVtYmVyID0gMDtcblxuXHRwdWJsaWMgX3BDb250YWluZXI6SFRNTEVsZW1lbnQ7XG5cblx0cHJpdmF0ZSBfdGV4dHVyZVBvb2w6VGV4dHVyZURhdGFQb29sO1xuXG5cdHByaXZhdGUgX21hdGVyaWFsRGF0YVBvb2w6TWF0ZXJpYWxEYXRhUG9vbDtcblxuXHRwcml2YXRlIF9wcm9ncmFtRGF0YVBvb2w6UHJvZ3JhbURhdGFQb29sO1xuXG5cdHByaXZhdGUgX3dpZHRoOm51bWJlcjtcblx0cHJpdmF0ZSBfaGVpZ2h0Om51bWJlcjtcblxuXHQvL3ByaXZhdGUgc3RhdGljIF9mcmFtZUV2ZW50RHJpdmVyOlNoYXBlID0gbmV3IFNoYXBlKCk7IC8vIFRPRE86IGFkZCBmcmFtZSBkcml2ZXIgLyByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZVxuXG5cdHByaXZhdGUgX3N0YWdlSW5kZXg6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX2FudGlBbGlhczpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9lbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfcmVuZGVyVGFyZ2V0OlRleHR1cmVQcm94eUJhc2UgPSBudWxsO1xuXHRwcml2YXRlIF9yZW5kZXJTdXJmYWNlU2VsZWN0b3I6bnVtYmVyID0gMDtcblxuXHRwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOkhUTUxFbGVtZW50XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcENvbnRhaW5lcjtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHN0YWdlSW5kZXg6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fc3RhZ2VJbmRleCA9IHN0YWdlSW5kZXg7XG5cdFx0dGhpcy5fdGV4dHVyZVBvb2wgPSBuZXcgVGV4dHVyZURhdGFQb29sKHRoaXMpO1xuXHRcdHRoaXMuX21hdGVyaWFsRGF0YVBvb2wgPSBuZXcgTWF0ZXJpYWxEYXRhUG9vbCh0aGlzKTtcblx0XHR0aGlzLl9wcm9ncmFtRGF0YVBvb2wgPSBuZXcgUHJvZ3JhbURhdGFQb29sKHRoaXMpO1xuXHR9XG5cblx0cHVibGljIHNldFJlbmRlclRhcmdldCh0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSBmYWxzZSwgc3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAodGhpcy5fcmVuZGVyVGFyZ2V0ID09PSB0YXJnZXQgJiYgc3VyZmFjZVNlbGVjdG9yID09IHRoaXMuX3JlbmRlclN1cmZhY2VTZWxlY3RvciAmJiB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPT0gZW5hYmxlRGVwdGhBbmRTdGVuY2lsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fcmVuZGVyVGFyZ2V0ID0gdGFyZ2V0O1xuXHRcdHRoaXMuX3JlbmRlclN1cmZhY2VTZWxlY3RvciA9IHN1cmZhY2VTZWxlY3Rvcjtcblx0XHR0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwgPSBlbmFibGVEZXB0aEFuZFN0ZW5jaWw7XG5cdFx0aWYgKHRhcmdldCBpbnN0YW5jZW9mIFJlbmRlclRleHR1cmUpIHtcblx0XHRcdHRoaXMuc2V0UmVuZGVyVG9UZXh0dXJlKHRoaXMuZ2V0UmVuZGVyVGV4dHVyZSg8UmVuZGVyVGV4dHVyZT4gdGFyZ2V0KSwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsLCB0aGlzLl9hbnRpQWxpYXMsIHN1cmZhY2VTZWxlY3Rvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0UmVuZGVyVG9CYWNrQnVmZmVyKCk7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0aGlzLl9lbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRSZW5kZXJUZXh0dXJlKHRleHR1cmVQcm94eTpSZW5kZXJUZXh0dXJlKTpJVGV4dHVyZUJhc2Vcblx0e1xuXHRcdHZhciB0ZXh0dXJlRGF0YTpUZXh0dXJlRGF0YSA9IHRoaXMuX3RleHR1cmVQb29sLmdldEl0ZW0odGV4dHVyZVByb3h5KTtcblxuXHRcdGlmICghdGV4dHVyZURhdGEudGV4dHVyZSlcblx0XHRcdHRleHR1cmVEYXRhLnRleHR1cmUgPSB0aGlzLmNyZWF0ZVRleHR1cmUodGV4dHVyZVByb3h5LndpZHRoLCB0ZXh0dXJlUHJveHkuaGVpZ2h0LCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0LkJHUkEsIHRydWUpO1xuXG5cdFx0cmV0dXJuIHRleHR1cmVEYXRhLnRleHR1cmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvZ3JhbShtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGEpOlByb2dyYW1EYXRhXG5cdHtcblx0XHQvL2NoZWNrIGtleSBkb2Vzbid0IG5lZWQgcmUtY29uY2F0ZW5hdGluZ1xuXHRcdGlmICghbWF0ZXJpYWxQYXNzRGF0YS5rZXkubGVuZ3RoKSB7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmtleSA9IG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uVmVydGV4Q29kZSArXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEudmVydGV4Q29kZSArXG5cdFx0XHRcdFwiLS0tXCIgK1xuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmZyYWdtZW50Q29kZSArXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uRnJhZ21lbnRDb2RlICtcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5wb3N0QW5pbWF0aW9uRnJhZ21lbnRDb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbWF0ZXJpYWxQYXNzRGF0YS5wcm9ncmFtRGF0YTtcblx0XHR9XG5cblx0XHR2YXIgcHJvZ3JhbURhdGE6UHJvZ3JhbURhdGEgPSB0aGlzLl9wcm9ncmFtRGF0YVBvb2wuZ2V0SXRlbShtYXRlcmlhbFBhc3NEYXRhLmtleSk7XG5cblx0XHQvL2NoZWNrIHByb2dyYW0gZGF0YSBoYXNuJ3QgY2hhbmdlZCwga2VlcCBjb3VudCBvZiBwcm9ncmFtIHVzYWdlc1xuXHRcdGlmIChtYXRlcmlhbFBhc3NEYXRhLnByb2dyYW1EYXRhICE9IHByb2dyYW1EYXRhKSB7XG5cdFx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS5wcm9ncmFtRGF0YSlcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5wcm9ncmFtRGF0YS5kaXNwb3NlKCk7XG5cblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEucHJvZ3JhbURhdGEgPSBwcm9ncmFtRGF0YTtcblxuXHRcdFx0cHJvZ3JhbURhdGEudXNhZ2VzKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb2dyYW1EYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbFxuXHQgKi9cblx0cHVibGljIGdldE1hdGVyaWFsKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIHByb2ZpbGU6c3RyaW5nKTpNYXRlcmlhbERhdGFcblx0e1xuXHRcdHZhciBtYXRlcmlhbERhdGE6TWF0ZXJpYWxEYXRhID0gdGhpcy5fbWF0ZXJpYWxEYXRhUG9vbC5nZXRJdGVtKG1hdGVyaWFsKTtcblxuXHRcdGlmIChtYXRlcmlhbERhdGEuaW52YWxpZEFuaW1hdGlvbikge1xuXHRcdFx0bWF0ZXJpYWxEYXRhLmludmFsaWRBbmltYXRpb24gPSBmYWxzZTtcblxuXHRcdFx0dmFyIG1hdGVyaWFsRGF0YVBhc3NlczpBcnJheTxNYXRlcmlhbFBhc3NEYXRhPiA9IG1hdGVyaWFsRGF0YS5nZXRNYXRlcmlhbFBhc3Nlcyhwcm9maWxlKTtcblxuXHRcdFx0dmFyIGVuYWJsZWRHUFVBbmltYXRpb246Ym9vbGVhbiA9IHRoaXMuZ2V0RW5hYmxlZEdQVUFuaW1hdGlvbihtYXRlcmlhbCwgbWF0ZXJpYWxEYXRhUGFzc2VzKTtcblxuXHRcdFx0dmFyIHJlbmRlck9yZGVySWQgPSAwO1xuXHRcdFx0dmFyIG11bHQ6bnVtYmVyID0gMTtcblx0XHRcdHZhciBtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGE7XG5cdFx0XHR2YXIgbGVuOm51bWJlciA9IG1hdGVyaWFsRGF0YVBhc3Nlcy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhID0gbWF0ZXJpYWxEYXRhUGFzc2VzW2ldO1xuXG5cdFx0XHRcdGlmIChtYXRlcmlhbFBhc3NEYXRhLnVzZXNBbmltYXRpb24gIT0gZW5hYmxlZEdQVUFuaW1hdGlvbikge1xuXHRcdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEudXNlc0FuaW1hdGlvbiA9IGVuYWJsZWRHUFVBbmltYXRpb247XG5cdFx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5rZXkgPT0gXCJcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChtYXRlcmlhbFBhc3NEYXRhLmtleSA9PSBcIlwiKVxuXHRcdFx0XHRcdHRoaXMuY2FsY0FuaW1hdGlvbkNvZGUobWF0ZXJpYWwsIG1hdGVyaWFsUGFzc0RhdGEpO1xuXG5cdFx0XHRcdHJlbmRlck9yZGVySWQgKz0gdGhpcy5nZXRQcm9ncmFtKG1hdGVyaWFsUGFzc0RhdGEpLmlkKm11bHQ7XG5cdFx0XHRcdG11bHQgKj0gMTAwMDtcblx0XHRcdH1cblxuXHRcdFx0bWF0ZXJpYWxEYXRhLnJlbmRlck9yZGVySWQgPSByZW5kZXJPcmRlcklkO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXRlcmlhbERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogQXNzaWducyBhbiBhdHRyaWJ1dGUgc3RyZWFtXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgYXR0cmlidXRlIHN0cmVhbSBpbmRleCBmb3IgdGhlIHZlcnRleCBzaGFkZXJcblx0ICogQHBhcmFtIGJ1ZmZlclxuXHQgKiBAcGFyYW0gb2Zmc2V0XG5cdCAqIEBwYXJhbSBzdHJpZGVcblx0ICogQHBhcmFtIGZvcm1hdFxuXHQgKi9cblx0cHVibGljIGFjdGl2YXRlQnVmZmVyKGluZGV4Om51bWJlciwgYnVmZmVyOlZlcnRleERhdGEsIG9mZnNldDpudW1iZXIsIGZvcm1hdDpzdHJpbmcpXG5cdHtcblx0XHRpZiAoIWJ1ZmZlci5jb250ZXh0c1t0aGlzLl9zdGFnZUluZGV4XSlcblx0XHRcdGJ1ZmZlci5jb250ZXh0c1t0aGlzLl9zdGFnZUluZGV4XSA9IHRoaXM7XG5cblx0XHRpZiAoIWJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdKSB7XG5cdFx0XHRidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSA9IHRoaXMuY3JlYXRlVmVydGV4QnVmZmVyKGJ1ZmZlci5kYXRhLmxlbmd0aC9idWZmZXIuZGF0YVBlclZlcnRleCwgYnVmZmVyLmRhdGFQZXJWZXJ0ZXgpO1xuXHRcdFx0YnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChidWZmZXIuaW52YWxpZFt0aGlzLl9zdGFnZUluZGV4XSkge1xuXHRcdFx0YnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0udXBsb2FkRnJvbUFycmF5KGJ1ZmZlci5kYXRhLCAwLCBidWZmZXIuZGF0YS5sZW5ndGgvYnVmZmVyLmRhdGFQZXJWZXJ0ZXgpO1xuXHRcdFx0YnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0gPSBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnNldFZlcnRleEJ1ZmZlckF0KGluZGV4LCBidWZmZXIuYnVmZmVyc1t0aGlzLl9zdGFnZUluZGV4XSwgb2Zmc2V0LCBmb3JtYXQpO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2VWZXJ0ZXhEYXRhKGJ1ZmZlcjpWZXJ0ZXhEYXRhKVxuXHR7XG5cdFx0YnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0uZGlzcG9zZSgpO1xuXHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBhY3RpdmF0ZVJlbmRlclRleHR1cmUoaW5kZXg6bnVtYmVyLCB0ZXh0dXJlUHJveHk6UmVuZGVyVGV4dHVyZSlcblx0e1xuXHRcdHRoaXMuc2V0VGV4dHVyZUF0KGluZGV4LCB0aGlzLmdldFJlbmRlclRleHR1cmUodGV4dHVyZVByb3h5KSk7XG5cdH1cblxuXHRwdWJsaWMgYWN0aXZhdGVNYXRlcmlhbFBhc3MobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdHZhciBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSA9IG1hdGVyaWFsUGFzc0RhdGEuc2hhZGVyT2JqZWN0O1xuXG5cdFx0Ly9jbGVhciB1bnVzZWQgdmVydGV4IHN0cmVhbXNcblx0XHRmb3IgKHZhciBpID0gc2hhZGVyT2JqZWN0Lm51bVVzZWRTdHJlYW1zOyBpIDwgdGhpcy5fbnVtVXNlZFN0cmVhbXM7IGkrKylcblx0XHRcdHRoaXMuc2V0VmVydGV4QnVmZmVyQXQoaSwgbnVsbCk7XG5cblx0XHQvL2NsZWFyIHVudXNlZCB0ZXh0dXJlIHN0cmVhbXNcblx0XHRmb3IgKHZhciBpID0gc2hhZGVyT2JqZWN0Lm51bVVzZWRUZXh0dXJlczsgaSA8IHRoaXMuX251bVVzZWRUZXh0dXJlczsgaSsrKVxuXHRcdFx0dGhpcy5zZXRUZXh0dXJlQXQoaSwgbnVsbCk7XG5cblx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS51c2VzQW5pbWF0aW9uKVxuXHRcdFx0KDxBbmltYXRpb25TZXRCYXNlPiBtYXRlcmlhbFBhc3NEYXRhLm1hdGVyaWFsLmFuaW1hdGlvblNldCkuYWN0aXZhdGUoc2hhZGVyT2JqZWN0LCBzdGFnZSk7XG5cblx0XHQvL2FjdGl2YXRlIHNoYWRlciBvYmplY3Rcblx0XHRzaGFkZXJPYmplY3QuaUFjdGl2YXRlKHN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0Ly9jaGVjayBwcm9ncmFtIGRhdGEgaXMgdXBsb2FkZWRcblx0XHR2YXIgcHJvZ3JhbURhdGE6UHJvZ3JhbURhdGEgPSB0aGlzLmdldFByb2dyYW0obWF0ZXJpYWxQYXNzRGF0YSk7XG5cblx0XHRpZiAoIXByb2dyYW1EYXRhLnByb2dyYW0pIHtcblx0XHRcdHByb2dyYW1EYXRhLnByb2dyYW0gPSB0aGlzLmNyZWF0ZVByb2dyYW0oKTtcblx0XHRcdHZhciB2ZXJ0ZXhCeXRlQ29kZTpCeXRlQXJyYXkgPSAobmV3IEFHQUxNaW5pQXNzZW1ibGVyKCkuYXNzZW1ibGUoXCJwYXJ0IHZlcnRleCAxXFxuXCIgKyBtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgKyBtYXRlcmlhbFBhc3NEYXRhLnZlcnRleENvZGUgKyBcImVuZHBhcnRcIikpWyd2ZXJ0ZXgnXS5kYXRhO1xuXHRcdFx0dmFyIGZyYWdtZW50Qnl0ZUNvZGU6Qnl0ZUFycmF5ID0gKG5ldyBBR0FMTWluaUFzc2VtYmxlcigpLmFzc2VtYmxlKFwicGFydCBmcmFnbWVudCAxXFxuXCIgKyBtYXRlcmlhbFBhc3NEYXRhLmZyYWdtZW50Q29kZSArIG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uRnJhZ21lbnRDb2RlICsgbWF0ZXJpYWxQYXNzRGF0YS5wb3N0QW5pbWF0aW9uRnJhZ21lbnRDb2RlICsgXCJlbmRwYXJ0XCIpKVsnZnJhZ21lbnQnXS5kYXRhO1xuXHRcdFx0cHJvZ3JhbURhdGEucHJvZ3JhbS51cGxvYWQodmVydGV4Qnl0ZUNvZGUsIGZyYWdtZW50Qnl0ZUNvZGUpO1xuXHRcdH1cblxuXHRcdC8vc2V0IHByb2dyYW0gZGF0YVxuXHRcdHRoaXMuc2V0UHJvZ3JhbShwcm9ncmFtRGF0YS5wcm9ncmFtKTtcblx0fVxuXG5cdHB1YmxpYyBkZWFjdGl2YXRlTWF0ZXJpYWxQYXNzKG1hdGVyaWFsUGFzc0RhdGE6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR2YXIgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UgPSBtYXRlcmlhbFBhc3NEYXRhLnNoYWRlck9iamVjdDtcblxuXHRcdGlmIChtYXRlcmlhbFBhc3NEYXRhLnVzZXNBbmltYXRpb24pXG5cdFx0XHQoPEFuaW1hdGlvblNldEJhc2U+IG1hdGVyaWFsUGFzc0RhdGEubWF0ZXJpYWwuYW5pbWF0aW9uU2V0KS5kZWFjdGl2YXRlKHNoYWRlck9iamVjdCwgc3RhZ2UpO1xuXG5cdFx0bWF0ZXJpYWxQYXNzRGF0YS5zaGFkZXJPYmplY3QuaURlYWN0aXZhdGUoc3RhZ2UpO1xuXG5cdFx0dGhpcy5fbnVtVXNlZFN0cmVhbXMgPSBzaGFkZXJPYmplY3QubnVtVXNlZFN0cmVhbXM7XG5cdFx0dGhpcy5fbnVtVXNlZFRleHR1cmVzID0gc2hhZGVyT2JqZWN0Lm51bVVzZWRUZXh0dXJlcztcblx0fVxuXG5cdHB1YmxpYyBhY3RpdmF0ZVRleHR1cmUoaW5kZXg6bnVtYmVyLCB0ZXh0dXJlUHJveHk6VGV4dHVyZTJEQmFzZSlcblx0e1xuXHRcdHZhciB0ZXh0dXJlRGF0YTpUZXh0dXJlRGF0YSA9IDxUZXh0dXJlRGF0YT4gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0SXRlbSh0ZXh0dXJlUHJveHkpO1xuXG5cdFx0aWYgKCF0ZXh0dXJlRGF0YS50ZXh0dXJlKSB7XG5cdFx0XHR0ZXh0dXJlRGF0YS50ZXh0dXJlID0gdGhpcy5jcmVhdGVUZXh0dXJlKHRleHR1cmVQcm94eS53aWR0aCwgdGV4dHVyZVByb3h5LmhlaWdodCwgQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5CR1JBLCB0cnVlKTtcblx0XHRcdHRleHR1cmVEYXRhLmludmFsaWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0ZXh0dXJlRGF0YS5pbnZhbGlkKSB7XG5cdFx0XHR0ZXh0dXJlRGF0YS5pbnZhbGlkID0gZmFsc2U7XG5cdFx0XHRpZiAodGV4dHVyZVByb3h5LmdlbmVyYXRlTWlwbWFwcykge1xuXHRcdFx0XHR2YXIgbWlwbWFwRGF0YTpBcnJheTxCaXRtYXBEYXRhPiA9IHRleHR1cmVQcm94eS5faUdldE1pcG1hcERhdGEoKTtcblx0XHRcdFx0dmFyIGxlbjpudW1iZXIgPSBtaXBtYXBEYXRhLmxlbmd0aDtcblx0XHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspXG5cdFx0XHRcdFx0KDxJVGV4dHVyZT4gdGV4dHVyZURhdGEudGV4dHVyZSkudXBsb2FkRnJvbURhdGEobWlwbWFwRGF0YVtpXSwgaSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoPElUZXh0dXJlPiB0ZXh0dXJlRGF0YS50ZXh0dXJlKS51cGxvYWRGcm9tRGF0YSh0ZXh0dXJlUHJveHkuX2lHZXRUZXh0dXJlRGF0YSgpLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnNldFRleHR1cmVBdChpbmRleCwgdGV4dHVyZURhdGEudGV4dHVyZSk7XG5cdH1cblxuXHRwdWJsaWMgYWN0aXZhdGVDdWJlVGV4dHVyZShpbmRleDpudW1iZXIsIHRleHR1cmVQcm94eTpDdWJlVGV4dHVyZUJhc2UpXG5cdHtcblx0XHR2YXIgdGV4dHVyZURhdGE6VGV4dHVyZURhdGEgPSA8VGV4dHVyZURhdGE+IHRoaXMuX3RleHR1cmVQb29sLmdldEl0ZW0odGV4dHVyZVByb3h5KTtcblxuXHRcdGlmICghdGV4dHVyZURhdGEudGV4dHVyZSkge1xuXHRcdFx0dGV4dHVyZURhdGEudGV4dHVyZSA9IHRoaXMuY3JlYXRlQ3ViZVRleHR1cmUodGV4dHVyZVByb3h5LnNpemUsIENvbnRleHRHTFRleHR1cmVGb3JtYXQuQkdSQSwgZmFsc2UpO1xuXHRcdFx0dGV4dHVyZURhdGEuaW52YWxpZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHR1cmVEYXRhLmludmFsaWQpIHtcblx0XHRcdHRleHR1cmVEYXRhLmludmFsaWQgPSBmYWxzZTtcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IDY7ICsraSkge1xuXHRcdFx0XHRpZiAodGV4dHVyZVByb3h5LmdlbmVyYXRlTWlwbWFwcykge1xuXHRcdFx0XHRcdHZhciBtaXBtYXBEYXRhOkFycmF5PEJpdG1hcERhdGE+ID0gdGV4dHVyZVByb3h5Ll9pR2V0TWlwbWFwRGF0YShpKTtcblx0XHRcdFx0XHR2YXIgbGVuOm51bWJlciA9IG1pcG1hcERhdGEubGVuZ3RoO1xuXHRcdFx0XHRcdGZvciAodmFyIGo6bnVtYmVyID0gMDsgaiA8IGxlbjsgaisrKVxuXHRcdFx0XHRcdFx0KDxJQ3ViZVRleHR1cmU+IHRleHR1cmVEYXRhLnRleHR1cmUpLnVwbG9hZEZyb21EYXRhKG1pcG1hcERhdGFbal0sIGksIGopO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCg8SUN1YmVUZXh0dXJlPiB0ZXh0dXJlRGF0YS50ZXh0dXJlKS51cGxvYWRGcm9tRGF0YSh0ZXh0dXJlUHJveHkuX2lHZXRUZXh0dXJlRGF0YShpKSwgaSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnNldFRleHR1cmVBdChpbmRleCwgdGV4dHVyZURhdGEudGV4dHVyZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBWZXJ0ZXhCdWZmZXIgb2JqZWN0IHRoYXQgY29udGFpbnMgdHJpYW5nbGUgaW5kaWNlcy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHRXZWIgZm9yIHdoaWNoIHdlIHJlcXVlc3QgdGhlIGJ1ZmZlclxuXHQgKiBAcmV0dXJuIFRoZSBWZXJ0ZXhCdWZmZXIgb2JqZWN0IHRoYXQgY29udGFpbnMgdHJpYW5nbGUgaW5kaWNlcy5cblx0ICovXG5cdHB1YmxpYyBnZXRJbmRleEJ1ZmZlcihidWZmZXI6SW5kZXhEYXRhKTpJSW5kZXhCdWZmZXJcblx0e1xuXHRcdGlmICghYnVmZmVyLmNvbnRleHRzW3RoaXMuX3N0YWdlSW5kZXhdKVxuXHRcdFx0YnVmZmVyLmNvbnRleHRzW3RoaXMuX3N0YWdlSW5kZXhdID0gdGhpcztcblxuXHRcdGlmICghYnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0pIHtcblx0XHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdID0gdGhpcy5jcmVhdGVJbmRleEJ1ZmZlcihidWZmZXIuZGF0YS5sZW5ndGgpO1xuXHRcdFx0YnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChidWZmZXIuaW52YWxpZFt0aGlzLl9zdGFnZUluZGV4XSkge1xuXHRcdFx0YnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0udXBsb2FkRnJvbUFycmF5KGJ1ZmZlci5kYXRhLCAwLCBidWZmZXIuZGF0YS5sZW5ndGgpO1xuXHRcdFx0YnVmZmVyLmludmFsaWRbdGhpcy5fc3RhZ2VJbmRleF0gPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF07XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZUluZGV4RGF0YShidWZmZXI6SW5kZXhEYXRhKVxuXHR7XG5cdFx0YnVmZmVyLmJ1ZmZlcnNbdGhpcy5fc3RhZ2VJbmRleF0uZGlzcG9zZSgpO1xuXHRcdGJ1ZmZlci5idWZmZXJzW3RoaXMuX3N0YWdlSW5kZXhdID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBjbGVhcihyZWQ6bnVtYmVyID0gMCwgZ3JlZW46bnVtYmVyID0gMCwgYmx1ZTpudW1iZXIgPSAwLCBhbHBoYTpudW1iZXIgPSAxLCBkZXB0aDpudW1iZXIgPSAxLCBzdGVuY2lsOm51bWJlciA9IDAsIG1hc2s6bnVtYmVyID0gQ29udGV4dEdMQ2xlYXJNYXNrLkFMTClcblx0e1xuXG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlQmFja0J1ZmZlcih3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGFudGlBbGlhczpudW1iZXIsIGVuYWJsZURlcHRoQW5kU3RlbmNpbDpib29sZWFuID0gdHJ1ZSlcblx0e1xuXHRcdHRoaXMuX3dpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUluZGV4QnVmZmVyKG51bUluZGljZXM6bnVtYmVyKTpJSW5kZXhCdWZmZXJcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlVmVydGV4QnVmZmVyKG51bVZlcnRpY2VzOm51bWJlciwgZGF0YTMyUGVyVmVydGV4Om51bWJlcik6SVZlcnRleEJ1ZmZlclxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVUZXh0dXJlKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzOm51bWJlciA9IDApOklUZXh0dXJlXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUN1YmVUZXh0dXJlKHNpemU6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nLCBvcHRpbWl6ZUZvclJlbmRlclRvVGV4dHVyZTpib29sZWFuLCBzdHJlYW1pbmdMZXZlbHM6bnVtYmVyID0gMCk6SUN1YmVUZXh0dXJlXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVByb2dyYW0oKTpJUHJvZ3JhbVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXG5cdH1cblxuXHRwdWJsaWMgcHJlc2VudCgpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHNldFJlbmRlclRvVGV4dHVyZSh0YXJnZXQ6SVRleHR1cmVCYXNlLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbiA9IGZhbHNlLCBhbnRpQWxpYXM6bnVtYmVyID0gMCwgc3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDApXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHNldFJlbmRlclRvQmFja0J1ZmZlcigpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHNldFNjaXNzb3JSZWN0YW5nbGUocmVjdGFuZ2xlOlJlY3RhbmdsZSlcblx0e1xuXG5cdH1cblxuXHRwdWJsaWMgc2V0VGV4dHVyZUF0KHNhbXBsZXI6bnVtYmVyLCB0ZXh0dXJlOklUZXh0dXJlQmFzZSlcblx0e1xuXG5cdH1cblxuXHRwdWJsaWMgc2V0VmVydGV4QnVmZmVyQXQoaW5kZXg6bnVtYmVyLCBidWZmZXI6SVZlcnRleEJ1ZmZlciwgYnVmZmVyT2Zmc2V0Om51bWJlciA9IDAsIGZvcm1hdDpzdHJpbmcgPSBudWxsKVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBzZXRQcm9ncmFtKHByb2dyYW06SVByb2dyYW0pXG5cdHtcblxuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyUHJvZ3JhbShwcm9ncmFtRGF0YTpQcm9ncmFtRGF0YSlcblx0e1xuXHRcdHZhciBpOm51bWJlciA9IDA7XG5cdFx0d2hpbGUgKHRoaXMuX3Byb2dyYW1EYXRhW2ldICE9IG51bGwpXG5cdFx0XHRpKys7XG5cblx0XHR0aGlzLl9wcm9ncmFtRGF0YVtpXSA9IHByb2dyYW1EYXRhO1xuXHRcdHByb2dyYW1EYXRhLmlkID0gaTtcblx0fVxuXG5cdHB1YmxpYyB1blJlZ2lzdGVyUHJvZ3JhbShwcm9ncmFtRGF0YTpQcm9ncmFtRGF0YSlcblx0e1xuXHRcdHRoaXMuX3Byb2dyYW1EYXRhW3Byb2dyYW1EYXRhLmlkXSA9IG51bGw7XG5cdFx0cHJvZ3JhbURhdGEuaWQgPSAtMTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIHRlc3QgaWYgYW5pbWF0aW9uIHdpbGwgYmUgYWJsZSB0byBydW4gb24gZ3B1IEJFRk9SRSBjb21waWxpbmcgbWF0ZXJpYWxzXG5cdCAqIHRlc3QgaWYgdGhlIHNoYWRlciBvYmplY3RzIHN1cHBvcnRzIGFuaW1hdGluZyB0aGUgYW5pbWF0aW9uIHNldCBpbiB0aGUgdmVydGV4IHNoYWRlclxuXHQgKiBpZiBhbnkgb2JqZWN0IHVzaW5nIHRoaXMgbWF0ZXJpYWwgZmFpbHMgdG8gc3VwcG9ydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGZvciBhbnkgb2YgdGhlIHNoYWRlciBvYmplY3RzLFxuXHQgKiB3ZSBzaG91bGQgZG8gZXZlcnl0aGluZyBvbiBjcHUgKG90aGVyd2lzZSB3ZSBoYXZlIHRoZSBjb3N0IG9mIGJvdGggZ3B1ICsgY3B1IGFuaW1hdGlvbnMpXG5cdCAqL1xuXHRwcml2YXRlIGdldEVuYWJsZWRHUFVBbmltYXRpb24obWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSwgbWF0ZXJpYWxEYXRhUGFzc2VzOkFycmF5PE1hdGVyaWFsUGFzc0RhdGE+KTpib29sZWFuXG5cdHtcblx0XHRpZiAobWF0ZXJpYWwuYW5pbWF0aW9uU2V0KSB7XG5cdFx0XHRtYXRlcmlhbC5hbmltYXRpb25TZXQucmVzZXRHUFVDb21wYXRpYmlsaXR5KCk7XG5cblx0XHRcdHZhciBvd25lcnM6QXJyYXk8SU1hdGVyaWFsT3duZXI+ID0gbWF0ZXJpYWwuaU93bmVycztcblx0XHRcdHZhciBudW1Pd25lcnM6bnVtYmVyID0gb3duZXJzLmxlbmd0aDtcblxuXHRcdFx0dmFyIGxlbjpudW1iZXIgPSBtYXRlcmlhbERhdGFQYXNzZXMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspXG5cdFx0XHRcdGZvciAodmFyIGo6bnVtYmVyID0gMDsgaiA8IG51bU93bmVyczsgaisrKVxuXHRcdFx0XHRcdGlmIChvd25lcnNbal0uYW5pbWF0b3IpXG5cdFx0XHRcdFx0XHQoPEFuaW1hdG9yQmFzZT4gb3duZXJzW2pdLmFuaW1hdG9yKS50ZXN0R1BVQ29tcGF0aWJpbGl0eShtYXRlcmlhbERhdGFQYXNzZXNbaV0uc2hhZGVyT2JqZWN0KTtcblxuXHRcdFx0cmV0dXJuICFtYXRlcmlhbC5hbmltYXRpb25TZXQudXNlc0NQVTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgY2FsY0FuaW1hdGlvbkNvZGUobWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSwgbWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKVxuXHR7XG5cdFx0Ly9yZXNldCBrZXkgc28gdGhhdCB0aGUgcHJvZ3JhbSBpcyByZS1jYWxjdWxhdGVkXG5cdFx0bWF0ZXJpYWxQYXNzRGF0YS5rZXkgPSBcIlwiO1xuXHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uVmVydGV4Q29kZSA9IFwiXCI7XG5cdFx0bWF0ZXJpYWxQYXNzRGF0YS5hbmltYXRpb25GcmFnbWVudENvZGUgPSBcIlwiO1xuXG5cdFx0dmFyIHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlID0gbWF0ZXJpYWxQYXNzRGF0YS5zaGFkZXJPYmplY3Q7XG5cblx0XHQvL2NoZWNrIHRvIHNlZSBpZiBHUFUgYW5pbWF0aW9uIGlzIHVzZWRcblx0XHRpZiAobWF0ZXJpYWxQYXNzRGF0YS51c2VzQW5pbWF0aW9uKSB7XG5cblx0XHRcdHZhciBhbmltYXRpb25TZXQ6QW5pbWF0aW9uU2V0QmFzZSA9IDxBbmltYXRpb25TZXRCYXNlPiBtYXRlcmlhbC5hbmltYXRpb25TZXQ7XG5cblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uVmVydGV4Q29kZSArPSBhbmltYXRpb25TZXQuZ2V0QUdBTFZlcnRleENvZGUoc2hhZGVyT2JqZWN0KTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC51dkRlcGVuZGVuY2llcyA+IDAgJiYgIXNoYWRlck9iamVjdC51c2VzVVZUcmFuc2Zvcm0pXG5cdFx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuYW5pbWF0aW9uVmVydGV4Q29kZSArPSBhbmltYXRpb25TZXQuZ2V0QUdBTFVWQ29kZShzaGFkZXJPYmplY3QpO1xuXG5cdFx0XHRpZiAoc2hhZGVyT2JqZWN0LnVzZXNGcmFnbWVudEFuaW1hdGlvbilcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5hbmltYXRpb25GcmFnbWVudENvZGUgKz0gYW5pbWF0aW9uU2V0LmdldEFHQUxGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0LCBtYXRlcmlhbFBhc3NEYXRhLnNoYWRlZFRhcmdldCk7XG5cblx0XHRcdGFuaW1hdGlvblNldC5kb25lQUdBTENvZGUoc2hhZGVyT2JqZWN0KTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBzaW1wbHkgd3JpdGUgYXR0cmlidXRlcyB0byB0YXJnZXRzLCBkbyBub3QgYW5pbWF0ZSB0aGVtXG5cdFx0XHQvLyBwcm9qZWN0aW9uIHdpbGwgcGljayB1cCBvbiB0YXJnZXRzWzBdIHRvIGRvIHRoZSBwcm9qZWN0aW9uXG5cdFx0XHR2YXIgbGVuOm51bWJlciA9IHNoYWRlck9iamVjdC5hbmltYXRhYmxlQXR0cmlidXRlcy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47ICsraSlcblx0XHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5hbmltYXRpb25WZXJ0ZXhDb2RlICs9IFwibW92IFwiICsgc2hhZGVyT2JqZWN0LmFuaW1hdGlvblRhcmdldFJlZ2lzdGVyc1tpXSArIFwiLCBcIiArIHNoYWRlck9iamVjdC5hbmltYXRhYmxlQXR0cmlidXRlc1tpXSArIFwiXFxuXCI7XG5cblx0XHRcdGlmIChzaGFkZXJPYmplY3QudXZEZXBlbmRlbmNpZXMgPiAwICYmICFzaGFkZXJPYmplY3QudXNlc1VWVHJhbnNmb3JtKVxuXHRcdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmFuaW1hdGlvblZlcnRleENvZGUgKz0gXCJtb3YgXCIgKyBzaGFkZXJPYmplY3QudXZUYXJnZXQgKyBcIixcIiArIHNoYWRlck9iamVjdC51dlNvdXJjZSArIFwiXFxuXCI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTEJhc2U7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLBlendFactor.js b/lib/core/stagegl/ContextGLBlendFactor.js deleted file mode 100755 index 4200d952..00000000 --- a/lib/core/stagegl/ContextGLBlendFactor.js +++ /dev/null @@ -1,18 +0,0 @@ -var ContextGLBlendFactor = (function () { - function ContextGLBlendFactor() { - } - ContextGLBlendFactor.DESTINATION_ALPHA = "destinationAlpha"; - ContextGLBlendFactor.DESTINATION_COLOR = "destinationColor"; - ContextGLBlendFactor.ONE = "one"; - ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA = "oneMinusDestinationAlpha"; - ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR = "oneMinusDestinationColor"; - ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA = "oneMinusSourceAlpha"; - ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR = "oneMinusSourceColor"; - ContextGLBlendFactor.SOURCE_ALPHA = "sourceAlpha"; - ContextGLBlendFactor.SOURCE_COLOR = "sourceColor"; - ContextGLBlendFactor.ZERO = "zero"; - return ContextGLBlendFactor; -})(); -module.exports = ContextGLBlendFactor; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsYmxlbmRmYWN0b3IudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMQmxlbmRGYWN0b3IiLCJDb250ZXh0R0xCbGVuZEZhY3Rvci5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxvQkFBb0I7SUFBMUJBLFNBQU1BLG9CQUFvQkE7SUFZMUJDLENBQUNBO0lBVmNELHNDQUFpQkEsR0FBVUEsa0JBQWtCQSxDQUFDQTtJQUM5Q0Esc0NBQWlCQSxHQUFVQSxrQkFBa0JBLENBQUNBO0lBQzlDQSx3QkFBR0EsR0FBVUEsS0FBS0EsQ0FBQ0E7SUFDbkJBLGdEQUEyQkEsR0FBVUEsMEJBQTBCQSxDQUFDQTtJQUNoRUEsZ0RBQTJCQSxHQUFVQSwwQkFBMEJBLENBQUNBO0lBQ2hFQSwyQ0FBc0JBLEdBQVVBLHFCQUFxQkEsQ0FBQ0E7SUFDdERBLDJDQUFzQkEsR0FBVUEscUJBQXFCQSxDQUFDQTtJQUN0REEsaUNBQVlBLEdBQVVBLGFBQWFBLENBQUNBO0lBQ3BDQSxpQ0FBWUEsR0FBVUEsYUFBYUEsQ0FBQ0E7SUFDcENBLHlCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUNwQ0EsMkJBQUNBO0FBQURBLENBWkEsQUFZQ0EsSUFBQTtBQUVELEFBQThCLGlCQUFyQixvQkFBb0IsQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmxlbmRGYWN0b3IuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMQmxlbmRGYWN0b3Jcbntcblx0cHVibGljIHN0YXRpYyBERVNUSU5BVElPTl9BTFBIQTpzdHJpbmcgPSBcImRlc3RpbmF0aW9uQWxwaGFcIjtcblx0cHVibGljIHN0YXRpYyBERVNUSU5BVElPTl9DT0xPUjpzdHJpbmcgPSBcImRlc3RpbmF0aW9uQ29sb3JcIjtcblx0cHVibGljIHN0YXRpYyBPTkU6c3RyaW5nID0gXCJvbmVcIjtcblx0cHVibGljIHN0YXRpYyBPTkVfTUlOVVNfREVTVElOQVRJT05fQUxQSEE6c3RyaW5nID0gXCJvbmVNaW51c0Rlc3RpbmF0aW9uQWxwaGFcIjtcblx0cHVibGljIHN0YXRpYyBPTkVfTUlOVVNfREVTVElOQVRJT05fQ09MT1I6c3RyaW5nID0gXCJvbmVNaW51c0Rlc3RpbmF0aW9uQ29sb3JcIjtcblx0cHVibGljIHN0YXRpYyBPTkVfTUlOVVNfU09VUkNFX0FMUEhBOnN0cmluZyA9IFwib25lTWludXNTb3VyY2VBbHBoYVwiO1xuXHRwdWJsaWMgc3RhdGljIE9ORV9NSU5VU19TT1VSQ0VfQ09MT1I6c3RyaW5nID0gXCJvbmVNaW51c1NvdXJjZUNvbG9yXCI7XG5cdHB1YmxpYyBzdGF0aWMgU09VUkNFX0FMUEhBOnN0cmluZyA9IFwic291cmNlQWxwaGFcIjtcblx0cHVibGljIHN0YXRpYyBTT1VSQ0VfQ09MT1I6c3RyaW5nID0gXCJzb3VyY2VDb2xvclwiO1xuXHRwdWJsaWMgc3RhdGljIFpFUk86c3RyaW5nID0gXCJ6ZXJvXCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTEJsZW5kRmFjdG9yOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLClearMask.js b/lib/core/stagegl/ContextGLClearMask.js deleted file mode 100755 index 96f30bf3..00000000 --- a/lib/core/stagegl/ContextGLClearMask.js +++ /dev/null @@ -1,12 +0,0 @@ -var ContextGLClearMask = (function () { - function ContextGLClearMask() { - } - ContextGLClearMask.COLOR = 1; - ContextGLClearMask.DEPTH = 2; - ContextGLClearMask.STENCIL = 4; - ContextGLClearMask.ALL = ContextGLClearMask.COLOR | ContextGLClearMask.DEPTH | ContextGLClearMask.STENCIL; - return ContextGLClearMask; -})(); -module.exports = ContextGLClearMask; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsY2xlYXJtYXNrLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTENsZWFyTWFzayIsIkNvbnRleHRHTENsZWFyTWFzay5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxrQkFBa0I7SUFBeEJBLFNBQU1BLGtCQUFrQkE7SUFNeEJDLENBQUNBO0lBSk9ELHdCQUFLQSxHQUFVQSxDQUFDQSxDQUFDQTtJQUNqQkEsd0JBQUtBLEdBQVVBLENBQUNBLENBQUNBO0lBQ2pCQSwwQkFBT0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7SUFDbkJBLHNCQUFHQSxHQUFVQSxrQkFBa0JBLENBQUNBLEtBQUtBLEdBQUdBLGtCQUFrQkEsQ0FBQ0EsS0FBS0EsR0FBR0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxDQUFDQTtJQUN0R0EseUJBQUNBO0FBQURBLENBTkEsQUFNQ0EsSUFBQTtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvQ29udGV4dEdMQ2xlYXJNYXNrLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTENsZWFyTWFza1xue1xuXHRzdGF0aWMgQ09MT1I6bnVtYmVyID0gMTtcblx0c3RhdGljIERFUFRIOm51bWJlciA9IDI7XG5cdHN0YXRpYyBTVEVOQ0lMOm51bWJlciA9IDQ7XG5cdHN0YXRpYyBBTEw6bnVtYmVyID0gQ29udGV4dEdMQ2xlYXJNYXNrLkNPTE9SIHwgQ29udGV4dEdMQ2xlYXJNYXNrLkRFUFRIIHwgQ29udGV4dEdMQ2xlYXJNYXNrLlNURU5DSUw7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTENsZWFyTWFzazsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLCompareMode.js b/lib/core/stagegl/ContextGLCompareMode.js deleted file mode 100755 index 1f816416..00000000 --- a/lib/core/stagegl/ContextGLCompareMode.js +++ /dev/null @@ -1,16 +0,0 @@ -var ContextGLCompareMode = (function () { - function ContextGLCompareMode() { - } - ContextGLCompareMode.ALWAYS = "always"; - ContextGLCompareMode.EQUAL = "equal"; - ContextGLCompareMode.GREATER = "greater"; - ContextGLCompareMode.GREATER_EQUAL = "greaterEqual"; - ContextGLCompareMode.LESS = "less"; - ContextGLCompareMode.LESS_EQUAL = "lessEqual"; - ContextGLCompareMode.NEVER = "never"; - ContextGLCompareMode.NOT_EQUAL = "notEqual"; - return ContextGLCompareMode; -})(); -module.exports = ContextGLCompareMode; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsY29tcGFyZW1vZGUudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMQ29tcGFyZU1vZGUiLCJDb250ZXh0R0xDb21wYXJlTW9kZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxvQkFBb0I7SUFBMUJBLFNBQU1BLG9CQUFvQkE7SUFVMUJDLENBQUNBO0lBUmNELDJCQUFNQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUN6QkEsMEJBQUtBLEdBQVVBLE9BQU9BLENBQUNBO0lBQ3ZCQSw0QkFBT0EsR0FBVUEsU0FBU0EsQ0FBQ0E7SUFDM0JBLGtDQUFhQSxHQUFVQSxjQUFjQSxDQUFDQTtJQUN0Q0EseUJBQUlBLEdBQVVBLE1BQU1BLENBQUNBO0lBQ3JCQSwrQkFBVUEsR0FBVUEsV0FBV0EsQ0FBQ0E7SUFDaENBLDBCQUFLQSxHQUFVQSxPQUFPQSxDQUFDQTtJQUN2QkEsOEJBQVNBLEdBQVVBLFVBQVVBLENBQUNBO0lBQzdDQSwyQkFBQ0E7QUFBREEsQ0FWQSxBQVVDQSxJQUFBO0FBRUQsQUFBOEIsaUJBQXJCLG9CQUFvQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xDb21wYXJlTW9kZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xDb21wYXJlTW9kZVxue1xuXHRwdWJsaWMgc3RhdGljIEFMV0FZUzpzdHJpbmcgPSBcImFsd2F5c1wiO1xuXHRwdWJsaWMgc3RhdGljIEVRVUFMOnN0cmluZyA9IFwiZXF1YWxcIjtcblx0cHVibGljIHN0YXRpYyBHUkVBVEVSOnN0cmluZyA9IFwiZ3JlYXRlclwiO1xuXHRwdWJsaWMgc3RhdGljIEdSRUFURVJfRVFVQUw6c3RyaW5nID0gXCJncmVhdGVyRXF1YWxcIjtcblx0cHVibGljIHN0YXRpYyBMRVNTOnN0cmluZyA9IFwibGVzc1wiO1xuXHRwdWJsaWMgc3RhdGljIExFU1NfRVFVQUw6c3RyaW5nID0gXCJsZXNzRXF1YWxcIjtcblx0cHVibGljIHN0YXRpYyBORVZFUjpzdHJpbmcgPSBcIm5ldmVyXCI7XG5cdHB1YmxpYyBzdGF0aWMgTk9UX0VRVUFMOnN0cmluZyA9IFwibm90RXF1YWxcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMQ29tcGFyZU1vZGU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLMipFilter.js b/lib/core/stagegl/ContextGLMipFilter.js deleted file mode 100755 index f5bbf9fc..00000000 --- a/lib/core/stagegl/ContextGLMipFilter.js +++ /dev/null @@ -1,11 +0,0 @@ -var ContextGLMipFilter = (function () { - function ContextGLMipFilter() { - } - ContextGLMipFilter.MIPLINEAR = "miplinear"; - ContextGLMipFilter.MIPNEAREST = "mipnearest"; - ContextGLMipFilter.MIPNONE = "mipnone"; - return ContextGLMipFilter; -})(); -module.exports = ContextGLMipFilter; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsbWlwZmlsdGVyLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTE1pcEZpbHRlciIsIkNvbnRleHRHTE1pcEZpbHRlci5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxrQkFBa0I7SUFBeEJBLFNBQU1BLGtCQUFrQkE7SUFLeEJDLENBQUNBO0lBSGNELDRCQUFTQSxHQUFVQSxXQUFXQSxDQUFDQTtJQUMvQkEsNkJBQVVBLEdBQVVBLFlBQVlBLENBQUNBO0lBQ2pDQSwwQkFBT0EsR0FBVUEsU0FBU0EsQ0FBQ0E7SUFDMUNBLHlCQUFDQTtBQUFEQSxDQUxBLEFBS0NBLElBQUE7QUFFRCxBQUE0QixpQkFBbkIsa0JBQWtCLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRHTE1pcEZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xNaXBGaWx0ZXJcbntcblx0cHVibGljIHN0YXRpYyBNSVBMSU5FQVI6c3RyaW5nID0gXCJtaXBsaW5lYXJcIjtcblx0cHVibGljIHN0YXRpYyBNSVBORUFSRVNUOnN0cmluZyA9IFwibWlwbmVhcmVzdFwiO1xuXHRwdWJsaWMgc3RhdGljIE1JUE5PTkU6c3RyaW5nID0gXCJtaXBub25lXCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTE1pcEZpbHRlcjsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLProfile.js b/lib/core/stagegl/ContextGLProfile.js deleted file mode 100755 index f37dbf92..00000000 --- a/lib/core/stagegl/ContextGLProfile.js +++ /dev/null @@ -1,11 +0,0 @@ -var ContextGLProfile = (function () { - function ContextGLProfile() { - } - ContextGLProfile.BASELINE = "baseline"; - ContextGLProfile.BASELINE_CONSTRAINED = "baselineConstrained"; - ContextGLProfile.BASELINE_EXTENDED = "baselineExtended"; - return ContextGLProfile; -})(); -module.exports = ContextGLProfile; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdscHJvZmlsZS50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xQcm9maWxlIiwiQ29udGV4dEdMUHJvZmlsZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxnQkFBZ0I7SUFBdEJBLFNBQU1BLGdCQUFnQkE7SUFLdEJDLENBQUNBO0lBSGNELHlCQUFRQSxHQUFVQSxVQUFVQSxDQUFDQTtJQUM3QkEscUNBQW9CQSxHQUFVQSxxQkFBcUJBLENBQUNBO0lBQ3BEQSxrQ0FBaUJBLEdBQVVBLGtCQUFrQkEsQ0FBQ0E7SUFDN0RBLHVCQUFDQTtBQUFEQSxDQUxBLEFBS0NBLElBQUE7QUFDRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRHTFByb2ZpbGUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMUHJvZmlsZVxue1xuXHRwdWJsaWMgc3RhdGljIEJBU0VMSU5FOnN0cmluZyA9IFwiYmFzZWxpbmVcIjtcblx0cHVibGljIHN0YXRpYyBCQVNFTElORV9DT05TVFJBSU5FRDpzdHJpbmcgPSBcImJhc2VsaW5lQ29uc3RyYWluZWRcIjtcblx0cHVibGljIHN0YXRpYyBCQVNFTElORV9FWFRFTkRFRDpzdHJpbmcgPSBcImJhc2VsaW5lRXh0ZW5kZWRcIjtcbn1cbmV4cG9ydCA9IENvbnRleHRHTFByb2ZpbGU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLProgramType.js b/lib/core/stagegl/ContextGLProgramType.js deleted file mode 100755 index 1b410e1e..00000000 --- a/lib/core/stagegl/ContextGLProgramType.js +++ /dev/null @@ -1,10 +0,0 @@ -var ContextGLProgramType = (function () { - function ContextGLProgramType() { - } - ContextGLProgramType.FRAGMENT = "fragment"; - ContextGLProgramType.VERTEX = "vertex"; - return ContextGLProgramType; -})(); -module.exports = ContextGLProgramType; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdscHJvZ3JhbXR5cGUudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMUHJvZ3JhbVR5cGUiLCJDb250ZXh0R0xQcm9ncmFtVHlwZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxvQkFBb0I7SUFBMUJBLFNBQU1BLG9CQUFvQkE7SUFJMUJDLENBQUNBO0lBRk9ELDZCQUFRQSxHQUFVQSxVQUFVQSxDQUFDQTtJQUM3QkEsMkJBQU1BLEdBQVVBLFFBQVFBLENBQUNBO0lBQ2pDQSwyQkFBQ0E7QUFBREEsQ0FKQSxBQUlDQSxJQUFBO0FBRUQsQUFBOEIsaUJBQXJCLG9CQUFvQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xQcm9ncmFtVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xQcm9ncmFtVHlwZVxue1xuXHRzdGF0aWMgRlJBR01FTlQ6c3RyaW5nID0gXCJmcmFnbWVudFwiO1xuXHRzdGF0aWMgVkVSVEVYOnN0cmluZyA9IFwidmVydGV4XCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFByb2dyYW1UeXBlOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLStencilAction.js b/lib/core/stagegl/ContextGLStencilAction.js deleted file mode 100755 index 88982c2f..00000000 --- a/lib/core/stagegl/ContextGLStencilAction.js +++ /dev/null @@ -1,16 +0,0 @@ -var ContextGLStencilAction = (function () { - function ContextGLStencilAction() { - } - ContextGLStencilAction.DECREMENT_SATURATE = "decrementSaturate"; - ContextGLStencilAction.DECREMENT_WRAP = "decrementWrap"; - ContextGLStencilAction.INCREMENT_SATURATE = "incrementSaturate"; - ContextGLStencilAction.INCREMENT_WRAP = "incrementWrap"; - ContextGLStencilAction.INVERT = "invert"; - ContextGLStencilAction.KEEP = "keep"; - ContextGLStencilAction.SET = "set"; - ContextGLStencilAction.ZERO = "zero"; - return ContextGLStencilAction; -})(); -module.exports = ContextGLStencilAction; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsc3RlbmNpbGFjdGlvbi50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xTdGVuY2lsQWN0aW9uIiwiQ29udGV4dEdMU3RlbmNpbEFjdGlvbi5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxzQkFBc0I7SUFBNUJBLFNBQU1BLHNCQUFzQkE7SUFVNUJDLENBQUNBO0lBUmNELHlDQUFrQkEsR0FBVUEsbUJBQW1CQSxDQUFDQTtJQUNoREEscUNBQWNBLEdBQVVBLGVBQWVBLENBQUNBO0lBQ3hDQSx5Q0FBa0JBLEdBQVVBLG1CQUFtQkEsQ0FBQ0E7SUFDaERBLHFDQUFjQSxHQUFVQSxlQUFlQSxDQUFDQTtJQUN4Q0EsNkJBQU1BLEdBQVVBLFFBQVFBLENBQUNBO0lBQ3pCQSwyQkFBSUEsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFDckJBLDBCQUFHQSxHQUFVQSxLQUFLQSxDQUFDQTtJQUNuQkEsMkJBQUlBLEdBQVVBLE1BQU1BLENBQUNBO0lBQ3BDQSw2QkFBQ0E7QUFBREEsQ0FWQSxBQVVDQSxJQUFBO0FBRUQsQUFBZ0MsaUJBQXZCLHNCQUFzQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xTdGVuY2lsQWN0aW9uLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTFN0ZW5jaWxBY3Rpb25cbntcblx0cHVibGljIHN0YXRpYyBERUNSRU1FTlRfU0FUVVJBVEU6c3RyaW5nID0gXCJkZWNyZW1lbnRTYXR1cmF0ZVwiO1xuXHRwdWJsaWMgc3RhdGljIERFQ1JFTUVOVF9XUkFQOnN0cmluZyA9IFwiZGVjcmVtZW50V3JhcFwiO1xuXHRwdWJsaWMgc3RhdGljIElOQ1JFTUVOVF9TQVRVUkFURTpzdHJpbmcgPSBcImluY3JlbWVudFNhdHVyYXRlXCI7XG5cdHB1YmxpYyBzdGF0aWMgSU5DUkVNRU5UX1dSQVA6c3RyaW5nID0gXCJpbmNyZW1lbnRXcmFwXCI7XG5cdHB1YmxpYyBzdGF0aWMgSU5WRVJUOnN0cmluZyA9IFwiaW52ZXJ0XCI7XG5cdHB1YmxpYyBzdGF0aWMgS0VFUDpzdHJpbmcgPSBcImtlZXBcIjtcblx0cHVibGljIHN0YXRpYyBTRVQ6c3RyaW5nID0gXCJzZXRcIjtcblx0cHVibGljIHN0YXRpYyBaRVJPOnN0cmluZyA9IFwiemVyb1wiO1xufVxuXG5leHBvcnQgPSBDb250ZXh0R0xTdGVuY2lsQWN0aW9uOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTextureFilter.js b/lib/core/stagegl/ContextGLTextureFilter.js deleted file mode 100755 index d1d36b01..00000000 --- a/lib/core/stagegl/ContextGLTextureFilter.js +++ /dev/null @@ -1,10 +0,0 @@ -var ContextGLTextureFilter = (function () { - function ContextGLTextureFilter() { - } - ContextGLTextureFilter.LINEAR = "linear"; - ContextGLTextureFilter.NEAREST = "nearest"; - return ContextGLTextureFilter; -})(); -module.exports = ContextGLTextureFilter; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsdGV4dHVyZWZpbHRlci50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xUZXh0dXJlRmlsdGVyIiwiQ29udGV4dEdMVGV4dHVyZUZpbHRlci5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxzQkFBc0I7SUFBNUJBLFNBQU1BLHNCQUFzQkE7SUFJNUJDLENBQUNBO0lBRmNELDZCQUFNQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUN6QkEsOEJBQU9BLEdBQVVBLFNBQVNBLENBQUNBO0lBQzFDQSw2QkFBQ0E7QUFBREEsQ0FKQSxBQUlDQSxJQUFBO0FBRUQsQUFBZ0MsaUJBQXZCLHNCQUFzQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xUZXh0dXJlRmlsdGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTFRleHR1cmVGaWx0ZXJcbntcblx0cHVibGljIHN0YXRpYyBMSU5FQVI6c3RyaW5nID0gXCJsaW5lYXJcIjtcblx0cHVibGljIHN0YXRpYyBORUFSRVNUOnN0cmluZyA9IFwibmVhcmVzdFwiO1xufVxuXG5leHBvcnQgPSBDb250ZXh0R0xUZXh0dXJlRmlsdGVyOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTextureFormat.js b/lib/core/stagegl/ContextGLTextureFormat.js deleted file mode 100755 index 44687fc2..00000000 --- a/lib/core/stagegl/ContextGLTextureFormat.js +++ /dev/null @@ -1,13 +0,0 @@ -var ContextGLTextureFormat = (function () { - function ContextGLTextureFormat() { - } - ContextGLTextureFormat.BGRA = "bgra"; - ContextGLTextureFormat.BGRA_PACKED = "bgraPacked4444"; - ContextGLTextureFormat.BGR_PACKED = "bgrPacked565"; - ContextGLTextureFormat.COMPRESSED = "compressed"; - ContextGLTextureFormat.COMPRESSED_ALPHA = "compressedAlpha"; - return ContextGLTextureFormat; -})(); -module.exports = ContextGLTextureFormat; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsdGV4dHVyZWZvcm1hdC50cyJdLCJuYW1lcyI6WyJDb250ZXh0R0xUZXh0dXJlRm9ybWF0IiwiQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxzQkFBc0I7SUFBNUJBLFNBQU1BLHNCQUFzQkE7SUFPNUJDLENBQUNBO0lBTE9ELDJCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUNyQkEsa0NBQVdBLEdBQVVBLGdCQUFnQkEsQ0FBQ0E7SUFDdENBLGlDQUFVQSxHQUFVQSxjQUFjQSxDQUFDQTtJQUNuQ0EsaUNBQVVBLEdBQVVBLFlBQVlBLENBQUNBO0lBQ2pDQSx1Q0FBZ0JBLEdBQVVBLGlCQUFpQkEsQ0FBQ0E7SUFDcERBLDZCQUFDQTtBQUFEQSxDQVBBLEFBT0NBLElBQUE7QUFFRCxBQUFnQyxpQkFBdkIsc0JBQXNCLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRHTFRleHR1cmVGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMVGV4dHVyZUZvcm1hdFxue1xuXHRzdGF0aWMgQkdSQTpzdHJpbmcgPSBcImJncmFcIjtcblx0c3RhdGljIEJHUkFfUEFDS0VEOnN0cmluZyA9IFwiYmdyYVBhY2tlZDQ0NDRcIjtcblx0c3RhdGljIEJHUl9QQUNLRUQ6c3RyaW5nID0gXCJiZ3JQYWNrZWQ1NjVcIjtcblx0c3RhdGljIENPTVBSRVNTRUQ6c3RyaW5nID0gXCJjb21wcmVzc2VkXCI7XG5cdHN0YXRpYyBDT01QUkVTU0VEX0FMUEhBOnN0cmluZyA9IFwiY29tcHJlc3NlZEFscGhhXCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFRleHR1cmVGb3JtYXQ7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLTriangleFace.js b/lib/core/stagegl/ContextGLTriangleFace.js deleted file mode 100755 index 9baccf47..00000000 --- a/lib/core/stagegl/ContextGLTriangleFace.js +++ /dev/null @@ -1,12 +0,0 @@ -var ContextGLTriangleFace = (function () { - function ContextGLTriangleFace() { - } - ContextGLTriangleFace.BACK = "back"; - ContextGLTriangleFace.FRONT = "front"; - ContextGLTriangleFace.FRONT_AND_BACK = "frontAndBack"; - ContextGLTriangleFace.NONE = "none"; - return ContextGLTriangleFace; -})(); -module.exports = ContextGLTriangleFace; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsdHJpYW5nbGVmYWNlLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTFRyaWFuZ2xlRmFjZSIsIkNvbnRleHRHTFRyaWFuZ2xlRmFjZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxxQkFBcUI7SUFBM0JBLFNBQU1BLHFCQUFxQkE7SUFNM0JDLENBQUNBO0lBSk9ELDBCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUNyQkEsMkJBQUtBLEdBQVVBLE9BQU9BLENBQUNBO0lBQ3ZCQSxvQ0FBY0EsR0FBVUEsY0FBY0EsQ0FBQ0E7SUFDdkNBLDBCQUFJQSxHQUFVQSxNQUFNQSxDQUFDQTtJQUM3QkEsNEJBQUNBO0FBQURBLENBTkEsQUFNQ0EsSUFBQTtBQUVELEFBQStCLGlCQUF0QixxQkFBcUIsQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvQ29udGV4dEdMVHJpYW5nbGVGYWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIENvbnRleHRHTFRyaWFuZ2xlRmFjZVxue1xuXHRzdGF0aWMgQkFDSzpzdHJpbmcgPSBcImJhY2tcIjtcblx0c3RhdGljIEZST05UOnN0cmluZyA9IFwiZnJvbnRcIjtcblx0c3RhdGljIEZST05UX0FORF9CQUNLOnN0cmluZyA9IFwiZnJvbnRBbmRCYWNrXCI7XG5cdHN0YXRpYyBOT05FOnN0cmluZyA9IFwibm9uZVwiO1xufVxuXG5leHBvcnQgPSBDb250ZXh0R0xUcmlhbmdsZUZhY2U7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLVertexBufferFormat.js b/lib/core/stagegl/ContextGLVertexBufferFormat.js deleted file mode 100755 index f51c6949..00000000 --- a/lib/core/stagegl/ContextGLVertexBufferFormat.js +++ /dev/null @@ -1,13 +0,0 @@ -var ContextGLVertexBufferFormat = (function () { - function ContextGLVertexBufferFormat() { - } - ContextGLVertexBufferFormat.BYTES_4 = "bytes4"; - ContextGLVertexBufferFormat.FLOAT_1 = "float1"; - ContextGLVertexBufferFormat.FLOAT_2 = "float2"; - ContextGLVertexBufferFormat.FLOAT_3 = "float3"; - ContextGLVertexBufferFormat.FLOAT_4 = "float4"; - return ContextGLVertexBufferFormat; -})(); -module.exports = ContextGLVertexBufferFormat; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsdmVydGV4YnVmZmVyZm9ybWF0LnRzIl0sIm5hbWVzIjpbIkNvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdCIsIkNvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSwyQkFBMkI7SUFBakNBLFNBQU1BLDJCQUEyQkE7SUFPakNDLENBQUNBO0lBTE9ELG1DQUFPQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUMxQkEsbUNBQU9BLEdBQVVBLFFBQVFBLENBQUNBO0lBQzFCQSxtQ0FBT0EsR0FBVUEsUUFBUUEsQ0FBQ0E7SUFDMUJBLG1DQUFPQSxHQUFVQSxRQUFRQSxDQUFDQTtJQUMxQkEsbUNBQU9BLEdBQVVBLFFBQVFBLENBQUNBO0lBQ2xDQSxrQ0FBQ0E7QUFBREEsQ0FQQSxBQU9DQSxJQUFBO0FBRUQsQUFBcUMsaUJBQTVCLDJCQUEyQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XG57XG5cdHN0YXRpYyBCWVRFU180OnN0cmluZyA9IFwiYnl0ZXM0XCI7XG5cdHN0YXRpYyBGTE9BVF8xOnN0cmluZyA9IFwiZmxvYXQxXCI7XG5cdHN0YXRpYyBGTE9BVF8yOnN0cmluZyA9IFwiZmxvYXQyXCI7XG5cdHN0YXRpYyBGTE9BVF8zOnN0cmluZyA9IFwiZmxvYXQzXCI7XG5cdHN0YXRpYyBGTE9BVF80OnN0cmluZyA9IFwiZmxvYXQ0XCI7XG59XG5cbmV4cG9ydCA9IENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ContextGLWrapMode.js b/lib/core/stagegl/ContextGLWrapMode.js deleted file mode 100755 index 65017373..00000000 --- a/lib/core/stagegl/ContextGLWrapMode.js +++ /dev/null @@ -1,10 +0,0 @@ -var ContextGLWrapMode = (function () { - function ContextGLWrapMode() { - } - ContextGLWrapMode.CLAMP = "clamp"; - ContextGLWrapMode.REPEAT = "repeat"; - return ContextGLWrapMode; -})(); -module.exports = ContextGLWrapMode; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dGdsd3JhcG1vZGUudHMiXSwibmFtZXMiOlsiQ29udGV4dEdMV3JhcE1vZGUiLCJDb250ZXh0R0xXcmFwTW9kZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxpQkFBaUI7SUFBdkJBLFNBQU1BLGlCQUFpQkE7SUFJdkJDLENBQUNBO0lBRmNELHVCQUFLQSxHQUFVQSxPQUFPQSxDQUFDQTtJQUN2QkEsd0JBQU1BLEdBQVVBLFFBQVFBLENBQUNBO0lBQ3hDQSx3QkFBQ0E7QUFBREEsQ0FKQSxBQUlDQSxJQUFBO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Db250ZXh0R0xXcmFwTW9kZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBDb250ZXh0R0xXcmFwTW9kZVxue1xuXHRwdWJsaWMgc3RhdGljIENMQU1QOnN0cmluZyA9IFwiY2xhbXBcIjtcblx0cHVibGljIHN0YXRpYyBSRVBFQVQ6c3RyaW5nID0gXCJyZXBlYXRcIjtcbn1cblxuZXhwb3J0ID0gQ29udGV4dEdMV3JhcE1vZGU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextStage3D.js b/lib/core/stagegl/ContextStage3D.js deleted file mode 100755 index a12baab3..00000000 --- a/lib/core/stagegl/ContextStage3D.js +++ /dev/null @@ -1,333 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var swfobject = require("awayjs-stagegl/lib/swfobject"); -var Sampler = require("awayjs-stagegl/lib/aglsl/Sampler"); -var ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var CubeTextureFlash = require("awayjs-stagegl/lib/core/stagegl/CubeTextureFlash"); -var IndexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/IndexBufferFlash"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ProgramFlash = require("awayjs-stagegl/lib/core/stagegl/ProgramFlash"); -var TextureFlash = require("awayjs-stagegl/lib/core/stagegl/TextureFlash"); -var VertexBufferFlash = require("awayjs-stagegl/lib/core/stagegl/VertexBufferFlash"); -var ContextStage3D = (function (_super) { - __extends(ContextStage3D, _super); - //TODO: get rid of hack that fixes including definition file - function ContextStage3D(container, stageIndex, callback, include) { - _super.call(this, stageIndex); - this._cmdStream = ""; - this._resources = new Array(); - var swfVersionStr = "11.0.0"; - // To use express install, set to playerProductInstall.swf, otherwise the empty string. - var flashvars = { - id: container.id - }; - var params = { - quality: "high", - bgcolor: "#ffffff", - allowscriptaccess: "sameDomain", - allowfullscreen: "true", - wmode: "direct" - }; - this._errorCheckingEnabled = false; - this._iDriverInfo = "Unknown"; - var attributes = { - salign: "tl", - id: container.id, - name: container["name"] //TODO: needed? - }; - this._oldCanvas = container.cloneNode(); // keep the old one to restore on dispose - this._oldParent = container.parentNode; - var context3dObj = this; - ContextStage3D.contexts[container.id] = this; - function callbackSWFObject(callbackInfo) { - if (!callbackInfo.success) - return; - context3dObj._pContainer = callbackInfo.ref; - context3dObj._iCallback = callback; - } - swfobject.embedSWF("../libs/molehill_js_flashbridge.swf", container.id, String(container.width), String(container.height), swfVersionStr, "", flashvars, params, attributes, callbackSWFObject); - } - Object.defineProperty(ContextStage3D.prototype, "container", { - get: function () { - return this._pContainer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ContextStage3D.prototype, "driverInfo", { - get: function () { - return this._iDriverInfo; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ContextStage3D.prototype, "errorCheckingEnabled", { - get: function () { - return this._errorCheckingEnabled; - }, - set: function (value) { - if (this._errorCheckingEnabled == value) - return; - this._errorCheckingEnabled = value; - this.addStream(String.fromCharCode(OpCodes.enableErrorChecking, value ? OpCodes.trueValue : OpCodes.falseValue)); - this.execute(); - }, - enumerable: true, - configurable: true - }); - ContextStage3D.prototype._iAddResource = function (resource) { - this._resources.push(resource); - }; - ContextStage3D.prototype._iRemoveResource = function (resource) { - this._resources.splice(this._resources.indexOf(resource)); - }; - ContextStage3D.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO:streaming - return new TextureFlash(this, width, height, format, optimizeForRenderToTexture); - }; - ContextStage3D.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO:streaming - return new CubeTextureFlash(this, size, format, optimizeForRenderToTexture); - }; - ContextStage3D.prototype.setTextureAt = function (sampler, texture) { - if (texture) { - this.addStream(String.fromCharCode(OpCodes.setTextureAt) + sampler + "," + texture.id + ","); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearTextureAt) + sampler.toString() + ","); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { - //nothing to do here - }; - ContextStage3D.prototype.setStencilActions = function (triangleFace, compareMode, actionOnBothPass, actionOnDepthFail, actionOnDepthPassStencilFail) { - if (triangleFace === void 0) { triangleFace = "frontAndBack"; } - if (compareMode === void 0) { compareMode = "always"; } - if (actionOnBothPass === void 0) { actionOnBothPass = "keep"; } - if (actionOnDepthFail === void 0) { actionOnDepthFail = "keep"; } - if (actionOnDepthPassStencilFail === void 0) { actionOnDepthPassStencilFail = "keep"; } - this.addStream(String.fromCharCode(OpCodes.setStencilActions) + triangleFace + "$" + compareMode + "$" + actionOnBothPass + "$" + actionOnDepthFail + "$" + actionOnDepthPassStencilFail + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setStencilReferenceValue = function (referenceValue, readMask, writeMask) { - if (readMask === void 0) { readMask = 255; } - if (writeMask === void 0) { writeMask = 255; } - this.addStream(String.fromCharCode(OpCodes.setStencilReferenceValue, referenceValue + OpCodes.intMask, readMask + OpCodes.intMask, writeMask + OpCodes.intMask)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { - if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } - //TODO implement coordinateSystem option - this.addStream(String.fromCharCode(OpCodes.setCulling) + triangleFaceToCull + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { - if (firstIndex === void 0) { firstIndex = 0; } - if (numTriangles === void 0) { numTriangles = -1; } - firstIndex = firstIndex || 0; - if (!numTriangles || numTriangles < 0) - numTriangles = indexBuffer.numIndices / 3; - this.addStream(String.fromCharCode(OpCodes.drawTriangles, indexBuffer.id + OpCodes.intMask) + firstIndex + "," + numTriangles + ","); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { - //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); - if (transposedMatrix === void 0) { transposedMatrix = false; } - //TODO remove special case for WebGL matrix calls? - var d = matrix.rawData; - if (transposedMatrix) { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); - } - else { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); - } - }; - ContextStage3D.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { - if (numRegisters === void 0) { numRegisters = -1; } - var startIndex; - var target = (programType == ContextGLProgramType.VERTEX) ? OpCodes.trueValue : OpCodes.falseValue; - for (var i = 0; i < numRegisters; i++) { - startIndex = i * 4; - this.addStream(String.fromCharCode(OpCodes.setProgramConstant, target, (firstRegister + i) + OpCodes.intMask) + data[startIndex] + "," + data[startIndex + 1] + "," + data[startIndex + 2] + "," + data[startIndex + 3] + ","); - if (ContextStage3D.debug) - this.execute(); - } - }; - ContextStage3D.prototype.setProgram = function (program) { - this.addStream(String.fromCharCode(OpCodes.setProgram, program.id + OpCodes.intMask)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.present = function () { - this.addStream(String.fromCharCode(OpCodes.present)); - this.execute(); - }; - ContextStage3D.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - this.addStream(String.fromCharCode(OpCodes.clear) + red + "," + green + "," + blue + "," + alpha + "," + depth + "," + stencil + "," + mask + ","); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.createProgram = function () { - return new ProgramFlash(this); - }; - ContextStage3D.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - return new VertexBufferFlash(this, numVertices, data32PerVertex); - }; - ContextStage3D.prototype.createIndexBuffer = function (numIndices) { - return new IndexBufferFlash(this, numIndices); - }; - ContextStage3D.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); - //TODO: add Anitalias setting - this.addStream(String.fromCharCode(OpCodes.configureBackBuffer) + width + "," + height + ","); - }; - ContextStage3D.prototype.drawToBitmapData = function (destination) { - //TODO - }; - ContextStage3D.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } - if (buffer) { - this.addStream(String.fromCharCode(OpCodes.setVertexBufferAt, index + OpCodes.intMask) + buffer.id + "," + bufferOffset + "," + format + "$"); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearVertexBufferAt, index + OpCodes.intMask)); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setColorMask = function (red, green, blue, alpha) { - this.addStream(String.fromCharCode(OpCodes.setColorMask, red ? OpCodes.trueValue : OpCodes.falseValue, green ? OpCodes.trueValue : OpCodes.falseValue, blue ? OpCodes.trueValue : OpCodes.falseValue, alpha ? OpCodes.trueValue : OpCodes.falseValue)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { - this.addStream(String.fromCharCode(OpCodes.setBlendFactors) + sourceFactor + "$" + destinationFactor + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - if (target === null || target === undefined) { - this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); - } - else { - this.addStream(String.fromCharCode(OpCodes.setRenderToTexture, enableDepthAndStencil ? OpCodes.trueValue : OpCodes.falseValue) + target.id + "," + (antiAlias || 0) + ","); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setRenderToBackBuffer = function () { - this.addStream(String.fromCharCode(OpCodes.clearRenderToTexture)); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setScissorRectangle = function (rectangle) { - if (rectangle) { - this.addStream(String.fromCharCode(OpCodes.setScissorRect) + rectangle.x + "," + rectangle.y + "," + rectangle.width + "," + rectangle.height + ","); - } - else { - this.addStream(String.fromCharCode(OpCodes.clearScissorRect)); - } - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.setDepthTest = function (depthMask, passCompareMode) { - this.addStream(String.fromCharCode(OpCodes.setDepthTest, depthMask ? OpCodes.trueValue : OpCodes.falseValue) + passCompareMode + "$"); - if (ContextStage3D.debug) - this.execute(); - }; - ContextStage3D.prototype.dispose = function () { - if (this._pContainer == null) - return; - console.log("Context3D dispose, releasing " + this._resources.length + " resources."); - while (this._resources.length) - this._resources[0].dispose(); - if (this._pContainer) { - // encode command - this.addStream(String.fromCharCode(OpCodes.disposeContext)); - this.execute(); - swfobject.removeSWF(this._oldCanvas.id); - if (this._oldCanvas && this._oldParent) { - this._oldParent.appendChild(this._oldCanvas); - this._oldParent = null; - } - this._pContainer = null; - } - this._oldCanvas = null; - }; - ContextStage3D.prototype.addStream = function (stream) { - this._cmdStream += stream; - }; - ContextStage3D.prototype.execute = function () { - if (ContextStage3D.logStream) - console.log(this._cmdStream); - var result = this._pContainer["CallFunction"]("" + this._cmdStream + ""); - if (Number(result) <= -3) - throw "Exec stream failed"; - this._cmdStream = ""; - return Number(result); - }; - ContextStage3D.contexts = new Object(); - ContextStage3D.maxvertexconstants = 128; - ContextStage3D.maxfragconstants = 28; - ContextStage3D.maxtemp = 8; - ContextStage3D.maxstreams = 8; - ContextStage3D.maxtextures = 8; - ContextStage3D.defaultsampler = new Sampler(); - ContextStage3D.debug = false; - ContextStage3D.logStream = false; - return ContextStage3D; -})(ContextGLBase); -/** -* global function for flash callback -*/ -function mountain_js_context_available(id, driverInfo) { - var ctx = ContextStage3D.contexts[id]; - if (ctx._iCallback) { - ctx._iDriverInfo = driverInfo; - // get out of the current JS stack frame and call back from flash player - var timeOutId = window.setTimeout(function () { - window.clearTimeout(timeOutId); - try { - ctx._iCallback(ctx); - } - catch (e) { - console.log("Callback failed during flash initialization with '" + e.toString() + "'"); - } - }, 1); - } -} -module.exports = ContextStage3D; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dHN0YWdlM2QudHMiXSwibmFtZXMiOlsiQ29udGV4dFN0YWdlM0QiLCJDb250ZXh0U3RhZ2UzRC5jb25zdHJ1Y3RvciIsIkNvbnRleHRTdGFnZTNELmNvbnN0cnVjdG9yLmNhbGxiYWNrU1dGT2JqZWN0IiwiQ29udGV4dFN0YWdlM0QuY29udGFpbmVyIiwiQ29udGV4dFN0YWdlM0QuZHJpdmVySW5mbyIsIkNvbnRleHRTdGFnZTNELmVycm9yQ2hlY2tpbmdFbmFibGVkIiwiQ29udGV4dFN0YWdlM0QuX2lBZGRSZXNvdXJjZSIsIkNvbnRleHRTdGFnZTNELl9pUmVtb3ZlUmVzb3VyY2UiLCJDb250ZXh0U3RhZ2UzRC5jcmVhdGVUZXh0dXJlIiwiQ29udGV4dFN0YWdlM0QuY3JlYXRlQ3ViZVRleHR1cmUiLCJDb250ZXh0U3RhZ2UzRC5zZXRUZXh0dXJlQXQiLCJDb250ZXh0U3RhZ2UzRC5zZXRTYW1wbGVyU3RhdGVBdCIsIkNvbnRleHRTdGFnZTNELnNldFN0ZW5jaWxBY3Rpb25zIiwiQ29udGV4dFN0YWdlM0Quc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVlIiwiQ29udGV4dFN0YWdlM0Quc2V0Q3VsbGluZyIsIkNvbnRleHRTdGFnZTNELmRyYXdUcmlhbmdsZXMiLCJDb250ZXh0U3RhZ2UzRC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeCIsIkNvbnRleHRTdGFnZTNELnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkiLCJDb250ZXh0U3RhZ2UzRC5zZXRQcm9ncmFtIiwiQ29udGV4dFN0YWdlM0QucHJlc2VudCIsIkNvbnRleHRTdGFnZTNELmNsZWFyIiwiQ29udGV4dFN0YWdlM0QuY3JlYXRlUHJvZ3JhbSIsIkNvbnRleHRTdGFnZTNELmNyZWF0ZVZlcnRleEJ1ZmZlciIsIkNvbnRleHRTdGFnZTNELmNyZWF0ZUluZGV4QnVmZmVyIiwiQ29udGV4dFN0YWdlM0QuY29uZmlndXJlQmFja0J1ZmZlciIsIkNvbnRleHRTdGFnZTNELmRyYXdUb0JpdG1hcERhdGEiLCJDb250ZXh0U3RhZ2UzRC5zZXRWZXJ0ZXhCdWZmZXJBdCIsIkNvbnRleHRTdGFnZTNELnNldENvbG9yTWFzayIsIkNvbnRleHRTdGFnZTNELnNldEJsZW5kRmFjdG9ycyIsIkNvbnRleHRTdGFnZTNELnNldFJlbmRlclRvVGV4dHVyZSIsIkNvbnRleHRTdGFnZTNELnNldFJlbmRlclRvQmFja0J1ZmZlciIsIkNvbnRleHRTdGFnZTNELnNldFNjaXNzb3JSZWN0YW5nbGUiLCJDb250ZXh0U3RhZ2UzRC5zZXREZXB0aFRlc3QiLCJDb250ZXh0U3RhZ2UzRC5kaXNwb3NlIiwiQ29udGV4dFN0YWdlM0QuYWRkU3RyZWFtIiwiQ29udGV4dFN0YWdlM0QuZXhlY3V0ZSIsIm1vdW50YWluX2pzX2NvbnRleHRfYXZhaWxhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFPLFNBQVMsV0FBZSw4QkFBOEIsQ0FBQyxDQUFDO0FBQy9ELElBQU8sT0FBTyxXQUFnQixrQ0FBa0MsQ0FBQyxDQUFDO0FBQ2xFLElBQU8sYUFBYSxXQUFjLCtDQUErQyxDQUFDLENBQUM7QUFDbkYsSUFBTyxrQkFBa0IsV0FBYSxvREFBb0QsQ0FBQyxDQUFDO0FBQzVGLElBQU8sb0JBQW9CLFdBQWEsc0RBQXNELENBQUMsQ0FBQztBQUNoRyxJQUFPLGdCQUFnQixXQUFjLGtEQUFrRCxDQUFDLENBQUM7QUFFekYsSUFBTyxnQkFBZ0IsV0FBYyxrREFBa0QsQ0FBQyxDQUFDO0FBQ3pGLElBQU8sT0FBTyxXQUFnQix5Q0FBeUMsQ0FBQyxDQUFDO0FBQ3pFLElBQU8sWUFBWSxXQUFlLDhDQUE4QyxDQUFDLENBQUM7QUFDbEYsSUFBTyxZQUFZLFdBQWUsOENBQThDLENBQUMsQ0FBQztBQUVsRixJQUFPLGlCQUFpQixXQUFhLG1EQUFtRCxDQUFDLENBQUM7QUFFMUYsSUFBTSxjQUFjO0lBQVNBLFVBQXZCQSxjQUFjQSxVQUFzQkE7SUFrRHpDQSw0REFBNERB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O1FBSS9IQSxBQUNBQSxrREFEa0RBO1lBQzlDQSxDQUFDQSxHQUFZQSxNQUFNQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUNoQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUN0QkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM5RkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNwR0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM3RkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNqR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFD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Q0EsUUFBUUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7SUFDckRBLEVBQUVBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1FBQ3BCQSxHQUFHQSxDQUFDQSxZQUFZQSxHQUFHQSxVQUFVQSxDQUFDQTtRQUM5QkEsQUFDQUEsd0VBRHdFQTtZQUNwRUEsU0FBU0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7WUFFakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQixJQUFBLENBQUM7Z0JBQ0EsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFFO1lBQUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVQsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0YsQ0FBQyxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNQQSxDQUFDQTtBQUNGQSxDQUFDQTtBQXJCRCxpQkFBUyxjQUFjLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRTdGFnZTNELmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuXG5pbXBvcnQgc3dmb2JqZWN0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9zd2ZvYmplY3RcIik7XG5pbXBvcnQgU2FtcGxlclx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9hZ2xzbC9TYW1wbGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDbGVhck1hc2tcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENsZWFyTWFza1wiKTtcbmltcG9ydCBDb250ZXh0R0xQcm9ncmFtVHlwZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMUHJvZ3JhbVR5cGVcIik7XG5pbXBvcnQgQ3ViZVRleHR1cmVGbGFzaFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9DdWJlVGV4dHVyZUZsYXNoXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgSW5kZXhCdWZmZXJGbGFzaFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JbmRleEJ1ZmZlckZsYXNoXCIpO1xuaW1wb3J0IE9wQ29kZXNcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL09wQ29kZXNcIik7XG5pbXBvcnQgUHJvZ3JhbUZsYXNoXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvUHJvZ3JhbUZsYXNoXCIpO1xuaW1wb3J0IFRleHR1cmVGbGFzaFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1RleHR1cmVGbGFzaFwiKTtcbmltcG9ydCBSZXNvdXJjZUJhc2VGbGFzaFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5pbXBvcnQgVmVydGV4QnVmZmVyRmxhc2hcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1ZlcnRleEJ1ZmZlckZsYXNoXCIpO1xuXG5jbGFzcyBDb250ZXh0U3RhZ2UzRCBleHRlbmRzIENvbnRleHRHTEJhc2UgaW1wbGVtZW50cyBJQ29udGV4dFN0YWdlR0xcbntcblx0cHVibGljIHN0YXRpYyBjb250ZXh0czpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHB1YmxpYyBzdGF0aWMgbWF4dmVydGV4Y29uc3RhbnRzOm51bWJlciA9IDEyODtcblx0cHVibGljIHN0YXRpYyBtYXhmcmFnY29uc3RhbnRzOm51bWJlciA9IDI4O1xuXHRwdWJsaWMgc3RhdGljIG1heHRlbXA6bnVtYmVyID0gODtcblx0cHVibGljIHN0YXRpYyBtYXhzdHJlYW1zOm51bWJlciA9IDg7XG5cdHB1YmxpYyBzdGF0aWMgbWF4dGV4dHVyZXM6bnVtYmVyID0gODtcblx0cHVibGljIHN0YXRpYyBkZWZhdWx0c2FtcGxlciA9IG5ldyBTYW1wbGVyKCk7XG5cblx0cHVibGljIF9pRHJpdmVySW5mbztcblxuXHRwcml2YXRlIF9jbWRTdHJlYW06c3RyaW5nID0gXCJcIjtcblx0cHJpdmF0ZSBfZXJyb3JDaGVja2luZ0VuYWJsZWQ6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfcmVzb3VyY2VzOkFycmF5PFJlc291cmNlQmFzZUZsYXNoPjtcblx0cHJpdmF0ZSBfb2xkQ2FudmFzOkhUTUxDYW52YXNFbGVtZW50O1xuXHRwcml2YXRlIF9vbGRQYXJlbnQ6SFRNTEVsZW1lbnQ7XG5cblxuXHRwdWJsaWMgc3RhdGljIGRlYnVnOmJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIHN0YXRpYyBsb2dTdHJlYW06Ym9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyBfaUNhbGxiYWNrOihjb250ZXh0OklDb250ZXh0U3RhZ2VHTCkgPT4gdm9pZDtcblxuXHRwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOkhUTUxFbGVtZW50XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcENvbnRhaW5lcjtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZHJpdmVySW5mbygpXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faURyaXZlckluZm87XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGVycm9yQ2hlY2tpbmdFbmFibGVkKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2Vycm9yQ2hlY2tpbmdFbmFibGVkO1xuXHR9XG5cblx0cHVibGljIHNldCBlcnJvckNoZWNraW5nRW5hYmxlZCh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2Vycm9yQ2hlY2tpbmdFbmFibGVkID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZXJyb3JDaGVja2luZ0VuYWJsZWQgPSB2YWx1ZTtcblxuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5lbmFibGVFcnJvckNoZWNraW5nLCB2YWx1ZT8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpKTtcblx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdC8vVE9ETzogZ2V0IHJpZCBvZiBoYWNrIHRoYXQgZml4ZXMgaW5jbHVkaW5nIGRlZmluaXRpb24gZmlsZVxuXHRjb25zdHJ1Y3Rvcihjb250YWluZXI6SFRNTENhbnZhc0VsZW1lbnQsIHN0YWdlSW5kZXg6bnVtYmVyLCBjYWxsYmFjazooY29udGV4dDpJQ29udGV4dFN0YWdlR0wpID0+IHZvaWQsIGluY2x1ZGU/OlNhbXBsZXIpXG5cdHtcblx0XHRzdXBlcihzdGFnZUluZGV4KTtcblxuXHRcdHRoaXMuX3Jlc291cmNlcyA9IG5ldyBBcnJheTxSZXNvdXJjZUJhc2VGbGFzaD4oKTtcblxuXHRcdHZhciBzd2ZWZXJzaW9uU3RyID0gXCIxMS4wLjBcIjtcblxuXHRcdC8vIFRvIHVzZSBleHByZXNzIGluc3RhbGwsIHNldCB0byBwbGF5ZXJQcm9kdWN0SW5zdGFsbC5zd2YsIG90aGVyd2lzZSB0aGUgZW1wdHkgc3RyaW5nLlxuXHRcdHZhciBmbGFzaHZhcnMgPSB7XG5cdFx0XHRpZDpjb250YWluZXIuaWRcblx0XHR9O1xuXG5cdFx0dmFyIHBhcmFtcyA9IHtcblx0XHRcdHF1YWxpdHk6XCJoaWdoXCIsXG5cdFx0XHRiZ2NvbG9yOlwiI2ZmZmZmZlwiLFxuXHRcdFx0YWxsb3dzY3JpcHRhY2Nlc3M6XCJzYW1lRG9tYWluXCIsXG5cdFx0XHRhbGxvd2Z1bGxzY3JlZW46XCJ0cnVlXCIsXG5cdFx0XHR3bW9kZTpcImRpcmVjdFwiXG5cdFx0fTtcblxuXHRcdHRoaXMuX2Vycm9yQ2hlY2tpbmdFbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5faURyaXZlckluZm8gPSBcIlVua25vd25cIjtcblxuXHRcdHZhciBhdHRyaWJ1dGVzID0ge1xuXHRcdFx0c2FsaWduOlwidGxcIixcblx0XHRcdGlkOmNvbnRhaW5lci5pZCxcblx0XHRcdG5hbWU6Y29udGFpbmVyW1wibmFtZVwiXSAvL1RPRE86IG5lZWRlZD9cblx0XHR9O1xuXG5cdFx0dGhpcy5fb2xkQ2FudmFzID0gPEhUTUxDYW52YXNFbGVtZW50PiBjb250YWluZXIuY2xvbmVOb2RlKCk7IC8vIGtlZXAgdGhlIG9sZCBvbmUgdG8gcmVzdG9yZSBvbiBkaXNwb3NlXG5cdFx0dGhpcy5fb2xkUGFyZW50ID0gPEhUTUxFbGVtZW50PiBjb250YWluZXIucGFyZW50Tm9kZTtcblxuXHRcdHZhciBjb250ZXh0M2RPYmogPSB0aGlzO1xuXHRcdENvbnRleHRTdGFnZTNELmNvbnRleHRzW2NvbnRhaW5lci5pZF0gPSB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gY2FsbGJhY2tTV0ZPYmplY3QoY2FsbGJhY2tJbmZvKVxuXHRcdHtcblx0XHRcdGlmICghY2FsbGJhY2tJbmZvLnN1Y2Nlc3MpXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0Y29udGV4dDNkT2JqLl9wQ29udGFpbmVyID0gY2FsbGJhY2tJbmZvLnJlZjtcblx0XHRcdGNvbnRleHQzZE9iai5faUNhbGxiYWNrID0gY2FsbGJhY2s7XG5cdFx0fVxuXG5cdFx0c3dmb2JqZWN0LmVtYmVkU1dGKFwiLi4vbGlicy9tb2xlaGlsbF9qc19mbGFzaGJyaWRnZS5zd2ZcIiwgY29udGFpbmVyLmlkLCBTdHJpbmcoY29udGFpbmVyLndpZHRoKSwgU3RyaW5nKGNvbnRhaW5lci5oZWlnaHQpLCBzd2ZWZXJzaW9uU3RyLCBcIlwiLCBmbGFzaHZhcnMsIHBhcmFtcywgYXR0cmlidXRlcywgY2FsbGJhY2tTV0ZPYmplY3QpO1xuXHR9XG5cblx0cHVibGljIF9pQWRkUmVzb3VyY2UocmVzb3VyY2U6UmVzb3VyY2VCYXNlRmxhc2gpXG5cdHtcblx0XHR0aGlzLl9yZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG5cdH1cblxuXHRwdWJsaWMgX2lSZW1vdmVSZXNvdXJjZShyZXNvdXJjZTpSZXNvdXJjZUJhc2VGbGFzaClcblx0e1xuXHRcdHRoaXMuX3Jlc291cmNlcy5zcGxpY2UodGhpcy5fcmVzb3VyY2VzLmluZGV4T2YocmVzb3VyY2UpKTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVUZXh0dXJlKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzOm51bWJlciA9IDApOlRleHR1cmVGbGFzaFxuXHR7XG5cdFx0Ly9UT0RPOnN0cmVhbWluZ1xuXHRcdHJldHVybiBuZXcgVGV4dHVyZUZsYXNoKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmUpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUN1YmVUZXh0dXJlKHNpemU6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nLCBvcHRpbWl6ZUZvclJlbmRlclRvVGV4dHVyZTpib29sZWFuLCBzdHJlYW1pbmdMZXZlbHM6bnVtYmVyID0gMCk6Q3ViZVRleHR1cmVGbGFzaFxuXHR7XG5cdFx0Ly9UT0RPOnN0cmVhbWluZ1xuXHRcdHJldHVybiBuZXcgQ3ViZVRleHR1cmVGbGFzaCh0aGlzLCBzaXplLCBmb3JtYXQsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlKTtcblx0fVxuXG5cblx0cHVibGljIHNldFRleHR1cmVBdChzYW1wbGVyOm51bWJlciwgdGV4dHVyZTpSZXNvdXJjZUJhc2VGbGFzaClcblx0e1xuXHRcdGlmICh0ZXh0dXJlKSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0VGV4dHVyZUF0KSArIHNhbXBsZXIgKyBcIixcIiArIHRleHR1cmUuaWQgKyBcIixcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5jbGVhclRleHR1cmVBdCkgKyBzYW1wbGVyLnRvU3RyaW5nKCkgKyBcIixcIik7XG5cdFx0fVxuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2FtcGxlclN0YXRlQXQoc2FtcGxlcjpudW1iZXIsIHdyYXA6c3RyaW5nLCBmaWx0ZXI6c3RyaW5nLCBtaXBmaWx0ZXI6c3RyaW5nKTp2b2lkXG5cdHtcblx0XHQvL25vdGhpbmcgdG8gZG8gaGVyZVxuXHR9XG5cblx0cHVibGljIHNldFN0ZW5jaWxBY3Rpb25zKHRyaWFuZ2xlRmFjZTpzdHJpbmcgPSBcImZyb250QW5kQmFja1wiLCBjb21wYXJlTW9kZTpzdHJpbmcgPSBcImFsd2F5c1wiLCBhY3Rpb25PbkJvdGhQYXNzOnN0cmluZyA9IFwia2VlcFwiLCBhY3Rpb25PbkRlcHRoRmFpbDpzdHJpbmcgPSBcImtlZXBcIiwgYWN0aW9uT25EZXB0aFBhc3NTdGVuY2lsRmFpbDpzdHJpbmcgPSBcImtlZXBcIilcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRTdGVuY2lsQWN0aW9ucykgKyB0cmlhbmdsZUZhY2UgKyBcIiRcIiArIGNvbXBhcmVNb2RlICsgXCIkXCIgKyBhY3Rpb25PbkJvdGhQYXNzICsgXCIkXCIgKyBhY3Rpb25PbkRlcHRoRmFpbCArIFwiJFwiICsgYWN0aW9uT25EZXB0aFBhc3NTdGVuY2lsRmFpbCArIFwiJFwiKTtcblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZShyZWZlcmVuY2VWYWx1ZTpudW1iZXIsIHJlYWRNYXNrOm51bWJlciA9IDI1NSwgd3JpdGVNYXNrOm51bWJlciA9IDI1NSlcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRTdGVuY2lsUmVmZXJlbmNlVmFsdWUsIHJlZmVyZW5jZVZhbHVlICsgT3BDb2Rlcy5pbnRNYXNrLCByZWFkTWFzayArIE9wQ29kZXMuaW50TWFzaywgd3JpdGVNYXNrICsgT3BDb2Rlcy5pbnRNYXNrKSk7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDdWxsaW5nKHRyaWFuZ2xlRmFjZVRvQ3VsbDpzdHJpbmcsIGNvb3JkaW5hdGVTeXN0ZW06c3RyaW5nID0gXCJsZWZ0SGFuZGVkXCIpXG5cdHtcblx0XHQvL1RPRE8gaW1wbGVtZW50IGNvb3JkaW5hdGVTeXN0ZW0gb3B0aW9uXG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldEN1bGxpbmcpICsgdHJpYW5nbGVGYWNlVG9DdWxsICsgXCIkXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZHJhd1RyaWFuZ2xlcyhpbmRleEJ1ZmZlcjpJbmRleEJ1ZmZlckZsYXNoLCBmaXJzdEluZGV4Om51bWJlciA9IDAsIG51bVRyaWFuZ2xlczpudW1iZXIgPSAtMSlcblx0e1xuXHRcdGZpcnN0SW5kZXggPSBmaXJzdEluZGV4IHx8IDA7XG5cdFx0aWYgKCFudW1UcmlhbmdsZXMgfHwgbnVtVHJpYW5nbGVzIDwgMClcblx0XHRcdG51bVRyaWFuZ2xlcyA9IGluZGV4QnVmZmVyLm51bUluZGljZXMvMztcblxuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5kcmF3VHJpYW5nbGVzLCBpbmRleEJ1ZmZlci5pZCArIE9wQ29kZXMuaW50TWFzaykgKyBmaXJzdEluZGV4ICsgXCIsXCIgKyBudW1UcmlhbmdsZXMgKyBcIixcIik7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChwcm9ncmFtVHlwZTpzdHJpbmcsIGZpcnN0UmVnaXN0ZXI6bnVtYmVyLCBtYXRyaXg6TWF0cml4M0QsIHRyYW5zcG9zZWRNYXRyaXg6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0Ly90aGlzLl9nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuX2dsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9jdXJyZW50UHJvZ3JhbS5nbFByb2dyYW0sIHRoaXMuX3VuaWZvcm1Mb2NhdGlvbk5hbWVEaWN0aW9uYXJ5W3Byb2dyYW1UeXBlXSksICF0cmFuc3Bvc2VkTWF0cml4LCBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeC5yYXdEYXRhKSk7XG5cblx0XHQvL1RPRE8gcmVtb3ZlIHNwZWNpYWwgY2FzZSBmb3IgV2ViR0wgbWF0cml4IGNhbGxzP1xuXHRcdHZhciBkOm51bWJlcltdID0gbWF0cml4LnJhd0RhdGE7XG5cdFx0aWYgKHRyYW5zcG9zZWRNYXRyaXgpIHtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciwgWyBkWzBdLCBkWzRdLCBkWzhdLCBkWzEyXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDEsIFsgZFsxXSwgZFs1XSwgZFs5XSwgZFsxM10gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAyLCBbIGRbMl0sIGRbNl0sIGRbMTBdLCBkWzE0XSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDMsIFsgZFszXSwgZFs3XSwgZFsxMV0sIGRbMTVdIF0sIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIsIFsgZFswXSwgZFsxXSwgZFsyXSwgZFszXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDEsIFsgZFs0XSwgZFs1XSwgZFs2XSwgZFs3XSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDIsIFsgZFs4XSwgZFs5XSwgZFsxMF0sIGRbMTFdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMywgWyBkWzEyXSwgZFsxM10sIGRbMTRdLCBkWzE1XSBdLCAxKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZTpzdHJpbmcsIGZpcnN0UmVnaXN0ZXI6bnVtYmVyLCBkYXRhOm51bWJlcltdLCBudW1SZWdpc3RlcnM6bnVtYmVyID0gLTEpXG5cdHtcblx0XHR2YXIgc3RhcnRJbmRleDpudW1iZXI7XG5cdFx0dmFyIHRhcmdldDpudW1iZXIgPSAocHJvZ3JhbVR5cGUgPT0gQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYKT8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWU7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbnVtUmVnaXN0ZXJzOyBpKyspIHtcblx0XHRcdHN0YXJ0SW5kZXggPSBpKjQ7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0UHJvZ3JhbUNvbnN0YW50LCB0YXJnZXQsIChmaXJzdFJlZ2lzdGVyICsgaSkgKyBPcENvZGVzLmludE1hc2spICsgZGF0YVtzdGFydEluZGV4XSArIFwiLFwiICsgZGF0YVtzdGFydEluZGV4ICsgMV0gKyBcIixcIiArIGRhdGFbc3RhcnRJbmRleCArIDJdICsgXCIsXCIgKyBkYXRhW3N0YXJ0SW5kZXggKyAzXSArIFwiLFwiKTtcblxuXHRcdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0UHJvZ3JhbShwcm9ncmFtOlByb2dyYW1GbGFzaClcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRQcm9ncmFtLCBwcm9ncmFtLmlkICsgT3BDb2Rlcy5pbnRNYXNrKSk7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBwcmVzZW50KClcblx0e1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5wcmVzZW50KSk7XG5cdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIocmVkOm51bWJlciA9IDAsIGdyZWVuOm51bWJlciA9IDAsIGJsdWU6bnVtYmVyID0gMCwgYWxwaGE6bnVtYmVyID0gMSwgZGVwdGg6bnVtYmVyID0gMSwgc3RlbmNpbDpudW1iZXIgPSAwLCBtYXNrOm51bWJlciA9IENvbnRleHRHTENsZWFyTWFzay5BTEwpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuY2xlYXIpICsgcmVkICsgXCIsXCIgKyBncmVlbiArIFwiLFwiICsgYmx1ZSArIFwiLFwiICsgYWxwaGEgKyBcIixcIiArIGRlcHRoICsgXCIsXCIgKyBzdGVuY2lsICsgXCIsXCIgKyBtYXNrICsgXCIsXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlUHJvZ3JhbSgpOlByb2dyYW1GbGFzaFxuXHR7XG5cdFx0cmV0dXJuIG5ldyBQcm9ncmFtRmxhc2godGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlVmVydGV4QnVmZmVyKG51bVZlcnRpY2VzOm51bWJlciwgZGF0YTMyUGVyVmVydGV4Om51bWJlcik6VmVydGV4QnVmZmVyRmxhc2hcblx0e1xuXHRcdHJldHVybiBuZXcgVmVydGV4QnVmZmVyRmxhc2godGhpcywgbnVtVmVydGljZXMsIGRhdGEzMlBlclZlcnRleCk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlSW5kZXhCdWZmZXIobnVtSW5kaWNlczpudW1iZXIpOkluZGV4QnVmZmVyRmxhc2hcblx0e1xuXHRcdHJldHVybiBuZXcgSW5kZXhCdWZmZXJGbGFzaCh0aGlzLCBudW1JbmRpY2VzKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmVCYWNrQnVmZmVyKHdpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlciwgYW50aUFsaWFzOm51bWJlciwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSB0cnVlKVxuXHR7XG5cdFx0c3VwZXIuY29uZmlndXJlQmFja0J1ZmZlcih3aWR0aCwgaGVpZ2h0LCBhbnRpQWxpYXMsIGVuYWJsZURlcHRoQW5kU3RlbmNpbCk7XG5cblx0XHQvL1RPRE86IGFkZCBBbml0YWxpYXMgc2V0dGluZ1xuXHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5jb25maWd1cmVCYWNrQnVmZmVyKSArIHdpZHRoICsgXCIsXCIgKyBoZWlnaHQgKyBcIixcIik7XG5cdH1cblxuXHRwdWJsaWMgZHJhd1RvQml0bWFwRGF0YShkZXN0aW5hdGlvbjpCaXRtYXBEYXRhKVxuXHR7XG5cdFx0Ly9UT0RPXG5cdH1cblxuXHRwdWJsaWMgc2V0VmVydGV4QnVmZmVyQXQoaW5kZXg6bnVtYmVyLCBidWZmZXI6VmVydGV4QnVmZmVyRmxhc2gsIGJ1ZmZlck9mZnNldDpudW1iZXIgPSAwLCBmb3JtYXQ6c3RyaW5nID0gbnVsbClcblx0e1xuXHRcdGlmIChidWZmZXIpIHtcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5zZXRWZXJ0ZXhCdWZmZXJBdCwgaW5kZXggKyBPcENvZGVzLmludE1hc2spICsgYnVmZmVyLmlkICsgXCIsXCIgKyBidWZmZXJPZmZzZXQgKyBcIixcIiArIGZvcm1hdCArIFwiJFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmNsZWFyVmVydGV4QnVmZmVyQXQsIGluZGV4ICsgT3BDb2Rlcy5pbnRNYXNrKSk7XG5cdFx0fVxuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q29sb3JNYXNrKHJlZDpib29sZWFuLCBncmVlbjpib29sZWFuLCBibHVlOmJvb2xlYW4sIGFscGhhOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0Q29sb3JNYXNrLCByZWQ/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlLCBncmVlbj8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUsIGJsdWU/IE9wQ29kZXMudHJ1ZVZhbHVlIDogT3BDb2Rlcy5mYWxzZVZhbHVlLCBhbHBoYT8gT3BDb2Rlcy50cnVlVmFsdWUgOiBPcENvZGVzLmZhbHNlVmFsdWUpKTtcblxuXHRcdGlmIChDb250ZXh0U3RhZ2UzRC5kZWJ1Zylcblx0XHRcdHRoaXMuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIHNldEJsZW5kRmFjdG9ycyhzb3VyY2VGYWN0b3I6c3RyaW5nLCBkZXN0aW5hdGlvbkZhY3RvcjpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0QmxlbmRGYWN0b3JzKSArIHNvdXJjZUZhY3RvciArIFwiJFwiICsgZGVzdGluYXRpb25GYWN0b3IgKyBcIiRcIik7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUb1RleHR1cmUodGFyZ2V0OlJlc291cmNlQmFzZUZsYXNoLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw6Ym9vbGVhbiA9IGZhbHNlLCBhbnRpQWxpYXM6bnVtYmVyID0gMCwgc3VyZmFjZVNlbGVjdG9yOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuY2xlYXJSZW5kZXJUb1RleHR1cmUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldFJlbmRlclRvVGV4dHVyZSwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsPyBPcENvZGVzLnRydWVWYWx1ZSA6IE9wQ29kZXMuZmFsc2VWYWx1ZSkgKyB0YXJnZXQuaWQgKyBcIixcIiArIChhbnRpQWxpYXMgfHwgMCkgKyBcIixcIik7XG5cdFx0fVxuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXG5cdHB1YmxpYyBzZXRSZW5kZXJUb0JhY2tCdWZmZXIoKVxuXHR7XG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmNsZWFyUmVuZGVyVG9UZXh0dXJlKSk7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRTY2lzc29yUmVjdGFuZ2xlKHJlY3RhbmdsZTpSZWN0YW5nbGUpXG5cdHtcblx0XHRpZiAocmVjdGFuZ2xlKSB7XG5cdFx0XHR0aGlzLmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuc2V0U2Npc3NvclJlY3QpICsgcmVjdGFuZ2xlLnggKyBcIixcIiArIHJlY3RhbmdsZS55ICsgXCIsXCIgKyByZWN0YW5nbGUud2lkdGggKyBcIixcIiArIHJlY3RhbmdsZS5oZWlnaHQgKyBcIixcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5jbGVhclNjaXNzb3JSZWN0KSk7XG5cdFx0fVxuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0RGVwdGhUZXN0KGRlcHRoTWFzazpib29sZWFuLCBwYXNzQ29tcGFyZU1vZGU6c3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLnNldERlcHRoVGVzdCwgZGVwdGhNYXNrPyBPcENvZGVzLnRydWVWYWx1ZSA6IE9wQ29kZXMuZmFsc2VWYWx1ZSkgKyBwYXNzQ29tcGFyZU1vZGUgKyBcIiRcIik7XG5cblx0XHRpZiAoQ29udGV4dFN0YWdlM0QuZGVidWcpXG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGlmICh0aGlzLl9wQ29udGFpbmVyID09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zb2xlLmxvZyhcIkNvbnRleHQzRCBkaXNwb3NlLCByZWxlYXNpbmcgXCIgKyB0aGlzLl9yZXNvdXJjZXMubGVuZ3RoICsgXCIgcmVzb3VyY2VzLlwiKTtcblxuXHRcdHdoaWxlICh0aGlzLl9yZXNvdXJjZXMubGVuZ3RoKVxuXHRcdFx0dGhpcy5fcmVzb3VyY2VzWzBdLmRpc3Bvc2UoKTtcblxuXHRcdGlmICh0aGlzLl9wQ29udGFpbmVyKSB7XG5cdFx0XHQvLyBlbmNvZGUgY29tbWFuZFxuXHRcdFx0dGhpcy5hZGRTdHJlYW0oU3RyaW5nLmZyb21DaGFyQ29kZShPcENvZGVzLmRpc3Bvc2VDb250ZXh0KSk7XG5cdFx0XHR0aGlzLmV4ZWN1dGUoKTtcblx0XHRcdHN3Zm9iamVjdC5yZW1vdmVTV0YodGhpcy5fb2xkQ2FudmFzLmlkKTtcblx0XHRcdGlmICh0aGlzLl9vbGRDYW52YXMgJiYgdGhpcy5fb2xkUGFyZW50KSB7XG5cdFx0XHRcdHRoaXMuX29sZFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9vbGRDYW52YXMpO1xuXHRcdFx0XHR0aGlzLl9vbGRQYXJlbnQgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fcENvbnRhaW5lciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb2xkQ2FudmFzID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBhZGRTdHJlYW0oc3RyZWFtOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX2NtZFN0cmVhbSArPSBzdHJlYW07XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZSgpOm51bWJlclxuXHR7XG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmxvZ1N0cmVhbSlcblx0XHRcdGNvbnNvbGUubG9nKHRoaXMuX2NtZFN0cmVhbSk7XG5cblx0XHR2YXIgcmVzdWx0Om51bWJlciA9IHRoaXMuX3BDb250YWluZXJbXCJDYWxsRnVuY3Rpb25cIl0oXCI8aW52b2tlIG5hbWU9XFxcImV4ZWNTdGFnZTNkT3BTdHJlYW1cXFwiIHJldHVybnR5cGU9XFxcImphdmFzY3JpcHRcXFwiPjxhcmd1bWVudHM+PHN0cmluZz5cIiArIHRoaXMuX2NtZFN0cmVhbSArIFwiPC9zdHJpbmc+PC9hcmd1bWVudHM+PC9pbnZva2U+XCIpO1xuXG5cdFx0aWYgKE51bWJlcihyZXN1bHQpIDw9IC0zKVxuXHRcdFx0dGhyb3cgXCJFeGVjIHN0cmVhbSBmYWlsZWRcIjtcblxuXHRcdHRoaXMuX2NtZFN0cmVhbSA9IFwiXCI7XG5cblx0XHRyZXR1cm4gTnVtYmVyKHJlc3VsdCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gQ29udGV4dFN0YWdlM0Q7XG5cbi8qKlxuKiBnbG9iYWwgZnVuY3Rpb24gZm9yIGZsYXNoIGNhbGxiYWNrXG4qL1xuZnVuY3Rpb24gbW91bnRhaW5fanNfY29udGV4dF9hdmFpbGFibGUoaWQsIGRyaXZlckluZm8pXG57XG5cdHZhciBjdHg6Q29udGV4dFN0YWdlM0QgPSBDb250ZXh0U3RhZ2UzRC5jb250ZXh0c1tpZF07XG5cdGlmIChjdHguX2lDYWxsYmFjaykge1xuXHRcdGN0eC5faURyaXZlckluZm8gPSBkcml2ZXJJbmZvO1xuXHRcdC8vIGdldCBvdXQgb2YgdGhlIGN1cnJlbnQgSlMgc3RhY2sgZnJhbWUgYW5kIGNhbGwgYmFjayBmcm9tIGZsYXNoIHBsYXllclxuXHRcdHZhciB0aW1lT3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKVxuXHRcdHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGltZU91dElkKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGN0eC5faUNhbGxiYWNrKGN0eCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQ2FsbGJhY2sgZmFpbGVkIGR1cmluZyBmbGFzaCBpbml0aWFsaXphdGlvbiB3aXRoICdcIiArIGUudG9TdHJpbmcoKSArIFwiJ1wiKTtcblx0XHRcdH1cblx0XHR9LCAxKTtcblx0fVxufVxuIl19 \ No newline at end of file diff --git a/lib/core/stagegl/ContextWebGL.js b/lib/core/stagegl/ContextWebGL.js deleted file mode 100755 index 47262383..00000000 --- a/lib/core/stagegl/ContextWebGL.js +++ /dev/null @@ -1,375 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var Rectangle = require("awayjs-core/lib/geom/Rectangle"); -var ByteArray = require("awayjs-core/lib/utils/ByteArray"); -var ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); -var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -var CubeTextureWebGL = require("awayjs-stagegl/lib/core/stagegl/CubeTextureWebGL"); -var IndexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/IndexBufferWebGL"); -var ProgramWebGL = require("awayjs-stagegl/lib/core/stagegl/ProgramWebGL"); -var TextureWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureWebGL"); -var SamplerState = require("awayjs-stagegl/lib/core/stagegl/SamplerState"); -var VertexBufferWebGL = require("awayjs-stagegl/lib/core/stagegl/VertexBufferWebGL"); -var ContextWebGL = (function (_super) { - __extends(ContextWebGL, _super); - function ContextWebGL(canvas, stageIndex) { - _super.call(this, stageIndex); - this._blendFactorDictionary = new Object(); - this._depthTestDictionary = new Object(); - this._textureIndexDictionary = new Array(8); - this._textureTypeDictionary = new Object(); - this._wrapDictionary = new Object(); - this._filterDictionary = new Object(); - this._mipmapFilterDictionary = new Object(); - this._uniformLocationNameDictionary = new Object(); - this._vertexBufferDimensionDictionary = new Object(); - this._indexBufferList = new Array(); - this._vertexBufferList = new Array(); - this._textureList = new Array(); - this._programList = new Array(); - this._samplerStates = new Array(8); - this._pContainer = canvas; - try { - this._gl = canvas.getContext("experimental-webgl", { premultipliedAlpha: false, alpha: false }); - if (!this._gl) - this._gl = canvas.getContext("webgl", { premultipliedAlpha: false, alpha: false }); - } - catch (e) { - } - if (this._gl) { - //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_SUCCESS ) ); - //setup shortcut dictionaries - this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; - this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_ALPHA] = this._gl.DST_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.DESTINATION_COLOR] = this._gl.DST_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ONE] = this._gl.ONE; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_ALPHA] = this._gl.ONE_MINUS_DST_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_DESTINATION_COLOR] = this._gl.ONE_MINUS_DST_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_ALPHA] = this._gl.ONE_MINUS_SRC_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.ONE_MINUS_SOURCE_COLOR] = this._gl.ONE_MINUS_SRC_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_ALPHA] = this._gl.SRC_ALPHA; - this._blendFactorDictionary[ContextGLBlendFactor.SOURCE_COLOR] = this._gl.SRC_COLOR; - this._blendFactorDictionary[ContextGLBlendFactor.ZERO] = this._gl.ZERO; - this._depthTestDictionary[ContextGLCompareMode.ALWAYS] = this._gl.ALWAYS; - this._depthTestDictionary[ContextGLCompareMode.EQUAL] = this._gl.EQUAL; - this._depthTestDictionary[ContextGLCompareMode.GREATER] = this._gl.GREATER; - this._depthTestDictionary[ContextGLCompareMode.GREATER_EQUAL] = this._gl.GEQUAL; - this._depthTestDictionary[ContextGLCompareMode.LESS] = this._gl.LESS; - this._depthTestDictionary[ContextGLCompareMode.LESS_EQUAL] = this._gl.LEQUAL; - this._depthTestDictionary[ContextGLCompareMode.NEVER] = this._gl.NEVER; - this._depthTestDictionary[ContextGLCompareMode.NOT_EQUAL] = this._gl.NOTEQUAL; - this._textureIndexDictionary[0] = this._gl.TEXTURE0; - this._textureIndexDictionary[1] = this._gl.TEXTURE1; - this._textureIndexDictionary[2] = this._gl.TEXTURE2; - this._textureIndexDictionary[3] = this._gl.TEXTURE3; - this._textureIndexDictionary[4] = this._gl.TEXTURE4; - this._textureIndexDictionary[5] = this._gl.TEXTURE5; - this._textureIndexDictionary[6] = this._gl.TEXTURE6; - this._textureIndexDictionary[7] = this._gl.TEXTURE7; - this._textureTypeDictionary["texture2d"] = this._gl.TEXTURE_2D; - this._textureTypeDictionary["textureCube"] = this._gl.TEXTURE_CUBE_MAP; - this._wrapDictionary[ContextGLWrapMode.REPEAT] = this._gl.REPEAT; - this._wrapDictionary[ContextGLWrapMode.CLAMP] = this._gl.CLAMP_TO_EDGE; - this._filterDictionary[ContextGLTextureFilter.LINEAR] = this._gl.LINEAR; - this._filterDictionary[ContextGLTextureFilter.NEAREST] = this._gl.NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR] = new Object(); - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNEAREST] = this._gl.LINEAR_MIPMAP_NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPLINEAR] = this._gl.LINEAR_MIPMAP_LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.LINEAR][ContextGLMipFilter.MIPNONE] = this._gl.LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST] = new Object(); - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNEAREST] = this._gl.NEAREST_MIPMAP_NEAREST; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPLINEAR] = this._gl.NEAREST_MIPMAP_LINEAR; - this._mipmapFilterDictionary[ContextGLTextureFilter.NEAREST][ContextGLMipFilter.MIPNONE] = this._gl.NEAREST; - this._uniformLocationNameDictionary[ContextGLProgramType.VERTEX] = "vc"; - this._uniformLocationNameDictionary[ContextGLProgramType.FRAGMENT] = "fc"; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_1] = 1; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_2] = 2; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_3] = 3; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.FLOAT_4] = 4; - this._vertexBufferDimensionDictionary[ContextGLVertexBufferFormat.BYTES_4] = 4; - } - else { - //this.dispatchEvent( new away.events.AwayEvent( away.events.AwayEvent.INITIALIZE_FAILED, e ) ); - alert("WebGL is not available."); - } - for (var i = 0; i < ContextWebGL.MAX_SAMPLERS; ++i) { - this._samplerStates[i] = new SamplerState(); - this._samplerStates[i].wrap = this._gl.REPEAT; - this._samplerStates[i].filter = this._gl.LINEAR; - this._samplerStates[i].mipfilter = this._gl.LINEAR; - } - } - Object.defineProperty(ContextWebGL.prototype, "container", { - get: function () { - return this._pContainer; - }, - enumerable: true, - configurable: true - }); - ContextWebGL.prototype.gl = function () { - return this._gl; - }; - ContextWebGL.prototype.clear = function (red, green, blue, alpha, depth, stencil, mask) { - if (red === void 0) { red = 0; } - if (green === void 0) { green = 0; } - if (blue === void 0) { blue = 0; } - if (alpha === void 0) { alpha = 1; } - if (depth === void 0) { depth = 1; } - if (stencil === void 0) { stencil = 0; } - if (mask === void 0) { mask = ContextGLClearMask.ALL; } - if (!this._drawing) { - this.updateBlendStatus(); - this._drawing = true; - } - var glmask = 0; - if (mask & ContextGLClearMask.COLOR) - glmask |= this._gl.COLOR_BUFFER_BIT; - if (mask & ContextGLClearMask.STENCIL) - glmask |= this._gl.STENCIL_BUFFER_BIT; - if (mask & ContextGLClearMask.DEPTH) - glmask |= this._gl.DEPTH_BUFFER_BIT; - this._gl.clearColor(red, green, blue, alpha); - this._gl.clearDepth(depth); - this._gl.clearStencil(stencil); - this._gl.clear(glmask); - }; - ContextWebGL.prototype.configureBackBuffer = function (width, height, antiAlias, enableDepthAndStencil) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = true; } - _super.prototype.configureBackBuffer.call(this, width, height, antiAlias, enableDepthAndStencil); - if (enableDepthAndStencil) { - this._gl.enable(this._gl.STENCIL_TEST); - this._gl.enable(this._gl.DEPTH_TEST); - } - this._gl.viewport['width'] = width; - this._gl.viewport['height'] = height; - this._gl.viewport(0, 0, width, height); - }; - ContextWebGL.prototype.createCubeTexture = function (size, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - var texture = new CubeTextureWebGL(this._gl, size); - this._textureList.push(texture); - return texture; - }; - ContextWebGL.prototype.createIndexBuffer = function (numIndices) { - var indexBuffer = new IndexBufferWebGL(this._gl, numIndices); - this._indexBufferList.push(indexBuffer); - return indexBuffer; - }; - ContextWebGL.prototype.createProgram = function () { - var program = new ProgramWebGL(this._gl); - this._programList.push(program); - return program; - }; - ContextWebGL.prototype.createTexture = function (width, height, format, optimizeForRenderToTexture, streamingLevels) { - if (streamingLevels === void 0) { streamingLevels = 0; } - //TODO streaming - var texture = new TextureWebGL(this._gl, width, height); - this._textureList.push(texture); - return texture; - }; - ContextWebGL.prototype.createVertexBuffer = function (numVertices, data32PerVertex) { - var vertexBuffer = new VertexBufferWebGL(this._gl, numVertices, data32PerVertex); - this._vertexBufferList.push(vertexBuffer); - return vertexBuffer; - }; - ContextWebGL.prototype.dispose = function () { - var i; - for (i = 0; i < this._indexBufferList.length; ++i) - this._indexBufferList[i].dispose(); - this._indexBufferList = null; - for (i = 0; i < this._vertexBufferList.length; ++i) - this._vertexBufferList[i].dispose(); - this._vertexBufferList = null; - for (i = 0; i < this._textureList.length; ++i) - this._textureList[i].dispose(); - this._textureList = null; - for (i = 0; i < this._programList.length; ++i) - this._programList[i].dispose(); - for (i = 0; i < this._samplerStates.length; ++i) - this._samplerStates[i] = null; - this._programList = null; - }; - ContextWebGL.prototype.drawToBitmapData = function (destination) { - var arrayBuffer = new ArrayBuffer(destination.width * destination.height * 4); - this._gl.readPixels(0, 0, destination.width, destination.height, this._gl.RGBA, this._gl.UNSIGNED_BYTE, new Uint8Array(arrayBuffer)); - var byteArray = new ByteArray(); - byteArray.setArrayBuffer(arrayBuffer); - destination.setPixels(new Rectangle(0, 0, destination.width, destination.height), byteArray); - }; - ContextWebGL.prototype.drawTriangles = function (indexBuffer, firstIndex, numTriangles) { - if (firstIndex === void 0) { firstIndex = 0; } - if (numTriangles === void 0) { numTriangles = -1; } - if (!this._drawing) - throw "Need to clear before drawing if the buffer has not been cleared since the last present() call."; - this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, indexBuffer.glBuffer); - this._gl.drawElements(this._gl.TRIANGLES, (numTriangles == -1) ? indexBuffer.numIndices : numTriangles * 3, this._gl.UNSIGNED_SHORT, firstIndex); - }; - ContextWebGL.prototype.present = function () { - this._drawing = false; - }; - ContextWebGL.prototype.setBlendFactors = function (sourceFactor, destinationFactor) { - this._blendEnabled = true; - this._blendSourceFactor = this._blendFactorDictionary[sourceFactor]; - this._blendDestinationFactor = this._blendFactorDictionary[destinationFactor]; - this.updateBlendStatus(); - }; - ContextWebGL.prototype.setColorMask = function (red, green, blue, alpha) { - this._gl.colorMask(red, green, blue, alpha); - }; - ContextWebGL.prototype.setCulling = function (triangleFaceToCull, coordinateSystem) { - if (coordinateSystem === void 0) { coordinateSystem = "leftHanded"; } - if (triangleFaceToCull == ContextGLTriangleFace.NONE) { - this._gl.disable(this._gl.CULL_FACE); - } - else { - this._gl.enable(this._gl.CULL_FACE); - switch (triangleFaceToCull) { - case ContextGLTriangleFace.BACK: - this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.FRONT : this._gl.BACK); - break; - case ContextGLTriangleFace.FRONT: - this._gl.cullFace((coordinateSystem == "leftHanded") ? this._gl.BACK : this._gl.FRONT); - break; - case ContextGLTriangleFace.FRONT_AND_BACK: - this._gl.cullFace(this._gl.FRONT_AND_BACK); - break; - default: - throw "Unknown ContextGLTriangleFace type."; - } - } - }; - // TODO ContextGLCompareMode - ContextWebGL.prototype.setDepthTest = function (depthMask, passCompareMode) { - this._gl.depthFunc(this._depthTestDictionary[passCompareMode]); - this._gl.depthMask(depthMask); - }; - ContextWebGL.prototype.setProgram = function (program) { - //TODO decide on construction/reference resposibilities - this._currentProgram = program; - program.focusProgram(); - }; - ContextWebGL.prototype.setProgramConstantsFromMatrix = function (programType, firstRegister, matrix, transposedMatrix) { - //this._gl.uniformMatrix4fv(this._gl.getUniformLocation(this._currentProgram.glProgram, this._uniformLocationNameDictionary[programType]), !transposedMatrix, new Float32Array(matrix.rawData)); - if (transposedMatrix === void 0) { transposedMatrix = false; } - //TODO remove special case for WebGL matrix calls? - var d = matrix.rawData; - if (transposedMatrix) { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[4], d[8], d[12]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[1], d[5], d[9], d[13]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[2], d[6], d[10], d[14]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[3], d[7], d[11], d[15]], 1); - } - else { - this.setProgramConstantsFromArray(programType, firstRegister, [d[0], d[1], d[2], d[3]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 1, [d[4], d[5], d[6], d[7]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 2, [d[8], d[9], d[10], d[11]], 1); - this.setProgramConstantsFromArray(programType, firstRegister + 3, [d[12], d[13], d[14], d[15]], 1); - } - }; - ContextWebGL.prototype.setProgramConstantsFromArray = function (programType, firstRegister, data, numRegisters) { - if (numRegisters === void 0) { numRegisters = -1; } - var locationName = this._uniformLocationNameDictionary[programType]; - var startIndex; - for (var i = 0; i < numRegisters; i++) { - startIndex = i * 4; - this._gl.uniform4f(this._gl.getUniformLocation(this._currentProgram.glProgram, locationName + (firstRegister + i)), data[startIndex], data[startIndex + 1], data[startIndex + 2], data[startIndex + 3]); - } - }; - ContextWebGL.prototype.setScissorRectangle = function (rectangle) { - if (!rectangle) { - this._gl.disable(this._gl.SCISSOR_TEST); - return; - } - this._gl.enable(this._gl.SCISSOR_TEST); - this._gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height); - }; - ContextWebGL.prototype.setTextureAt = function (sampler, texture) { - var samplerState = this._samplerStates[sampler]; - if (this._activeTexture != sampler && (texture || samplerState.type)) { - this._activeTexture = sampler; - this._gl.activeTexture(this._textureIndexDictionary[sampler]); - } - if (!texture) { - if (samplerState.type) { - this._gl.bindTexture(samplerState.type, null); - samplerState.type = null; - } - return; - } - var textureType = this._textureTypeDictionary[texture.textureType]; - samplerState.type = textureType; - this._gl.bindTexture(textureType, texture.glTexture); - this._gl.uniform1i(this._gl.getUniformLocation(this._currentProgram.glProgram, "fs" + sampler), sampler); - this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_S, samplerState.wrap); - this._gl.texParameteri(textureType, this._gl.TEXTURE_WRAP_T, samplerState.wrap); - this._gl.texParameteri(textureType, this._gl.TEXTURE_MAG_FILTER, samplerState.filter); - this._gl.texParameteri(textureType, this._gl.TEXTURE_MIN_FILTER, samplerState.mipfilter); - }; - ContextWebGL.prototype.setSamplerStateAt = function (sampler, wrap, filter, mipfilter) { - if (0 <= sampler && sampler < ContextWebGL.MAX_SAMPLERS) { - this._samplerStates[sampler].wrap = this._wrapDictionary[wrap]; - this._samplerStates[sampler].filter = this._filterDictionary[filter]; - this._samplerStates[sampler].mipfilter = this._mipmapFilterDictionary[filter][mipfilter]; - } - else { - throw "Sampler is out of bounds."; - } - }; - ContextWebGL.prototype.setVertexBufferAt = function (index, buffer, bufferOffset, format) { - if (bufferOffset === void 0) { bufferOffset = 0; } - if (format === void 0) { format = null; } - var location = this._currentProgram ? this._gl.getAttribLocation(this._currentProgram.glProgram, "va" + index) : -1; - if (!buffer) { - if (location > -1) - this._gl.disableVertexAttribArray(location); - return; - } - this._gl.bindBuffer(this._gl.ARRAY_BUFFER, buffer.glBuffer); - this._gl.enableVertexAttribArray(location); - this._gl.vertexAttribPointer(location, this._vertexBufferDimensionDictionary[format], this._gl.FLOAT, false, buffer.data32PerVertex * 4, bufferOffset * 4); - }; - ContextWebGL.prototype.setRenderToTexture = function (target, enableDepthAndStencil, antiAlias, surfaceSelector) { - if (enableDepthAndStencil === void 0) { enableDepthAndStencil = false; } - if (antiAlias === void 0) { antiAlias = 0; } - if (surfaceSelector === void 0) { surfaceSelector = 0; } - var texture = target; - var frameBuffer = texture.frameBuffer; - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, frameBuffer); - if (enableDepthAndStencil) { - this._gl.enable(this._gl.STENCIL_TEST); - this._gl.enable(this._gl.DEPTH_TEST); - } - this._gl.viewport(0, 0, texture.width, texture.height); - }; - ContextWebGL.prototype.setRenderToBackBuffer = function () { - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); - }; - ContextWebGL.prototype.updateBlendStatus = function () { - if (this._blendEnabled) { - this._gl.enable(this._gl.BLEND); - this._gl.blendEquation(this._gl.FUNC_ADD); - this._gl.blendFunc(this._blendSourceFactor, this._blendDestinationFactor); - } - else { - this._gl.disable(this._gl.BLEND); - } - }; - ContextWebGL.MAX_SAMPLERS = 8; - ContextWebGL.modulo = 0; - return ContextWebGL; -})(ContextGLBase); -module.exports = ContextWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY29udGV4dHdlYmdsLnRzIl0sIm5hbWVzIjpbIkNvbnRleHRXZWJHTCIsIkNvbnRleHRXZWJHTC5jb25zdHJ1Y3RvciIsIkNvbnRleHRXZWJHTC5jb250YWluZXIiLCJDb250ZXh0V2ViR0wuZ2wiLCJDb250ZXh0V2ViR0wuY2xlYXIiLCJDb250ZXh0V2ViR0wuY29uZmlndXJlQmFja0J1ZmZlciIsIkNvbnRleHRXZWJHTC5jcmVhdGVDdWJlVGV4dHVyZSIsIkNvbnRleHRXZWJHTC5jcmVhdGVJbmRleEJ1ZmZlciIsIkNvbnRleHRXZWJHTC5jcmVhdGVQcm9ncmFtIiwiQ29udGV4dFdlYkdMLmNyZWF0ZVRleHR1cmUiLCJDb250ZXh0V2ViR0wuY3JlYXRlVmVydGV4QnVmZmVyIiwiQ29udGV4dFdlYkdMLmRpc3Bvc2UiLCJDb250ZXh0V2ViR0wuZHJhd1RvQml0bWFwRGF0YSIsIkNvbnRleHRXZWJHTC5kcmF3VHJpYW5nbGVzIiwiQ29udGV4dFdlYkdMLnByZXNlbnQiLCJDb250ZXh0V2ViR0wuc2V0QmxlbmRGYWN0b3JzIiwiQ29udGV4dFdlYkdMLnNldENvbG9yTWFzayIsIkNvbnRleHRXZWJHTC5zZXRDdWxsaW5nIiwiQ29udGV4dFdlYkdMLnNldERlcHRoVGVzdCIsIkNvbnRleHRXZWJHTC5zZXRQcm9ncmFtIiwiQ29udGV4dFdlYkdMLnNldFByb2dyYW1Db25zdGFudHNGcm9tTWF0cml4IiwiQ29udGV4dFdlYkdMLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkiLCJDb250ZXh0V2ViR0wuc2V0U2Npc3NvclJlY3RhbmdsZSIsIkNvbnRleHRXZWJHTC5zZXRUZXh0dXJlQXQiLCJDb250ZXh0V2ViR0wuc2V0U2FtcGxlclN0YXRlQXQiLCJDb250ZXh0V2ViR0wuc2V0VmVydGV4QnVmZmVyQXQiLCJDb250ZXh0V2ViR0wuc2V0UmVuZGVyVG9UZXh0dXJlIiwiQ29udGV4dFdlYkdMLnNldFJl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QUFhQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUNoRkEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBO1lBQ3JFQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDN0VBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUN2RUEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxvQkFBb0JBLENBQUNBLFNBQVNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBRTlFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBQ3BEQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLENBQUNBO1lBRXBEQSxJQUFJQSxDQUFDQSxzQkFBc0JBLENBQUNBLFdBQVdBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBO1lBQy9EQSxJQUFJQSxDQUFDQSxzQkFBc0JBLENBQUNBLGFBQWFBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsQ0FBQ0E7WUFFdkVBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDakVBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsQ0FBQ0E7WUFFdkVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUN4RUEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxzQkFBc0JBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE9BQU9BLENBQUNBO1lBRTFFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7WUFDM0VBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLFVBQVVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLHFCQUFxQkEsQ0FBQ0E7WUFDNUhBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLFNBQVNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7WUFDMUhBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLENBQUNBO1lBQzFHQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7WUFDNUVBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLFVBQVVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLHNCQUFzQkEsQ0FBQ0E7WUFDOUhBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLFNBQVNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLHFCQUFxQkEsQ0FBQ0E7WUFDNUhBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxrQkFBa0JBLENBQUNBLE9BQU9BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNB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OEJBQU9BLEdBQWRBO1FBRUNXLElBQUlBLENBQVFBLENBQUNBO1FBQ2JBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDaERBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFcENBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFN0JBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDakRBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFOUJBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQzVDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUVoQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFekJBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQzVDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUVoQ0EsR0FBR0EsQ0FBQ0Es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QUFDQSxDQUFDQTtZQUN0QkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM5RkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNwR0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM3RkEsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNqR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsSUFBSUEsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxXQUFXQSxFQUFFQSxhQUFhQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN0R0EsQ0FBQ0E7SUFDRkEsQ0FBQ0E7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QUFDQSxDQUFDQTtRQUMzRUEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDbENBLENBQUNBO0lBQ0ZBLENBQUNBO0lBNVphNUIseUJBQVlBLEdBQVVBLENBQUNBLENBQUNBO0lBOFN4QkEsbUJBQU1BLEdBQVVBLENBQUNBLENBQUNBO0lBK0dqQ0EsbUJBQUNBO0FBQURBLENBcmJBLEFBcWJDQSxFQXJiMEIsYUFBYSxFQXFidkM7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0NvbnRleHRXZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xCbGVuZEZhY3Rvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmxlbmRGYWN0b3JcIik7XG5pbXBvcnQgQ29udGV4dEdMQ2xlYXJNYXNrXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xDbGVhck1hc2tcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFByb2dyYW1UeXBlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xQcm9ncmFtVHlwZVwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRmlsdGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUcmlhbmdsZUZhY2VcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xUcmlhbmdsZUZhY2VcIik7XG5pbXBvcnQgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdFwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgQ3ViZVRleHR1cmVXZWJHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9DdWJlVGV4dHVyZVdlYkdMXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgSW5kZXhCdWZmZXJXZWJHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JbmRleEJ1ZmZlcldlYkdMXCIpO1xuaW1wb3J0IFByb2dyYW1XZWJHTFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1Byb2dyYW1XZWJHTFwiKTtcbmltcG9ydCBUZXh0dXJlQmFzZVdlYkdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1RleHR1cmVCYXNlV2ViR0xcIik7XG5pbXBvcnQgVGV4dHVyZVdlYkdMXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvVGV4dHVyZVdlYkdMXCIpO1xuaW1wb3J0IFNhbXBsZXJTdGF0ZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1NhbXBsZXJTdGF0ZVwiKTtcbmltcG9ydCBWZXJ0ZXhCdWZmZXJXZWJHTFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvVmVydGV4QnVmZmVyV2ViR0xcIik7XG5cbmNsYXNzIENvbnRleHRXZWJHTCBleHRlbmRzIENvbnRleHRHTEJhc2UgaW1wbGVtZW50cyBJQ29udGV4dFN0YWdlR0xcbntcblx0cHJpdmF0ZSBfYmxlbmRGYWN0b3JEaWN0aW9uYXJ5Ok9iamVjdCA9IG5ldyBPYmplY3QoKTtcblx0cHJpdmF0ZSBfZGVwdGhUZXN0RGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX3RleHR1cmVJbmRleERpY3Rpb25hcnk6QXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KDgpO1xuXHRwcml2YXRlIF90ZXh0dXJlVHlwZURpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF93cmFwRGljdGlvbmFyeTpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX2ZpbHRlckRpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5Ok9iamVjdCA9IG5ldyBPYmplY3QoKTtcblx0cHJpdmF0ZSBfdW5pZm9ybUxvY2F0aW9uTmFtZURpY3Rpb25hcnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF92ZXJ0ZXhCdWZmZXJEaW1lbnNpb25EaWN0aW9uYXJ5Ok9iamVjdCA9IG5ldyBPYmplY3QoKTtcblxuXHRwcml2YXRlIF9kcmF3aW5nOmJvb2xlYW47XG5cdHByaXZhdGUgX2JsZW5kRW5hYmxlZDpib29sZWFuO1xuXHRwcml2YXRlIF9ibGVuZFNvdXJjZUZhY3RvcjpudW1iZXI7XG5cdHByaXZhdGUgX2JsZW5kRGVzdGluYXRpb25GYWN0b3I6bnVtYmVyO1xuXG5cdHByaXZhdGUgX2luZGV4QnVmZmVyTGlzdDpBcnJheTxJbmRleEJ1ZmZlcldlYkdMPiA9IG5ldyBBcnJheTxJbmRleEJ1ZmZlcldlYkdMPigpO1xuXHRwcml2YXRlIF92ZXJ0ZXhCdWZmZXJMaXN0OkFycmF5PFZlcnRleEJ1ZmZlcldlYkdMPiA9IG5ldyBBcnJheTxWZXJ0ZXhCdWZmZXJXZWJHTD4oKTtcblx0cHJpdmF0ZSBfdGV4dHVyZUxpc3Q6QXJyYXk8VGV4dHVyZUJhc2VXZWJHTD4gPSBuZXcgQXJyYXk8VGV4dHVyZUJhc2VXZWJHTD4oKTtcblx0cHJpdmF0ZSBfcHJvZ3JhbUxpc3Q6QXJyYXk8UHJvZ3JhbVdlYkdMPiA9IG5ldyBBcnJheTxQcm9ncmFtV2ViR0w+KCk7XG5cblx0cHJpdmF0ZSBfc2FtcGxlclN0YXRlczpBcnJheTxTYW1wbGVyU3RhdGU+ID0gbmV3IEFycmF5PFNhbXBsZXJTdGF0ZT4oOCk7XG5cblx0cHVibGljIHN0YXRpYyBNQVhfU0FNUExFUlM6bnVtYmVyID0gODtcblxuXHQvL0Bwcm90ZWN0ZWRcblx0cHVibGljIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cblx0Ly9AcHJvdGVjdGVkXG5cdHB1YmxpYyBfY3VycmVudFByb2dyYW06UHJvZ3JhbVdlYkdMO1xuXHRwcml2YXRlIF9hY3RpdmVUZXh0dXJlOm51bWJlcjtcblxuXG5cdHB1YmxpYyBnZXQgY29udGFpbmVyKCk6SFRNTEVsZW1lbnRcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wQ29udGFpbmVyO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoY2FudmFzOkhUTUxDYW52YXNFbGVtZW50LCBzdGFnZUluZGV4Om51bWJlcilcblx0e1xuXHRcdHN1cGVyKHN0YWdlSW5kZXgpO1xuXG5cdFx0dGhpcy5fcENvbnRhaW5lciA9IGNhbnZhcztcblxuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9nbCA9IDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsIHsgcHJlbXVsdGlwbGllZEFscGhhOmZhbHNlLCBhbHBoYTpmYWxzZSB9KTtcblxuXHRcdFx0aWYgKCF0aGlzLl9nbClcblx0XHRcdFx0dGhpcy5fZ2wgPSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsIHsgcHJlbXVsdGlwbGllZEFscGhhOmZhbHNlLCBhbHBoYTpmYWxzZSB9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvL3RoaXMuZGlzcGF0Y2hFdmVudCggbmV3IGF3YXkuZXZlbnRzLkF3YXlFdmVudCggYXdheS5ldmVudHMuQXdheUV2ZW50LklOSVRJQUxJWkVfRkFJTEVELCBlICkgKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fZ2wpIHtcblx0XHRcdC8vdGhpcy5kaXNwYXRjaEV2ZW50KCBuZXcgYXdheS5ldmVudHMuQXdheUV2ZW50KCBhd2F5LmV2ZW50cy5Bd2F5RXZlbnQuSU5JVElBTElaRV9TVUNDRVNTICkgKTtcblx0XHRcdC8vc2V0dXAgc2hvcnRjdXQgZGljdGlvbmFyaWVzXG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FXSA9IHRoaXMuX2dsLk9ORTtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5ERVNUSU5BVElPTl9BTFBIQV0gPSB0aGlzLl9nbC5EU1RfQUxQSEE7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuREVTVElOQVRJT05fQ09MT1JdID0gdGhpcy5fZ2wuRFNUX0NPTE9SO1xuXHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W0NvbnRleHRHTEJsZW5kRmFjdG9yLk9ORV0gPSB0aGlzLl9nbC5PTkU7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FX01JTlVTX0RFU1RJTkFUSU9OX0FMUEhBXSA9IHRoaXMuX2dsLk9ORV9NSU5VU19EU1RfQUxQSEE7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FX01JTlVTX0RFU1RJTkFUSU9OX0NPTE9SXSA9IHRoaXMuX2dsLk9ORV9NSU5VU19EU1RfQ09MT1I7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FX01JTlVTX1NPVVJDRV9BTFBIQV0gPSB0aGlzLl9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBO1xuXHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W0NvbnRleHRHTEJsZW5kRmFjdG9yLk9ORV9NSU5VU19TT1VSQ0VfQ09MT1JdID0gdGhpcy5fZ2wuT05FX01JTlVTX1NSQ19DT0xPUjtcblx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGljdGlvbmFyeVtDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEFdID0gdGhpcy5fZ2wuU1JDX0FMUEhBO1xuXHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W0NvbnRleHRHTEJsZW5kRmFjdG9yLlNPVVJDRV9DT0xPUl0gPSB0aGlzLl9nbC5TUkNfQ09MT1I7XG5cdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRpY3Rpb25hcnlbQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVST10gPSB0aGlzLl9nbC5aRVJPO1xuXG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkFMV0FZU10gPSB0aGlzLl9nbC5BTFdBWVM7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkVRVUFMXSA9IHRoaXMuX2dsLkVRVUFMO1xuXHRcdFx0dGhpcy5fZGVwdGhUZXN0RGljdGlvbmFyeVtDb250ZXh0R0xDb21wYXJlTW9kZS5HUkVBVEVSXSA9IHRoaXMuX2dsLkdSRUFURVI7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkdSRUFURVJfRVFVQUxdID0gdGhpcy5fZ2wuR0VRVUFMO1xuXHRcdFx0dGhpcy5fZGVwdGhUZXN0RGljdGlvbmFyeVtDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTXSA9IHRoaXMuX2dsLkxFU1M7XG5cdFx0XHR0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W0NvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUxdID0gdGhpcy5fZ2wuTEVRVUFMO1xuXHRcdFx0dGhpcy5fZGVwdGhUZXN0RGljdGlvbmFyeVtDb250ZXh0R0xDb21wYXJlTW9kZS5ORVZFUl0gPSB0aGlzLl9nbC5ORVZFUjtcblx0XHRcdHRoaXMuX2RlcHRoVGVzdERpY3Rpb25hcnlbQ29udGV4dEdMQ29tcGFyZU1vZGUuTk9UX0VRVUFMXSA9IHRoaXMuX2dsLk5PVEVRVUFMO1xuXG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzBdID0gdGhpcy5fZ2wuVEVYVFVSRTA7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzFdID0gdGhpcy5fZ2wuVEVYVFVSRTE7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzJdID0gdGhpcy5fZ2wuVEVYVFVSRTI7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzNdID0gdGhpcy5fZ2wuVEVYVFVSRTM7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzRdID0gdGhpcy5fZ2wuVEVYVFVSRTQ7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzVdID0gdGhpcy5fZ2wuVEVYVFVSRTU7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzZdID0gdGhpcy5fZ2wuVEVYVFVSRTY7XG5cdFx0XHR0aGlzLl90ZXh0dXJlSW5kZXhEaWN0aW9uYXJ5WzddID0gdGhpcy5fZ2wuVEVYVFVSRTc7XG5cblx0XHRcdHRoaXMuX3RleHR1cmVUeXBlRGljdGlvbmFyeVtcInRleHR1cmUyZFwiXSA9IHRoaXMuX2dsLlRFWFRVUkVfMkQ7XG5cdFx0XHR0aGlzLl90ZXh0dXJlVHlwZURpY3Rpb25hcnlbXCJ0ZXh0dXJlQ3ViZVwiXSA9IHRoaXMuX2dsLlRFWFRVUkVfQ1VCRV9NQVA7XG5cblx0XHRcdHRoaXMuX3dyYXBEaWN0aW9uYXJ5W0NvbnRleHRHTFdyYXBNb2RlLlJFUEVBVF0gPSB0aGlzLl9nbC5SRVBFQVQ7XG5cdFx0XHR0aGlzLl93cmFwRGljdGlvbmFyeVtDb250ZXh0R0xXcmFwTW9kZS5DTEFNUF0gPSB0aGlzLl9nbC5DTEFNUF9UT19FREdFO1xuXG5cdFx0XHR0aGlzLl9maWx0ZXJEaWN0aW9uYXJ5W0NvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSXSA9IHRoaXMuX2dsLkxJTkVBUjtcblx0XHRcdHRoaXMuX2ZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNUXSA9IHRoaXMuX2dsLk5FQVJFU1Q7XG5cblx0XHRcdHRoaXMuX21pcG1hcEZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVJdID0gbmV3IE9iamVjdCgpO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUl1bQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5FQVJFU1RdID0gdGhpcy5fZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUl1bQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUl0gPSB0aGlzLl9nbC5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcblx0XHRcdHRoaXMuX21pcG1hcEZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVJdW0NvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FXSA9IHRoaXMuX2dsLkxJTkVBUjtcblx0XHRcdHRoaXMuX21pcG1hcEZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNUXSA9IG5ldyBPYmplY3QoKTtcblx0XHRcdHRoaXMuX21pcG1hcEZpbHRlckRpY3Rpb25hcnlbQ29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNUXVtDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTkVBUkVTVF0gPSB0aGlzLl9nbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1RdW0NvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVJdID0gdGhpcy5fZ2wuTkVBUkVTVF9NSVBNQVBfTElORUFSO1xuXHRcdFx0dGhpcy5fbWlwbWFwRmlsdGVyRGljdGlvbmFyeVtDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1RdW0NvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FXSA9IHRoaXMuX2dsLk5FQVJFU1Q7XG5cblx0XHRcdHRoaXMuX3VuaWZvcm1Mb2NhdGlvbk5hbWVEaWN0aW9uYXJ5W0NvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWF0gPSBcInZjXCI7XG5cdFx0XHR0aGlzLl91bmlmb3JtTG9jYXRpb25OYW1lRGljdGlvbmFyeVtDb250ZXh0R0xQcm9ncmFtVHlwZS5GUkFHTUVOVF0gPSBcImZjXCI7XG5cblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnlbQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzFdID0gMTtcblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnlbQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzJdID0gMjtcblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnlbQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzNdID0gMztcblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnlbQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzRdID0gNDtcblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckRpbWVuc2lvbkRpY3Rpb25hcnlbQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkJZVEVTXzRdID0gNDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly90aGlzLmRpc3BhdGNoRXZlbnQoIG5ldyBhd2F5LmV2ZW50cy5Bd2F5RXZlbnQoIGF3YXkuZXZlbnRzLkF3YXlFdmVudC5JTklUSUFMSVpFX0ZBSUxFRCwgZSApICk7XG5cdFx0XHRhbGVydChcIldlYkdMIGlzIG5vdCBhdmFpbGFibGUuXCIpO1xuXHRcdH1cblxuXHRcdC8vZGVmYXVsdHNcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBDb250ZXh0V2ViR0wuTUFYX1NBTVBMRVJTOyArK2kpIHtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbaV0gPSBuZXcgU2FtcGxlclN0YXRlKCk7XG5cdFx0XHR0aGlzLl9zYW1wbGVyU3RhdGVzW2ldLndyYXAgPSB0aGlzLl9nbC5SRVBFQVQ7XG5cdFx0XHR0aGlzLl9zYW1wbGVyU3RhdGVzW2ldLmZpbHRlciA9IHRoaXMuX2dsLkxJTkVBUjtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbaV0ubWlwZmlsdGVyID0gdGhpcy5fZ2wuTElORUFSO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnbCgpOldlYkdMUmVuZGVyaW5nQ29udGV4dFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2dsO1xuXHR9XG5cblx0cHVibGljIGNsZWFyKHJlZDpudW1iZXIgPSAwLCBncmVlbjpudW1iZXIgPSAwLCBibHVlOm51bWJlciA9IDAsIGFscGhhOm51bWJlciA9IDEsIGRlcHRoOm51bWJlciA9IDEsIHN0ZW5jaWw6bnVtYmVyID0gMCwgbWFzazpudW1iZXIgPSBDb250ZXh0R0xDbGVhck1hc2suQUxMKVxuXHR7XG5cdFx0aWYgKCF0aGlzLl9kcmF3aW5nKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUJsZW5kU3RhdHVzKCk7XG5cdFx0XHR0aGlzLl9kcmF3aW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR2YXIgZ2xtYXNrOm51bWJlciA9IDA7XG5cdFx0aWYgKG1hc2sgJiBDb250ZXh0R0xDbGVhck1hc2suQ09MT1IpIGdsbWFzayB8PSB0aGlzLl9nbC5DT0xPUl9CVUZGRVJfQklUO1xuXHRcdGlmIChtYXNrICYgQ29udGV4dEdMQ2xlYXJNYXNrLlNURU5DSUwpIGdsbWFzayB8PSB0aGlzLl9nbC5TVEVOQ0lMX0JVRkZFUl9CSVQ7XG5cdFx0aWYgKG1hc2sgJiBDb250ZXh0R0xDbGVhck1hc2suREVQVEgpIGdsbWFzayB8PSB0aGlzLl9nbC5ERVBUSF9CVUZGRVJfQklUO1xuXG5cdFx0dGhpcy5fZ2wuY2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7XG5cdFx0dGhpcy5fZ2wuY2xlYXJEZXB0aChkZXB0aCk7XG5cdFx0dGhpcy5fZ2wuY2xlYXJTdGVuY2lsKHN0ZW5jaWwpO1xuXHRcdHRoaXMuX2dsLmNsZWFyKGdsbWFzayk7XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlQmFja0J1ZmZlcih3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGFudGlBbGlhczpudW1iZXIsIGVuYWJsZURlcHRoQW5kU3RlbmNpbDpib29sZWFuID0gdHJ1ZSlcblx0e1xuXHRcdHN1cGVyLmNvbmZpZ3VyZUJhY2tCdWZmZXIod2lkdGgsIGhlaWdodCwgYW50aUFsaWFzLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWwpO1xuXG5cdFx0aWYgKGVuYWJsZURlcHRoQW5kU3RlbmNpbCkge1xuXHRcdFx0dGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLlNURU5DSUxfVEVTVCk7XG5cdFx0XHR0aGlzLl9nbC5lbmFibGUodGhpcy5fZ2wuREVQVEhfVEVTVCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZ2wudmlld3BvcnRbJ3dpZHRoJ10gPSB3aWR0aDtcblx0XHR0aGlzLl9nbC52aWV3cG9ydFsnaGVpZ2h0J10gPSBoZWlnaHQ7XG5cblx0XHR0aGlzLl9nbC52aWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVDdWJlVGV4dHVyZShzaXplOm51bWJlciwgZm9ybWF0OnN0cmluZywgb3B0aW1pemVGb3JSZW5kZXJUb1RleHR1cmU6Ym9vbGVhbiwgc3RyZWFtaW5nTGV2ZWxzOm51bWJlciA9IDApOkN1YmVUZXh0dXJlV2ViR0xcblx0e1xuXHRcdHZhciB0ZXh0dXJlOkN1YmVUZXh0dXJlV2ViR0wgPSBuZXcgQ3ViZVRleHR1cmVXZWJHTCh0aGlzLl9nbCwgc2l6ZSk7XG5cdFx0dGhpcy5fdGV4dHVyZUxpc3QucHVzaCh0ZXh0dXJlKTtcblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVJbmRleEJ1ZmZlcihudW1JbmRpY2VzOm51bWJlcik6SW5kZXhCdWZmZXJXZWJHTFxuXHR7XG5cdFx0dmFyIGluZGV4QnVmZmVyOkluZGV4QnVmZmVyV2ViR0wgPSBuZXcgSW5kZXhCdWZmZXJXZWJHTCh0aGlzLl9nbCwgbnVtSW5kaWNlcyk7XG5cdFx0dGhpcy5faW5kZXhCdWZmZXJMaXN0LnB1c2goaW5kZXhCdWZmZXIpO1xuXHRcdHJldHVybiBpbmRleEJ1ZmZlcjtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVQcm9ncmFtKCk6UHJvZ3JhbVdlYkdMXG5cdHtcblx0XHR2YXIgcHJvZ3JhbTpQcm9ncmFtV2ViR0wgPSBuZXcgUHJvZ3JhbVdlYkdMKHRoaXMuX2dsKTtcblx0XHR0aGlzLl9wcm9ncmFtTGlzdC5wdXNoKHByb2dyYW0pO1xuXHRcdHJldHVybiBwcm9ncmFtO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZVRleHR1cmUod2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyLCBmb3JtYXQ6c3RyaW5nLCBvcHRpbWl6ZUZvclJlbmRlclRvVGV4dHVyZTpib29sZWFuLCBzdHJlYW1pbmdMZXZlbHM6bnVtYmVyID0gMCk6VGV4dHVyZVdlYkdMXG5cdHtcblx0XHQvL1RPRE8gc3RyZWFtaW5nXG5cdFx0dmFyIHRleHR1cmU6VGV4dHVyZVdlYkdMID0gbmV3IFRleHR1cmVXZWJHTCh0aGlzLl9nbCwgd2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcy5fdGV4dHVyZUxpc3QucHVzaCh0ZXh0dXJlKTtcblx0XHRyZXR1cm4gdGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVWZXJ0ZXhCdWZmZXIobnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKTpWZXJ0ZXhCdWZmZXJXZWJHTFxuXHR7XG5cdFx0dmFyIHZlcnRleEJ1ZmZlcjpWZXJ0ZXhCdWZmZXJXZWJHTCA9IG5ldyBWZXJ0ZXhCdWZmZXJXZWJHTCh0aGlzLl9nbCwgbnVtVmVydGljZXMsIGRhdGEzMlBlclZlcnRleCk7XG5cdFx0dGhpcy5fdmVydGV4QnVmZmVyTGlzdC5wdXNoKHZlcnRleEJ1ZmZlcik7XG5cdFx0cmV0dXJuIHZlcnRleEJ1ZmZlcjtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHZhciBpOm51bWJlcjtcblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5faW5kZXhCdWZmZXJMaXN0Lmxlbmd0aDsgKytpKVxuXHRcdFx0dGhpcy5faW5kZXhCdWZmZXJMaXN0W2ldLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX2luZGV4QnVmZmVyTGlzdCA9IG51bGw7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fdmVydGV4QnVmZmVyTGlzdC5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3ZlcnRleEJ1ZmZlckxpc3RbaV0uZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fdmVydGV4QnVmZmVyTGlzdCA9IG51bGw7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fdGV4dHVyZUxpc3QubGVuZ3RoOyArK2kpXG5cdFx0XHR0aGlzLl90ZXh0dXJlTGlzdFtpXS5kaXNwb3NlKCk7XG5cblx0XHR0aGlzLl90ZXh0dXJlTGlzdCA9IG51bGw7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fcHJvZ3JhbUxpc3QubGVuZ3RoOyArK2kpXG5cdFx0XHR0aGlzLl9wcm9ncmFtTGlzdFtpXS5kaXNwb3NlKCk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fc2FtcGxlclN0YXRlcy5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbaV0gPSBudWxsO1xuXG5cdFx0dGhpcy5fcHJvZ3JhbUxpc3QgPSBudWxsO1xuXHR9XG5cblx0cHVibGljIGRyYXdUb0JpdG1hcERhdGEoZGVzdGluYXRpb246Qml0bWFwRGF0YSlcblx0e1xuXHRcdHZhciBhcnJheUJ1ZmZlcjpBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihkZXN0aW5hdGlvbi53aWR0aCpkZXN0aW5hdGlvbi5oZWlnaHQqNCk7XG5cblx0XHR0aGlzLl9nbC5yZWFkUGl4ZWxzKDAsIDAsIGRlc3RpbmF0aW9uLndpZHRoLCBkZXN0aW5hdGlvbi5oZWlnaHQsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG5cblx0XHR2YXIgYnl0ZUFycmF5OkJ5dGVBcnJheSA9IG5ldyBCeXRlQXJyYXkoKTtcblx0XHRieXRlQXJyYXkuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpO1xuXG5cdFx0ZGVzdGluYXRpb24uc2V0UGl4ZWxzKG5ldyBSZWN0YW5nbGUoMCwgMCwgZGVzdGluYXRpb24ud2lkdGgsIGRlc3RpbmF0aW9uLmhlaWdodCksIGJ5dGVBcnJheSk7XG5cdH1cblxuXHRwdWJsaWMgZHJhd1RyaWFuZ2xlcyhpbmRleEJ1ZmZlcjpJbmRleEJ1ZmZlcldlYkdMLCBmaXJzdEluZGV4Om51bWJlciA9IDAsIG51bVRyaWFuZ2xlczpudW1iZXIgPSAtMSlcblx0e1xuXHRcdGlmICghdGhpcy5fZHJhd2luZylcblx0XHRcdHRocm93IFwiTmVlZCB0byBjbGVhciBiZWZvcmUgZHJhd2luZyBpZiB0aGUgYnVmZmVyIGhhcyBub3QgYmVlbiBjbGVhcmVkIHNpbmNlIHRoZSBsYXN0IHByZXNlbnQoKSBjYWxsLlwiO1xuXG5cdFx0dGhpcy5fZ2wuYmluZEJ1ZmZlcih0aGlzLl9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kZXhCdWZmZXIuZ2xCdWZmZXIpO1xuXHRcdHRoaXMuX2dsLmRyYXdFbGVtZW50cyh0aGlzLl9nbC5UUklBTkdMRVMsIChudW1UcmlhbmdsZXMgPT0gLTEpPyBpbmRleEJ1ZmZlci5udW1JbmRpY2VzIDogbnVtVHJpYW5nbGVzKjMsIHRoaXMuX2dsLlVOU0lHTkVEX1NIT1JULCBmaXJzdEluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBwcmVzZW50KClcblx0e1xuXHRcdHRoaXMuX2RyYXdpbmcgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBzZXRCbGVuZEZhY3RvcnMoc291cmNlRmFjdG9yOnN0cmluZywgZGVzdGluYXRpb25GYWN0b3I6c3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5fYmxlbmRFbmFibGVkID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2JsZW5kU291cmNlRmFjdG9yID0gdGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W3NvdXJjZUZhY3Rvcl07XG5cblx0XHR0aGlzLl9ibGVuZERlc3RpbmF0aW9uRmFjdG9yID0gdGhpcy5fYmxlbmRGYWN0b3JEaWN0aW9uYXJ5W2Rlc3RpbmF0aW9uRmFjdG9yXTtcblxuXHRcdHRoaXMudXBkYXRlQmxlbmRTdGF0dXMoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDb2xvck1hc2socmVkOmJvb2xlYW4sIGdyZWVuOmJvb2xlYW4sIGJsdWU6Ym9vbGVhbiwgYWxwaGE6Ym9vbGVhbilcblx0e1xuXHRcdHRoaXMuX2dsLmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q3VsbGluZyh0cmlhbmdsZUZhY2VUb0N1bGw6c3RyaW5nLCBjb29yZGluYXRlU3lzdGVtOnN0cmluZyA9IFwibGVmdEhhbmRlZFwiKVxuXHR7XG5cdFx0aWYgKHRyaWFuZ2xlRmFjZVRvQ3VsbCA9PSBDb250ZXh0R0xUcmlhbmdsZUZhY2UuTk9ORSkge1xuXHRcdFx0dGhpcy5fZ2wuZGlzYWJsZSh0aGlzLl9nbC5DVUxMX0ZBQ0UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nbC5lbmFibGUodGhpcy5fZ2wuQ1VMTF9GQUNFKTtcblx0XHRcdHN3aXRjaCAodHJpYW5nbGVGYWNlVG9DdWxsKSB7XG5cdFx0XHRcdGNhc2UgQ29udGV4dEdMVHJpYW5nbGVGYWNlLkJBQ0s6XG5cdFx0XHRcdFx0dGhpcy5fZ2wuY3VsbEZhY2UoKGNvb3JkaW5hdGVTeXN0ZW0gPT0gXCJsZWZ0SGFuZGVkXCIpPyB0aGlzLl9nbC5GUk9OVCA6IHRoaXMuX2dsLkJBQ0spO1xuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGNhc2UgQ29udGV4dEdMVHJpYW5nbGVGYWNlLkZST05UOlxuXHRcdFx0XHRcdHRoaXMuX2dsLmN1bGxGYWNlKChjb29yZGluYXRlU3lzdGVtID09IFwibGVmdEhhbmRlZFwiKT8gdGhpcy5fZ2wuQkFDSyA6IHRoaXMuX2dsLkZST05UKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBDb250ZXh0R0xUcmlhbmdsZUZhY2UuRlJPTlRfQU5EX0JBQ0s6XG5cdFx0XHRcdFx0dGhpcy5fZ2wuY3VsbEZhY2UodGhpcy5fZ2wuRlJPTlRfQU5EX0JBQ0spO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IFwiVW5rbm93biBDb250ZXh0R0xUcmlhbmdsZUZhY2UgdHlwZS5cIjsgLy8gVE9ETyBlcnJvclxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE8gQ29udGV4dEdMQ29tcGFyZU1vZGVcblx0cHVibGljIHNldERlcHRoVGVzdChkZXB0aE1hc2s6Ym9vbGVhbiwgcGFzc0NvbXBhcmVNb2RlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX2dsLmRlcHRoRnVuYyh0aGlzLl9kZXB0aFRlc3REaWN0aW9uYXJ5W3Bhc3NDb21wYXJlTW9kZV0pO1xuXG5cdFx0dGhpcy5fZ2wuZGVwdGhNYXNrKGRlcHRoTWFzayk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UHJvZ3JhbShwcm9ncmFtOlByb2dyYW1XZWJHTClcblx0e1xuXHRcdC8vVE9ETyBkZWNpZGUgb24gY29uc3RydWN0aW9uL3JlZmVyZW5jZSByZXNwb3NpYmlsaXRpZXNcblx0XHR0aGlzLl9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07XG5cdFx0cHJvZ3JhbS5mb2N1c1Byb2dyYW0oKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChwcm9ncmFtVHlwZTpzdHJpbmcsIGZpcnN0UmVnaXN0ZXI6bnVtYmVyLCBtYXRyaXg6TWF0cml4M0QsIHRyYW5zcG9zZWRNYXRyaXg6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0Ly90aGlzLl9nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMuX2dsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9jdXJyZW50UHJvZ3JhbS5nbFByb2dyYW0sIHRoaXMuX3VuaWZvcm1Mb2NhdGlvbk5hbWVEaWN0aW9uYXJ5W3Byb2dyYW1UeXBlXSksICF0cmFuc3Bvc2VkTWF0cml4LCBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeC5yYXdEYXRhKSk7XG5cblx0XHQvL1RPRE8gcmVtb3ZlIHNwZWNpYWwgY2FzZSBmb3IgV2ViR0wgbWF0cml4IGNhbGxzP1xuXHRcdHZhciBkOm51bWJlcltdID0gbWF0cml4LnJhd0RhdGE7XG5cdFx0aWYgKHRyYW5zcG9zZWRNYXRyaXgpIHtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciwgWyBkWzBdLCBkWzRdLCBkWzhdLCBkWzEyXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDEsIFsgZFsxXSwgZFs1XSwgZFs5XSwgZFsxM10gXSwgMSk7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIgKyAyLCBbIGRbMl0sIGRbNl0sIGRbMTBdLCBkWzE0XSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDMsIFsgZFszXSwgZFs3XSwgZFsxMV0sIGRbMTVdIF0sIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGUsIGZpcnN0UmVnaXN0ZXIsIFsgZFswXSwgZFsxXSwgZFsyXSwgZFszXSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDEsIFsgZFs0XSwgZFs1XSwgZFs2XSwgZFs3XSBdLCAxKTtcblx0XHRcdHRoaXMuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShwcm9ncmFtVHlwZSwgZmlyc3RSZWdpc3RlciArIDIsIFsgZFs4XSwgZFs5XSwgZFsxMF0sIGRbMTFdIF0sIDEpO1xuXHRcdFx0dGhpcy5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlLCBmaXJzdFJlZ2lzdGVyICsgMywgWyBkWzEyXSwgZFsxM10sIGRbMTRdLCBkWzE1XSBdLCAxKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIG1vZHVsbzpudW1iZXIgPSAwO1xuXG5cdHB1YmxpYyBzZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KHByb2dyYW1UeXBlOnN0cmluZywgZmlyc3RSZWdpc3RlcjpudW1iZXIsIGRhdGE6bnVtYmVyW10sIG51bVJlZ2lzdGVyczpudW1iZXIgPSAtMSlcblx0e1xuXHRcdHZhciBsb2NhdGlvbk5hbWU6c3RyaW5nID0gdGhpcy5fdW5pZm9ybUxvY2F0aW9uTmFtZURpY3Rpb25hcnlbcHJvZ3JhbVR5cGVdO1xuXHRcdHZhciBzdGFydEluZGV4Om51bWJlcjtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBudW1SZWdpc3RlcnM7IGkrKykge1xuXHRcdFx0c3RhcnRJbmRleCA9IGkqNDtcblx0XHRcdHRoaXMuX2dsLnVuaWZvcm00Zih0aGlzLl9nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fY3VycmVudFByb2dyYW0uZ2xQcm9ncmFtLCBsb2NhdGlvbk5hbWUgKyAoZmlyc3RSZWdpc3RlciArIGkpKSwgZGF0YVtzdGFydEluZGV4XSwgZGF0YVtzdGFydEluZGV4ICsgMV0sIGRhdGFbc3RhcnRJbmRleCArIDJdLCBkYXRhW3N0YXJ0SW5kZXggKyAzXSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFNjaXNzb3JSZWN0YW5nbGUocmVjdGFuZ2xlOlJlY3RhbmdsZSlcblx0e1xuXHRcdGlmICghcmVjdGFuZ2xlKSB7XG5cdFx0XHR0aGlzLl9nbC5kaXNhYmxlKHRoaXMuX2dsLlNDSVNTT1JfVEVTVCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLlNDSVNTT1JfVEVTVCk7XG5cdFx0dGhpcy5fZ2wuc2Npc3NvcihyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnksIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLmhlaWdodCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VGV4dHVyZUF0KHNhbXBsZXI6bnVtYmVyLCB0ZXh0dXJlOlRleHR1cmVCYXNlV2ViR0wpXG5cdHtcblx0XHR2YXIgc2FtcGxlclN0YXRlOlNhbXBsZXJTdGF0ZSA9IHRoaXMuX3NhbXBsZXJTdGF0ZXNbc2FtcGxlcl07XG5cblx0XHRpZiAodGhpcy5fYWN0aXZlVGV4dHVyZSAhPSBzYW1wbGVyICYmICh0ZXh0dXJlIHx8IHNhbXBsZXJTdGF0ZS50eXBlKSkge1xuXHRcdFx0dGhpcy5fYWN0aXZlVGV4dHVyZSA9IHNhbXBsZXI7XG5cdFx0XHR0aGlzLl9nbC5hY3RpdmVUZXh0dXJlKHRoaXMuX3RleHR1cmVJbmRleERpY3Rpb25hcnlbc2FtcGxlcl0pO1xuXHRcdH1cblxuXHRcdGlmICghdGV4dHVyZSkge1xuXHRcdFx0aWYgKHNhbXBsZXJTdGF0ZS50eXBlKSB7XG5cdFx0XHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHNhbXBsZXJTdGF0ZS50eXBlLCBudWxsKTtcblx0XHRcdFx0c2FtcGxlclN0YXRlLnR5cGUgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHRleHR1cmVUeXBlOm51bWJlciA9IHRoaXMuX3RleHR1cmVUeXBlRGljdGlvbmFyeVt0ZXh0dXJlLnRleHR1cmVUeXBlXTtcblx0XHRzYW1wbGVyU3RhdGUudHlwZSA9IHRleHR1cmVUeXBlO1xuXG5cdFx0dGhpcy5fZ2wuYmluZFRleHR1cmUodGV4dHVyZVR5cGUsIHRleHR1cmUuZ2xUZXh0dXJlKTtcblxuXHRcdHRoaXMuX2dsLnVuaWZvcm0xaSh0aGlzLl9nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fY3VycmVudFByb2dyYW0uZ2xQcm9ncmFtLCBcImZzXCIgKyBzYW1wbGVyKSwgc2FtcGxlcik7XG5cblx0XHR0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCB0aGlzLl9nbC5URVhUVVJFX1dSQVBfUywgc2FtcGxlclN0YXRlLndyYXApO1xuXHRcdHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIHRoaXMuX2dsLlRFWFRVUkVfV1JBUF9ULCBzYW1wbGVyU3RhdGUud3JhcCk7XG5cblx0XHR0aGlzLl9nbC50ZXhQYXJhbWV0ZXJpKHRleHR1cmVUeXBlLCB0aGlzLl9nbC5URVhUVVJFX01BR19GSUxURVIsIHNhbXBsZXJTdGF0ZS5maWx0ZXIpO1xuXHRcdHRoaXMuX2dsLnRleFBhcmFtZXRlcmkodGV4dHVyZVR5cGUsIHRoaXMuX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgc2FtcGxlclN0YXRlLm1pcGZpbHRlcik7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2FtcGxlclN0YXRlQXQoc2FtcGxlcjpudW1iZXIsIHdyYXA6c3RyaW5nLCBmaWx0ZXI6c3RyaW5nLCBtaXBmaWx0ZXI6c3RyaW5nKTp2b2lkXG5cdHtcblx0XHRpZiAoMCA8PSBzYW1wbGVyICYmIHNhbXBsZXIgPCBDb250ZXh0V2ViR0wuTUFYX1NBTVBMRVJTKSB7XG5cdFx0XHR0aGlzLl9zYW1wbGVyU3RhdGVzW3NhbXBsZXJdLndyYXAgPSB0aGlzLl93cmFwRGljdGlvbmFyeVt3cmFwXTtcblx0XHRcdHRoaXMuX3NhbXBsZXJTdGF0ZXNbc2FtcGxlcl0uZmlsdGVyID0gdGhpcy5fZmlsdGVyRGljdGlvbmFyeVtmaWx0ZXJdO1xuXHRcdFx0dGhpcy5fc2FtcGxlclN0YXRlc1tzYW1wbGVyXS5taXBmaWx0ZXIgPSB0aGlzLl9taXBtYXBGaWx0ZXJEaWN0aW9uYXJ5W2ZpbHRlcl1bbWlwZmlsdGVyXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgXCJTYW1wbGVyIGlzIG91dCBvZiBib3VuZHMuXCI7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFZlcnRleEJ1ZmZlckF0KGluZGV4Om51bWJlciwgYnVmZmVyOlZlcnRleEJ1ZmZlcldlYkdMLCBidWZmZXJPZmZzZXQ6bnVtYmVyID0gMCwgZm9ybWF0OnN0cmluZyA9IG51bGwpXG5cdHtcblx0XHR2YXIgbG9jYXRpb246bnVtYmVyID0gdGhpcy5fY3VycmVudFByb2dyYW0/IHRoaXMuX2dsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuX2N1cnJlbnRQcm9ncmFtLmdsUHJvZ3JhbSwgXCJ2YVwiICsgaW5kZXgpIDogLTE7XG5cblx0XHRpZiAoIWJ1ZmZlcikge1xuXHRcdFx0aWYgKGxvY2F0aW9uID4gLTEpXG5cdFx0XHRcdHRoaXMuX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9nbC5iaW5kQnVmZmVyKHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyLmdsQnVmZmVyKTtcblx0XHR0aGlzLl9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7XG5cdFx0dGhpcy5fZ2wudmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgdGhpcy5fdmVydGV4QnVmZmVyRGltZW5zaW9uRGljdGlvbmFyeVtmb3JtYXRdLCB0aGlzLl9nbC5GTE9BVCwgZmFsc2UsIGJ1ZmZlci5kYXRhMzJQZXJWZXJ0ZXgqNCwgYnVmZmVyT2Zmc2V0KjQpO1xuXHR9XG5cblx0cHVibGljIHNldFJlbmRlclRvVGV4dHVyZSh0YXJnZXQ6VGV4dHVyZUJhc2VXZWJHTCwgZW5hYmxlRGVwdGhBbmRTdGVuY2lsOmJvb2xlYW4gPSBmYWxzZSwgYW50aUFsaWFzOm51bWJlciA9IDAsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cdFx0dmFyIHRleHR1cmU6VGV4dHVyZVdlYkdMID0gPFRleHR1cmVXZWJHTD4gdGFyZ2V0O1xuXHRcdHZhciBmcmFtZUJ1ZmZlcjpXZWJHTEZyYW1lYnVmZmVyID0gdGV4dHVyZS5mcmFtZUJ1ZmZlcjtcblx0XHR0aGlzLl9nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5fZ2wuRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVyKTtcblxuXHRcdGlmIChlbmFibGVEZXB0aEFuZFN0ZW5jaWwpIHtcblx0XHRcdHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5TVEVOQ0lMX1RFU1QpO1xuXHRcdFx0dGhpcy5fZ2wuZW5hYmxlKHRoaXMuX2dsLkRFUFRIX1RFU1QpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2dsLnZpZXdwb3J0KDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0ICk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVuZGVyVG9CYWNrQnVmZmVyKClcblx0e1xuXHRcdHRoaXMuX2dsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLl9nbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUJsZW5kU3RhdHVzKClcblx0e1xuXHRcdGlmICh0aGlzLl9ibGVuZEVuYWJsZWQpIHtcblx0XHRcdHRoaXMuX2dsLmVuYWJsZSh0aGlzLl9nbC5CTEVORCk7XG5cdFx0XHR0aGlzLl9nbC5ibGVuZEVxdWF0aW9uKHRoaXMuX2dsLkZVTkNfQUREKTtcblx0XHRcdHRoaXMuX2dsLmJsZW5kRnVuYyh0aGlzLl9ibGVuZFNvdXJjZUZhY3RvciwgdGhpcy5fYmxlbmREZXN0aW5hdGlvbkZhY3Rvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dsLmRpc2FibGUodGhpcy5fZ2wuQkxFTkQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBDb250ZXh0V2ViR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/CubeTextureWebGL.js b/lib/core/stagegl/CubeTextureWebGL.js deleted file mode 100755 index b8f8874e..00000000 --- a/lib/core/stagegl/CubeTextureWebGL.js +++ /dev/null @@ -1,56 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); -var CubeTextureWebGL = (function (_super) { - __extends(CubeTextureWebGL, _super); - function CubeTextureWebGL(gl, size) { - _super.call(this, gl); - this._textureSelectorDictionary = new Array(6); - this.textureType = "textureCube"; - this._size = size; - this._texture = this._gl.createTexture(); - this._textureSelectorDictionary[0] = gl.TEXTURE_CUBE_MAP_POSITIVE_X; - this._textureSelectorDictionary[1] = gl.TEXTURE_CUBE_MAP_NEGATIVE_X; - this._textureSelectorDictionary[2] = gl.TEXTURE_CUBE_MAP_POSITIVE_Y; - this._textureSelectorDictionary[3] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Y; - this._textureSelectorDictionary[4] = gl.TEXTURE_CUBE_MAP_POSITIVE_Z; - this._textureSelectorDictionary[5] = gl.TEXTURE_CUBE_MAP_NEGATIVE_Z; - } - CubeTextureWebGL.prototype.dispose = function () { - this._gl.deleteTexture(this._texture); - }; - CubeTextureWebGL.prototype.uploadFromData = function (data, side, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) - data = data.imageData; - this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, this._texture); - this._gl.texImage2D(this._textureSelectorDictionary[side], miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); - this._gl.bindTexture(this._gl.TEXTURE_CUBE_MAP, null); - }; - CubeTextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { - if (async === void 0) { async = false; } - }; - Object.defineProperty(CubeTextureWebGL.prototype, "size", { - get: function () { - return this._size; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(CubeTextureWebGL.prototype, "glTexture", { - get: function () { - return this._texture; - }, - enumerable: true, - configurable: true - }); - return CubeTextureWebGL; -})(TextureBaseWebGL); -module.exports = CubeTextureWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvY3ViZXRleHR1cmV3ZWJnbC50cyJdLCJuYW1lcyI6WyJDdWJlVGV4dHVyZVdlYkdMIiwiQ3ViZVRleHR1cmVXZWJHTC5jb25zdHJ1Y3RvciIsIkN1YmVUZXh0dXJlV2ViR0wuZGlzcG9zZSIsIkN1YmVUZXh0dXJlV2ViR0wudXBsb2FkRnJvbURhdGEiLCJDdWJlVGV4dHVyZVdlYkdMLnVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheSIsIkN1YmVUZXh0dXJlV2ViR0wuc2l6ZSIsIkN1YmVUZXh0dXJlV2ViR0wuZ2xUZXh0dXJlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFVBQVUsV0FBZSxpQ0FBaUMsQ0FBQyxDQUFDO0FBSW5FLElBQU8sZ0JBQWdCLFdBQWMsa0RBQWtELENBQUMsQ0FBQztBQUV6RixJQUFNLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUF5QkE7SUFTOUNBLFNBVEtBLGdCQUFnQkEsQ0FTVEEsRUFBd0JBLEVBQUVBLElBQVdBO1FBRWhEQyxrQkFBTUEsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFSSEEsK0JBQTBCQSxHQUFpQkEsSUFBSUEsS0FBS0EsQ0FBU0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFakVBLGdCQUFXQSxHQUFVQSxhQUFhQSxDQUFDQTtRQU96Q0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDbEJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEVBQUVBLENBQUNBO1FBRXpDQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLENBQUNBLDJCQUEyQkEsQ0FBQ0E7UUFDcEVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0EsMkJBQTJCQSxDQUFDQTtRQUNwRUEsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxDQUFDQSwyQkFBMkJBLENBQUNBO1FBQ3BFQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLENBQUNBLDJCQUEyQkEsQ0FBQ0E7UUFDcEVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0EsMkJBQTJCQSxDQUFDQTtRQUNwRUEsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxDQUFDQSwyQkFBMkJBLENBQUNBO0lBQ3JFQSxDQUFDQTtJQUVNRCxrQ0FBT0EsR0FBZEE7UUFFQ0UsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7SUFDdkNBLENBQUNBO0lBSU1GLHlDQUFjQSxHQUFyQkEsVUFBc0JBLElBQVFBLEVBQUVBLElBQVdBLEVBQUVBLFFBQW1CQTtRQUFuQkcsd0JBQW1CQSxHQUFuQkEsWUFBbUJBO1FBRS9EQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxZQUFZQSxVQUFVQSxDQUFDQTtZQUM5QkEsSUFBSUEsR0FBaUJBLElBQUtBLENBQUNBLFNBQVNBLENBQUNBO1FBRXRDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1FBQy9EQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLElBQUlBLENBQUNBLEVBQUVBLFFBQVFBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO1FBQ2pJQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO0lBQ3ZEQSxDQUFDQTtJQUVNSCwrREFBb0NBLEdBQTNDQSxVQUE0Q0EsSUFBY0EsRUFBRUEsZUFBZUEsQ0FBUUEsUUFBREEsQUFBU0EsRUFBRUEsS0FBcUJBO1FBQXJCSSxxQkFBcUJBLEdBQXJCQSxhQUFxQkE7SUFHbEhBLENBQUNBO0lBRURKLHNCQUFXQSxrQ0FBSUE7YUFBZkE7WUFFQ0ssTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0E7UUFDbkJBLENBQUNBOzs7T0FBQUw7SUFFREEsc0JBQVdBLHVDQUFTQTthQUFwQkE7WUFFQ00sTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7UUFDdEJBLENBQUNBOzs7T0FBQU47SUFDRkEsdUJBQUNBO0FBQURBLENBdERBLEFBc0RDQSxFQXREOEIsZ0JBQWdCLEVBc0Q5QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvQ3ViZVRleHR1cmVXZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgSUN1YmVUZXh0dXJlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUN1YmVUZXh0dXJlXCIpO1xuaW1wb3J0IFRleHR1cmVCYXNlV2ViR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvVGV4dHVyZUJhc2VXZWJHTFwiKTtcblxuY2xhc3MgQ3ViZVRleHR1cmVXZWJHTCBleHRlbmRzIFRleHR1cmVCYXNlV2ViR0wgaW1wbGVtZW50cyBJQ3ViZVRleHR1cmVcbntcblxuXHRwcml2YXRlIF90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5OkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPig2KTtcblxuXHRwdWJsaWMgdGV4dHVyZVR5cGU6c3RyaW5nID0gXCJ0ZXh0dXJlQ3ViZVwiO1xuXHRwcml2YXRlIF90ZXh0dXJlOldlYkdMVGV4dHVyZTtcblx0cHJpdmF0ZSBfc2l6ZTpudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoZ2w6V2ViR0xSZW5kZXJpbmdDb250ZXh0LCBzaXplOm51bWJlcilcblx0e1xuXHRcdHN1cGVyKGdsKTtcblx0XHR0aGlzLl9zaXplID0gc2l6ZTtcblx0XHR0aGlzLl90ZXh0dXJlID0gdGhpcy5fZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdFx0dGhpcy5fdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeVswXSA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDtcblx0XHR0aGlzLl90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5WzFdID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YO1xuXHRcdHRoaXMuX3RleHR1cmVTZWxlY3RvckRpY3Rpb25hcnlbMl0gPSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k7XG5cdFx0dGhpcy5fdGV4dHVyZVNlbGVjdG9yRGljdGlvbmFyeVszXSA9IGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWTtcblx0XHR0aGlzLl90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5WzRdID0gZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aO1xuXHRcdHRoaXMuX3RleHR1cmVTZWxlY3RvckRpY3Rpb25hcnlbNV0gPSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9nbC5kZWxldGVUZXh0dXJlKHRoaXMuX3RleHR1cmUpO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGJpdG1hcERhdGE6Qml0bWFwRGF0YSwgc2lkZTpudW1iZXIsIG1pcGxldmVsPzpudW1iZXIpO1xuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoaW1hZ2U6SFRNTEltYWdlRWxlbWVudCwgc2lkZTpudW1iZXIsIG1pcGxldmVsPzpudW1iZXIpO1xuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoZGF0YTphbnksIHNpZGU6bnVtYmVyLCBtaXBsZXZlbDpudW1iZXIgPSAwKVxuXHR7XG5cdFx0aWYgKGRhdGEgaW5zdGFuY2VvZiBCaXRtYXBEYXRhKVxuXHRcdFx0ZGF0YSA9ICg8Qml0bWFwRGF0YT4gZGF0YSkuaW1hZ2VEYXRhO1xuXG5cdFx0dGhpcy5fZ2wuYmluZFRleHR1cmUodGhpcy5fZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fdGV4dHVyZSk7XG5cdFx0dGhpcy5fZ2wudGV4SW1hZ2UyRCh0aGlzLl90ZXh0dXJlU2VsZWN0b3JEaWN0aW9uYXJ5W3NpZGVdLCBtaXBsZXZlbCwgdGhpcy5fZ2wuUkdCQSwgdGhpcy5fZ2wuUkdCQSwgdGhpcy5fZ2wuVU5TSUdORURfQllURSwgZGF0YSk7XG5cdFx0dGhpcy5fZ2wuYmluZFRleHR1cmUodGhpcy5fZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkQ29tcHJlc3NlZFRleHR1cmVGcm9tQnl0ZUFycmF5KGRhdGE6Qnl0ZUFycmF5LCBieXRlQXJyYXlPZmZzZXQ6bnVtYmVyIC8qdWludCovLCBhc3luYzpib29sZWFuID0gZmFsc2UpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIGdldCBzaXplKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZ2xUZXh0dXJlKCk6V2ViR0xUZXh0dXJlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZTtcblx0fVxufVxuXG5leHBvcnQgPSBDdWJlVGV4dHVyZVdlYkdMOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/IContextStageGL.js b/lib/core/stagegl/IContextStageGL.js deleted file mode 100755 index 83578578..00000000 --- a/lib/core/stagegl/IContextStageGL.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaWNvbnRleHRzdGFnZWdsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNHeUIiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgUmVuZGVyVGV4dHVyZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1JlbmRlclRleHR1cmVcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5pbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBJQ29udGV4dFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9kaXNwbGF5L0lDb250ZXh0XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgTWF0ZXJpYWxCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvTWF0ZXJpYWxCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEluZGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL0luZGV4RGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBNYXRlcmlhbERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9NYXRlcmlhbERhdGFcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFZlcnRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9WZXJ0ZXhEYXRhXCIpO1xuaW1wb3J0IElDdWJlVGV4dHVyZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDdWJlVGV4dHVyZVwiKTtcbmltcG9ydCBJSW5kZXhCdWZmZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JSW5kZXhCdWZmZXJcIik7XG5pbXBvcnQgSVByb2dyYW1cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lQcm9ncmFtXCIpO1xuaW1wb3J0IElUZXh0dXJlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVGV4dHVyZVwiKTtcbmltcG9ydCBJVGV4dHVyZUJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVmVydGV4QnVmZmVyXCIpO1xuXG5pbnRlcmZhY2UgSUNvbnRleHRTdGFnZUdMIGV4dGVuZHMgSUNvbnRleHRcbntcblx0c2V0UmVuZGVyVGFyZ2V0KHRhcmdldDpUZXh0dXJlUHJveHlCYXNlLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw/OmJvb2xlYW4sIHN1cmZhY2VTZWxlY3Rvcj86bnVtYmVyKTtcblxuXHRnZXRSZW5kZXJUZXh0dXJlKHRleHR1cmVQcm94eTpSZW5kZXJUZXh0dXJlKTpJVGV4dHVyZUJhc2U7XG5cblx0YWN0aXZhdGVCdWZmZXIoaW5kZXg6bnVtYmVyLCBidWZmZXI6VmVydGV4RGF0YSwgb2Zmc2V0Om51bWJlciwgZm9ybWF0OnN0cmluZyk7XG5cblx0ZGlzcG9zZVZlcnRleERhdGEoYnVmZmVyOlZlcnRleERhdGEpO1xuXG5cdGFjdGl2YXRlTWF0ZXJpYWxQYXNzKG1hdGVyaWFsUGFzc0RhdGE6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpO1xuXG5cdGFjdGl2YXRlUmVuZGVyVGV4dHVyZShpbmRleDpudW1iZXIsIHRleHR1cmVQcm94eTpSZW5kZXJUZXh0dXJlKTtcblxuXHRhY3RpdmF0ZVRleHR1cmUoaW5kZXg6bnVtYmVyLCB0ZXh0dXJlUHJveHk6VGV4dHVyZTJEQmFzZSk7XG5cblx0YWN0aXZhdGVDdWJlVGV4dHVyZShpbmRleDpudW1iZXIsIHRleHR1cmVQcm94eTpDdWJlVGV4dHVyZUJhc2UpO1xuXG5cdGdldEluZGV4QnVmZmVyKGJ1ZmZlcjpJbmRleERhdGEpOklJbmRleEJ1ZmZlcjtcblxuXHRnZXRNYXRlcmlhbChtYXRlcmlhbDpNYXRlcmlhbEJhc2UsIHByb2ZpbGU6c3RyaW5nKTpNYXRlcmlhbERhdGE7XG5cblx0ZGlzcG9zZUluZGV4RGF0YShidWZmZXI6SW5kZXhEYXRhKTtcblxuXHRjbGVhcihyZWQ/Om51bWJlciwgZ3JlZW4/Om51bWJlciwgYmx1ZT86bnVtYmVyLCBhbHBoYT86bnVtYmVyLCBkZXB0aD86bnVtYmVyLCBzdGVuY2lsPzpudW1iZXIsIG1hc2s/Om51bWJlcik7XG5cblx0Y29uZmlndXJlQmFja0J1ZmZlcih3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGFudGlBbGlhczpudW1iZXIsIGVuYWJsZURlcHRoQW5kU3RlbmNpbD86Ym9vbGVhbik7XG5cblx0Y3JlYXRlQ3ViZVRleHR1cmUoc2l6ZTpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlOmJvb2xlYW4sIHN0cmVhbWluZ0xldmVscz86bnVtYmVyKTpJQ3ViZVRleHR1cmU7XG5cblx0Y3JlYXRlSW5kZXhCdWZmZXIobnVtSW5kaWNlczpudW1iZXIpOklJbmRleEJ1ZmZlcjtcblxuXHRjcmVhdGVQcm9ncmFtKCk6SVByb2dyYW07XG5cblx0Y3JlYXRlVGV4dHVyZSh3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIsIGZvcm1hdDpzdHJpbmcsIG9wdGltaXplRm9yUmVuZGVyVG9UZXh0dXJlOmJvb2xlYW4sIHN0cmVhbWluZ0xldmVscz86bnVtYmVyKTpJVGV4dHVyZTtcblxuXHRjcmVhdGVWZXJ0ZXhCdWZmZXIobnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKTpJVmVydGV4QnVmZmVyO1xuXG5cdGRlYWN0aXZhdGVNYXRlcmlhbFBhc3MobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSk7XG5cblx0ZGlzcG9zZSgpO1xuXG5cdGRyYXdUb0JpdG1hcERhdGEoZGVzdGluYXRpb246Qml0bWFwRGF0YSk7XG5cblx0ZHJhd1RyaWFuZ2xlcyhpbmRleEJ1ZmZlcjpJSW5kZXhCdWZmZXIsIGZpcnN0SW5kZXg/Om51bWJlciwgbnVtVHJpYW5nbGVzPzpudW1iZXIpO1xuXG5cdHByZXNlbnQoKTtcblxuXHRzZXRCbGVuZEZhY3RvcnMoc291cmNlRmFjdG9yOnN0cmluZywgZGVzdGluYXRpb25GYWN0b3I6c3RyaW5nKTtcblxuXHRzZXRDb2xvck1hc2socmVkOmJvb2xlYW4sIGdyZWVuOmJvb2xlYW4sIGJsdWU6Ym9vbGVhbiwgYWxwaGE6Ym9vbGVhbik7XG5cblx0c2V0Q3VsbGluZyh0cmlhbmdsZUZhY2VUb0N1bGw6c3RyaW5nLCBjb29yZGluYXRlU3lzdGVtPzpzdHJpbmcpO1xuXG5cdHNldERlcHRoVGVzdChkZXB0aE1hc2s6Ym9vbGVhbiwgcGFzc0NvbXBhcmVNb2RlOnN0cmluZyk7XG5cblx0c2V0UHJvZ3JhbShwcm9ncmFtOklQcm9ncmFtKTtcblxuXHRzZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChwcm9ncmFtVHlwZTpzdHJpbmcsIGZpcnN0UmVnaXN0ZXI6bnVtYmVyLCBtYXRyaXg6TWF0cml4M0QsIHRyYW5zcG9zZWRNYXRyaXg/OmJvb2xlYW4pO1xuXG5cdHNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkocHJvZ3JhbVR5cGU6c3RyaW5nLCBmaXJzdFJlZ2lzdGVyOm51bWJlciwgZGF0YTpudW1iZXJbXSwgbnVtUmVnaXN0ZXJzPzpudW1iZXIpO1xuXG5cdHNldFNhbXBsZXJTdGF0ZUF0KHNhbXBsZXI6bnVtYmVyLCB3cmFwOnN0cmluZywgZmlsdGVyOnN0cmluZywgbWlwZmlsdGVyOnN0cmluZyk7XG5cblx0c2V0U2Npc3NvclJlY3RhbmdsZShyZWN0YW5nbGU6UmVjdGFuZ2xlKTtcblxuXHRzZXRUZXh0dXJlQXQoc2FtcGxlcjpudW1iZXIsIHRleHR1cmU6SVRleHR1cmVCYXNlKTtcblxuXHRzZXRWZXJ0ZXhCdWZmZXJBdChpbmRleDpudW1iZXIsIGJ1ZmZlcjpJVmVydGV4QnVmZmVyLCBidWZmZXJPZmZzZXQ/Om51bWJlciwgZm9ybWF0PzpzdHJpbmcpO1xuXG5cdHNldFJlbmRlclRvVGV4dHVyZSh0YXJnZXQ6SVRleHR1cmVCYXNlLCBlbmFibGVEZXB0aEFuZFN0ZW5jaWw/OmJvb2xlYW4sIGFudGlBbGlhcz86bnVtYmVyLCBzdXJmYWNlU2VsZWN0b3I/Om51bWJlcik7XG5cblx0c2V0UmVuZGVyVG9CYWNrQnVmZmVyKCk7XG5cblx0Y2FsY0FuaW1hdGlvbkNvZGUobWF0ZXJpYWw6TWF0ZXJpYWxCYXNlLCBtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGEpO1xufVxuXG5leHBvcnQgPSBJQ29udGV4dFN0YWdlR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ICubeTexture.js b/lib/core/stagegl/ICubeTexture.js deleted file mode 100755 index 96776b6c..00000000 --- a/lib/core/stagegl/ICubeTexture.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaWN1YmV0ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVzQiIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvSUN1YmVUZXh0dXJlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmltcG9ydCBJVGV4dHVyZUJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVGV4dHVyZUJhc2VcIik7XG5cbmludGVyZmFjZSBJQ3ViZVRleHR1cmUgZXh0ZW5kcyBJVGV4dHVyZUJhc2Vcbntcblx0c2l6ZTpudW1iZXI7XG5cblx0dXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBzaWRlOm51bWJlciwgbWlwbGV2ZWw/Om51bWJlcik7XG5cdHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIHNpZGU6bnVtYmVyLCBtaXBsZXZlbD86bnVtYmVyKTtcblxuXHR1cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkoZGF0YTpCeXRlQXJyYXksIGJ5dGVBcnJheU9mZnNldDpudW1iZXIsIGFzeW5jOmJvb2xlYW4pO1xufVxuXG5leHBvcnQgPSBJQ3ViZVRleHR1cmU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/IIndexBuffer.js b/lib/core/stagegl/IIndexBuffer.js deleted file mode 100755 index 3f38f8dc..00000000 --- a/lib/core/stagegl/IIndexBuffer.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaWluZGV4YnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNzQiIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvSUluZGV4QnVmZmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBJSW5kZXhCdWZmZXJcbntcblx0bnVtSW5kaWNlczpudW1iZXI7XG5cblx0dXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0T2Zmc2V0Om51bWJlciwgY291bnQ6bnVtYmVyKTtcblxuXHRkaXNwb3NlKCk7XG59XG5cbmV4cG9ydCA9IElJbmRleEJ1ZmZlcjsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/IProgram.js b/lib/core/stagegl/IProgram.js deleted file mode 100755 index 8621d4b0..00000000 --- a/lib/core/stagegl/IProgram.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaXByb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU2tCIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9JUHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmludGVyZmFjZSBJUHJvZ3JhbVxue1xuXHR1cGxvYWQodmVydGV4UHJvZ3JhbTpCeXRlQXJyYXksIGZyYWdtZW50UHJvZ3JhbTpCeXRlQXJyYXkpO1xuXG5cdGRpc3Bvc2UoKTtcbn1cblxuZXhwb3J0ID0gSVByb2dyYW07Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ITexture.js b/lib/core/stagegl/ITexture.js deleted file mode 100755 index a2e10ab2..00000000 --- a/lib/core/stagegl/ITexture.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaXRleHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZWtCIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9JVGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0bWFwRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvYmFzZS9CaXRtYXBEYXRhXCIpO1xuXG5pbXBvcnQgSVRleHR1cmVCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVRleHR1cmVCYXNlXCIpO1xuXG5pbnRlcmZhY2UgSVRleHR1cmUgZXh0ZW5kcyBJVGV4dHVyZUJhc2Vcbntcblx0d2lkdGg6bnVtYmVyO1xuXG5cdGhlaWdodDpudW1iZXI7XG5cblx0dXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0dXBsb2FkRnJvbURhdGEoaW1hZ2U6SFRNTEltYWdlRWxlbWVudCwgbWlwbGV2ZWw/Om51bWJlcik7XG5cbn1cblxuZXhwb3J0ID0gSVRleHR1cmU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ITextureBase.js b/lib/core/stagegl/ITextureBase.js deleted file mode 100755 index 056195ed..00000000 --- a/lib/core/stagegl/ITextureBase.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaXRleHR1cmViYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtzQiIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvSVRleHR1cmVCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBJVGV4dHVyZUJhc2Vcbntcblx0ZGlzcG9zZSgpO1xufVxuXG5leHBvcnQgPSBJVGV4dHVyZUJhc2U7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/IVertexBuffer.js b/lib/core/stagegl/IVertexBuffer.js deleted file mode 100755 index 7c958568..00000000 --- a/lib/core/stagegl/IVertexBuffer.js +++ /dev/null @@ -1,3 +0,0 @@ - - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaXZlcnRleGJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXdUIiLCJmaWxlIjoiY29yZS9zdGFnZWdsL0lWZXJ0ZXhCdWZmZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIElWZXJ0ZXhCdWZmZXJcbntcblx0bnVtVmVydGljZXM6bnVtYmVyO1xuXG5cdGRhdGEzMlBlclZlcnRleDpudW1iZXI7XG5cblx0dXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0VmVydGV4Om51bWJlciwgbnVtVmVydGljZXM6bnVtYmVyKTtcblxuXHRkaXNwb3NlKCk7XG59XG5cbmV4cG9ydCA9IElWZXJ0ZXhCdWZmZXI7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/IndexBufferWebGL.js b/lib/core/stagegl/IndexBufferWebGL.js deleted file mode 100755 index 3b6b258f..00000000 --- a/lib/core/stagegl/IndexBufferWebGL.js +++ /dev/null @@ -1,33 +0,0 @@ -var IndexBufferWebGL = (function () { - function IndexBufferWebGL(gl, numIndices) { - this._gl = gl; - this._buffer = this._gl.createBuffer(); - this._numIndices = numIndices; - } - IndexBufferWebGL.prototype.uploadFromArray = function (data, startOffset, count) { - this._gl.bindBuffer(this._gl.ELEMENT_ARRAY_BUFFER, this._buffer); - // TODO add index offsets - this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), this._gl.STATIC_DRAW); - }; - IndexBufferWebGL.prototype.dispose = function () { - this._gl.deleteBuffer(this._buffer); - }; - Object.defineProperty(IndexBufferWebGL.prototype, "numIndices", { - get: function () { - return this._numIndices; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(IndexBufferWebGL.prototype, "glBuffer", { - get: function () { - return this._buffer; - }, - enumerable: true, - configurable: true - }); - return IndexBufferWebGL; -})(); -module.exports = IndexBufferWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvaW5kZXhidWZmZXJ3ZWJnbC50cyJdLCJuYW1lcyI6WyJJbmRleEJ1ZmZlcldlYkdMIiwiSW5kZXhCdWZmZXJXZWJHTC5jb25zdHJ1Y3RvciIsIkluZGV4QnVmZmVyV2ViR0wudXBsb2FkRnJvbUFycmF5IiwiSW5kZXhCdWZmZXJXZWJHTC5kaXNwb3NlIiwiSW5kZXhCdWZmZXJXZWJHTC5udW1JbmRpY2VzIiwiSW5kZXhCdWZmZXJXZWJHTC5nbEJ1ZmZlciJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTSxnQkFBZ0I7SUFPckJBLFNBUEtBLGdCQUFnQkEsQ0FPVEEsRUFBd0JBLEVBQUVBLFVBQWlCQTtRQUV0REMsSUFBSUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsQ0FBQ0E7UUFDZEEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0E7UUFDdkNBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLFVBQVVBLENBQUNBO0lBQy9CQSxDQUFDQTtJQUVNRCwwQ0FBZUEsR0FBdEJBLFVBQXVCQSxJQUFhQSxFQUFFQSxXQUFrQkEsRUFBRUEsS0FBWUE7UUFFckVFLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLG9CQUFvQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7UUFFakVBLEFBQ0FBLHlCQUR5QkE7UUFDekJBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLG9CQUFvQkEsRUFBRUEsSUFBSUEsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0E7SUFDakdBLENBQUNBO0lBRU1GLGtDQUFPQSxHQUFkQTtRQUVDRyxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtJQUNyQ0EsQ0FBQ0E7SUFFREgsc0JBQVdBLHdDQUFVQTthQUFyQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFDekJBLENBQUNBOzs7T0FBQUo7SUFFREEsc0JBQVdBLHNDQUFRQTthQUFuQkE7WUFFQ0ssTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDckJBLENBQUNBOzs7T0FBQUw7SUFDRkEsdUJBQUNBO0FBQURBLENBcENBLEFBb0NDQSxJQUFBO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9JbmRleEJ1ZmZlcldlYkdMLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJSW5kZXhCdWZmZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JSW5kZXhCdWZmZXJcIik7XG5cbmNsYXNzIEluZGV4QnVmZmVyV2ViR0wgaW1wbGVtZW50cyBJSW5kZXhCdWZmZXJcbntcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX251bUluZGljZXM6bnVtYmVyO1xuXHRwcml2YXRlIF9idWZmZXI6V2ViR0xCdWZmZXI7XG5cblx0Y29uc3RydWN0b3IoZ2w6V2ViR0xSZW5kZXJpbmdDb250ZXh0LCBudW1JbmRpY2VzOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2dsID0gZ2w7XG5cdFx0dGhpcy5fYnVmZmVyID0gdGhpcy5fZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdFx0dGhpcy5fbnVtSW5kaWNlcyA9IG51bUluZGljZXM7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbUFycmF5KGRhdGE6bnVtYmVyW10sIHN0YXJ0T2Zmc2V0Om51bWJlciwgY291bnQ6bnVtYmVyKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9nbC5iaW5kQnVmZmVyKHRoaXMuX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLl9idWZmZXIpO1xuXG5cdFx0Ly8gVE9ETyBhZGQgaW5kZXggb2Zmc2V0c1xuXHRcdHRoaXMuX2dsLmJ1ZmZlckRhdGEodGhpcy5fZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBVaW50MTZBcnJheShkYXRhKSwgdGhpcy5fZ2wuU1RBVElDX0RSQVcpO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKTp2b2lkXG5cdHtcblx0XHR0aGlzLl9nbC5kZWxldGVCdWZmZXIodGhpcy5fYnVmZmVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtSW5kaWNlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bUluZGljZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGdsQnVmZmVyKCk6V2ViR0xCdWZmZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXI7XG5cdH1cbn1cblxuZXhwb3J0ID0gSW5kZXhCdWZmZXJXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/OpCodes.js b/lib/core/stagegl/OpCodes.js deleted file mode 100755 index 123e431e..00000000 --- a/lib/core/stagegl/OpCodes.js +++ /dev/null @@ -1,52 +0,0 @@ -var OpCodes = (function () { - function OpCodes() { - } - OpCodes.trueValue = 32; - OpCodes.falseValue = 33; - OpCodes.intMask = 63; - OpCodes.drawTriangles = 41; - OpCodes.setProgramConstant = 42; - OpCodes.setProgram = 43; - OpCodes.present = 44; - OpCodes.clear = 45; - OpCodes.initProgram = 46; - OpCodes.initVertexBuffer = 47; - OpCodes.initIndexBuffer = 48; - OpCodes.configureBackBuffer = 49; - OpCodes.uploadArrayIndexBuffer = 50; - OpCodes.uploadArrayVertexBuffer = 51; - OpCodes.uploadAGALBytesProgram = 52; - OpCodes.setVertexBufferAt = 53; - OpCodes.uploadBytesIndexBuffer = 54; - OpCodes.uploadBytesVertexBuffer = 55; - OpCodes.setColorMask = 56; - OpCodes.setDepthTest = 57; - OpCodes.disposeProgram = 58; - OpCodes.disposeContext = 59; - // must skip 60 '<' as it will invalidate xml being passed over the bridge - OpCodes.disposeVertexBuffer = 61; - // must skip 62 '>' as it will invalidate xml being passed over the bridge - OpCodes.disposeIndexBuffer = 63; - OpCodes.initTexture = 64; - OpCodes.setTextureAt = 65; - OpCodes.uploadBytesTexture = 66; - OpCodes.disposeTexture = 67; - OpCodes.setCulling = 68; - OpCodes.setScissorRect = 69; - OpCodes.clearScissorRect = 70; - OpCodes.setBlendFactors = 71; - OpCodes.setRenderToTexture = 72; - OpCodes.clearTextureAt = 73; - OpCodes.clearVertexBufferAt = 74; - OpCodes.setStencilActions = 75; - OpCodes.setStencilReferenceValue = 76; - OpCodes.initCubeTexture = 77; - OpCodes.disposeCubeTexture = 78; - OpCodes.uploadBytesCubeTexture = 79; - OpCodes.clearRenderToTexture = 80; - OpCodes.enableErrorChecking = 81; - return OpCodes; -})(); -module.exports = OpCodes; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvb3Bjb2Rlcy50cyJdLCJuYW1lcyI6WyJPcENvZGVzIiwiT3BDb2Rlcy5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxPQUFPO0lBQWJBLFNBQU1BLE9BQU9BO0lBOENiQyxDQUFDQTtJQTVDY0QsaUJBQVNBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3RCQSxrQkFBVUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDdkJBLGVBQU9BLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3BCQSxxQkFBYUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDMUJBLDBCQUFrQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDL0JBLGtCQUFVQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUN2QkEsZUFBT0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDcEJBLGFBQUtBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ2xCQSxtQkFBV0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDeEJBLHdCQUFnQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDN0JBLHVCQUFlQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM1QkEsMkJBQW1CQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNoQ0EsOEJBQXNCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNuQ0EsK0JBQXVCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNwQ0EsOEJBQXNCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNuQ0EseUJBQWlCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM5QkEsOEJBQXNCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNuQ0EsK0JBQXVCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNwQ0Esb0JBQVlBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3pCQSxvQkFBWUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDekJBLHNCQUFjQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMzQkEsc0JBQWNBLEdBQVVBLEVBQUVBLENBQUNBO0lBQ3pDQSwwRUFBMEVBO0lBQzVEQSwyQkFBbUJBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzlDQSwwRUFBMEVBO0lBQzVEQSwwQkFBa0JBLEdBQVVBLEVBQUVBLENBQUNBO0lBQy9CQSxtQkFBV0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDeEJBLG9CQUFZQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUN6QkEsMEJBQWtCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMvQkEsc0JBQWNBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzNCQSxrQkFBVUEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDdkJBLHNCQUFjQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMzQkEsd0JBQWdCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM3QkEsdUJBQWVBLEdBQVVBLEVBQUVBLENBQUNBO0lBQzVCQSwwQkFBa0JBLEdBQVVBLEVBQUVBLENBQUNBO0lBQy9CQSxzQkFBY0EsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDM0JBLDJCQUFtQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDaENBLHlCQUFpQkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDOUJBLGdDQUF3QkEsR0FBVUEsRUFBRUEsQ0FBQ0E7SUFDckNBLHVCQUFlQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUM1QkEsMEJBQWtCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMvQkEsOEJBQXNCQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNuQ0EsNEJBQW9CQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUNqQ0EsMkJBQW1CQSxHQUFVQSxFQUFFQSxDQUFDQTtJQUMvQ0EsY0FBQ0E7QUFBREEsQ0E5Q0EsQUE4Q0NBLElBQUE7QUFFRCxBQUFpQixpQkFBUixPQUFPLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL09wQ29kZXMuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgT3BDb2Rlc1xue1xuXHRwdWJsaWMgc3RhdGljIHRydWVWYWx1ZTpudW1iZXIgPSAzMjtcblx0cHVibGljIHN0YXRpYyBmYWxzZVZhbHVlOm51bWJlciA9IDMzO1xuXHRwdWJsaWMgc3RhdGljIGludE1hc2s6bnVtYmVyID0gNjM7XG5cdHB1YmxpYyBzdGF0aWMgZHJhd1RyaWFuZ2xlczpudW1iZXIgPSA0MTtcblx0cHVibGljIHN0YXRpYyBzZXRQcm9ncmFtQ29uc3RhbnQ6bnVtYmVyID0gNDI7XG5cdHB1YmxpYyBzdGF0aWMgc2V0UHJvZ3JhbTpudW1iZXIgPSA0Mztcblx0cHVibGljIHN0YXRpYyBwcmVzZW50Om51bWJlciA9IDQ0O1xuXHRwdWJsaWMgc3RhdGljIGNsZWFyOm51bWJlciA9IDQ1O1xuXHRwdWJsaWMgc3RhdGljIGluaXRQcm9ncmFtOm51bWJlciA9IDQ2O1xuXHRwdWJsaWMgc3RhdGljIGluaXRWZXJ0ZXhCdWZmZXI6bnVtYmVyID0gNDc7XG5cdHB1YmxpYyBzdGF0aWMgaW5pdEluZGV4QnVmZmVyOm51bWJlciA9IDQ4O1xuXHRwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZUJhY2tCdWZmZXI6bnVtYmVyID0gNDk7XG5cdHB1YmxpYyBzdGF0aWMgdXBsb2FkQXJyYXlJbmRleEJ1ZmZlcjpudW1iZXIgPSA1MDtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRBcnJheVZlcnRleEJ1ZmZlcjpudW1iZXIgPSA1MTtcblx0cHVibGljIHN0YXRpYyB1cGxvYWRBR0FMQnl0ZXNQcm9ncmFtOm51bWJlciA9IDUyO1xuXHRwdWJsaWMgc3RhdGljIHNldFZlcnRleEJ1ZmZlckF0Om51bWJlciA9IDUzO1xuXHRwdWJsaWMgc3RhdGljIHVwbG9hZEJ5dGVzSW5kZXhCdWZmZXI6bnVtYmVyID0gNTQ7XG5cdHB1YmxpYyBzdGF0aWMgdXBsb2FkQnl0ZXNWZXJ0ZXhCdWZmZXI6bnVtYmVyID0gNTU7XG5cdHB1YmxpYyBzdGF0aWMgc2V0Q29sb3JNYXNrOm51bWJlciA9IDU2O1xuXHRwdWJsaWMgc3RhdGljIHNldERlcHRoVGVzdDpudW1iZXIgPSA1Nztcblx0cHVibGljIHN0YXRpYyBkaXNwb3NlUHJvZ3JhbTpudW1iZXIgPSA1ODtcblx0cHVibGljIHN0YXRpYyBkaXNwb3NlQ29udGV4dDpudW1iZXIgPSA1OTtcblx0Ly8gbXVzdCBza2lwIDYwICc8JyBhcyBpdCB3aWxsIGludmFsaWRhdGUgeG1sIGJlaW5nIHBhc3NlZCBvdmVyIHRoZSBicmlkZ2Vcblx0cHVibGljIHN0YXRpYyBkaXNwb3NlVmVydGV4QnVmZmVyOm51bWJlciA9IDYxO1xuXHQvLyBtdXN0IHNraXAgNjIgJz4nIGFzIGl0IHdpbGwgaW52YWxpZGF0ZSB4bWwgYmVpbmcgcGFzc2VkIG92ZXIgdGhlIGJyaWRnZVxuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VJbmRleEJ1ZmZlcjpudW1iZXIgPSA2Mztcblx0cHVibGljIHN0YXRpYyBpbml0VGV4dHVyZTpudW1iZXIgPSA2NDtcblx0cHVibGljIHN0YXRpYyBzZXRUZXh0dXJlQXQ6bnVtYmVyID0gNjU7XG5cdHB1YmxpYyBzdGF0aWMgdXBsb2FkQnl0ZXNUZXh0dXJlOm51bWJlciA9IDY2O1xuXHRwdWJsaWMgc3RhdGljIGRpc3Bvc2VUZXh0dXJlOm51bWJlciA9IDY3O1xuXHRwdWJsaWMgc3RhdGljIHNldEN1bGxpbmc6bnVtYmVyID0gNjg7XG5cdHB1YmxpYyBzdGF0aWMgc2V0U2Npc3NvclJlY3Q6bnVtYmVyID0gNjk7XG5cdHB1YmxpYyBzdGF0aWMgY2xlYXJTY2lzc29yUmVjdDpudW1iZXIgPSA3MDtcblx0cHVibGljIHN0YXRpYyBzZXRCbGVuZEZhY3RvcnM6bnVtYmVyID0gNzE7XG5cdHB1YmxpYyBzdGF0aWMgc2V0UmVuZGVyVG9UZXh0dXJlOm51bWJlciA9IDcyO1xuXHRwdWJsaWMgc3RhdGljIGNsZWFyVGV4dHVyZUF0Om51bWJlciA9IDczO1xuXHRwdWJsaWMgc3RhdGljIGNsZWFyVmVydGV4QnVmZmVyQXQ6bnVtYmVyID0gNzQ7XG5cdHB1YmxpYyBzdGF0aWMgc2V0U3RlbmNpbEFjdGlvbnM6bnVtYmVyID0gNzU7XG5cdHB1YmxpYyBzdGF0aWMgc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVlOm51bWJlciA9IDc2O1xuXHRwdWJsaWMgc3RhdGljIGluaXRDdWJlVGV4dHVyZTpudW1iZXIgPSA3Nztcblx0cHVibGljIHN0YXRpYyBkaXNwb3NlQ3ViZVRleHR1cmU6bnVtYmVyID0gNzg7XG5cdHB1YmxpYyBzdGF0aWMgdXBsb2FkQnl0ZXNDdWJlVGV4dHVyZTpudW1iZXIgPSA3OTtcblx0cHVibGljIHN0YXRpYyBjbGVhclJlbmRlclRvVGV4dHVyZTpudW1iZXIgPSA4MDtcblx0cHVibGljIHN0YXRpYyBlbmFibGVFcnJvckNoZWNraW5nOm51bWJlciA9IDgxO1xufVxuXG5leHBvcnQgPSBPcENvZGVzOyJdfQ== \ No newline at end of file diff --git a/lib/core/stagegl/ProgramFlash.js b/lib/core/stagegl/ProgramFlash.js deleted file mode 100755 index 20aaef53..00000000 --- a/lib/core/stagegl/ProgramFlash.js +++ /dev/null @@ -1,34 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var ContextStage3D = require("awayjs-stagegl/lib/core/stagegl/ContextStage3D"); -var OpCodes = require("awayjs-stagegl/lib/core/stagegl/OpCodes"); -var ResourceBaseFlash = require("awayjs-stagegl/lib/core/stagegl/ResourceBaseFlash"); -var ProgramFlash = (function (_super) { - __extends(ProgramFlash, _super); - function ProgramFlash(context) { - _super.call(this); - this._context = context; - this._context.addStream(String.fromCharCode(OpCodes.initProgram)); - this._pId = this._context.execute(); - this._context._iAddResource(this); - } - ProgramFlash.prototype.upload = function (vertexProgram, fragmentProgram) { - this._context.addStream(String.fromCharCode(OpCodes.uploadAGALBytesProgram, this._pId + OpCodes.intMask) + vertexProgram.readBase64String(vertexProgram.length) + "%" + fragmentProgram.readBase64String(fragmentProgram.length) + "%"); - if (ContextStage3D.debug) - this._context.execute(); - }; - ProgramFlash.prototype.dispose = function () { - this._context.addStream(String.fromCharCode(OpCodes.disposeProgram, this._pId + OpCodes.intMask)); - this._context.execute(); - this._context._iRemoveResource(this); - this._context = null; - }; - return ProgramFlash; -})(ResourceBaseFlash); -module.exports = ProgramFlash; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvcHJvZ3JhbWZsYXNoLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1GbGFzaCIsIlByb2dyYW1GbGFzaC5jb25zdHJ1Y3RvciIsIlByb2dyYW1GbGFzaC51cGxvYWQiLCJQcm9ncmFtRmxhc2guZGlzcG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxjQUFjLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUVyRixJQUFPLE9BQU8sV0FBZ0IseUNBQXlDLENBQUMsQ0FBQztBQUN6RSxJQUFPLGlCQUFpQixXQUFhLG1EQUFtRCxDQUFDLENBQUM7QUFFMUYsSUFBTSxZQUFZO0lBQVNBLFVBQXJCQSxZQUFZQSxVQUEwQkE7SUFJM0NBLFNBSktBLFlBQVlBLENBSUxBLE9BQXNCQTtRQUVqQ0MsaUJBQU9BLENBQUNBO1FBRVJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3hCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNsRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO0lBQ25DQSxDQUFDQTtJQUVNRCw2QkFBTUEsR0FBYkEsVUFBY0EsYUFBdUJBLEVBQUVBLGVBQXlCQTtRQUUvREUsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsT0FBT0EsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFHQSxhQUFhQSxDQUFDQSxnQkFBZ0JBLENBQUNBLGFBQWFBLENBQUNBLE1BQU1BLENBQUNBLEdBQUdBLEdBQUdBLEdBQUdBLGVBQWVBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFeE9BLEVBQUVBLENBQUNBLENBQUNBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBO1lBQ3hCQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtJQUMxQkEsQ0FBQ0E7SUFFTUYsOEJBQU9BLEdBQWRBO1FBRUNHLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLGNBQWNBLEVBQUVBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLE9BQU9BLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBO1FBQ2xHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVyQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDdEJBLENBQUNBO0lBQ0ZILG1CQUFDQTtBQUFEQSxDQTlCQSxBQThCQ0EsRUE5QjBCLGlCQUFpQixFQThCM0M7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL1Byb2dyYW1GbGFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnl0ZUFycmF5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9CeXRlQXJyYXlcIik7XG5cbmltcG9ydCBDb250ZXh0U3RhZ2UzRFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0U3RhZ2UzRFwiKTtcbmltcG9ydCBJUHJvZ3JhbVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVByb2dyYW1cIik7XG5pbXBvcnQgT3BDb2Rlc1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvT3BDb2Rlc1wiKTtcbmltcG9ydCBSZXNvdXJjZUJhc2VGbGFzaFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvUmVzb3VyY2VCYXNlRmxhc2hcIik7XG5cbmNsYXNzIFByb2dyYW1GbGFzaCBleHRlbmRzIFJlc291cmNlQmFzZUZsYXNoIGltcGxlbWVudHMgSVByb2dyYW1cbntcblx0cHJpdmF0ZSBfY29udGV4dDpDb250ZXh0U3RhZ2UzRDtcblxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OkNvbnRleHRTdGFnZTNEKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX2NvbnRleHQuYWRkU3RyZWFtKFN0cmluZy5mcm9tQ2hhckNvZGUoT3BDb2Rlcy5pbml0UHJvZ3JhbSkpO1xuXHRcdHRoaXMuX3BJZCA9IHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lBZGRSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWQodmVydGV4UHJvZ3JhbTpCeXRlQXJyYXksIGZyYWdtZW50UHJvZ3JhbTpCeXRlQXJyYXkpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMudXBsb2FkQUdBTEJ5dGVzUHJvZ3JhbSwgdGhpcy5fcElkICsgT3BDb2Rlcy5pbnRNYXNrKSArIHZlcnRleFByb2dyYW0ucmVhZEJhc2U2NFN0cmluZyh2ZXJ0ZXhQcm9ncmFtLmxlbmd0aCkgKyBcIiVcIiArIGZyYWdtZW50UHJvZ3JhbS5yZWFkQmFzZTY0U3RyaW5nKGZyYWdtZW50UHJvZ3JhbS5sZW5ndGgpICsgXCIlXCIpO1xuXG5cdFx0aWYgKENvbnRleHRTdGFnZTNELmRlYnVnKVxuXHRcdFx0dGhpcy5fY29udGV4dC5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0LmFkZFN0cmVhbShTdHJpbmcuZnJvbUNoYXJDb2RlKE9wQ29kZXMuZGlzcG9zZVByb2dyYW0sIHRoaXMuX3BJZCArIE9wQ29kZXMuaW50TWFzaykpO1xuXHRcdHRoaXMuX2NvbnRleHQuZXhlY3V0ZSgpO1xuXHRcdHRoaXMuX2NvbnRleHQuX2lSZW1vdmVSZXNvdXJjZSh0aGlzKTtcblxuXHRcdHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IFByb2dyYW1GbGFzaDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/ProgramWebGL.js b/lib/core/stagegl/ProgramWebGL.js deleted file mode 100755 index 154216b1..00000000 --- a/lib/core/stagegl/ProgramWebGL.js +++ /dev/null @@ -1,51 +0,0 @@ -var AGALTokenizer = require("awayjs-stagegl/lib/aglsl/AGALTokenizer"); -var AGLSLParser = require("awayjs-stagegl/lib/aglsl/AGLSLParser"); -var ProgramWebGL = (function () { - function ProgramWebGL(gl) { - this._gl = gl; - this._program = this._gl.createProgram(); - } - ProgramWebGL.prototype.upload = function (vertexProgram, fragmentProgram) { - var vertexString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(vertexProgram)); - var fragmentString = ProgramWebGL._aglslParser.parse(ProgramWebGL._tokenizer.decribeAGALByteArray(fragmentProgram)); - this._vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER); - this._fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER); - this._gl.shaderSource(this._vertexShader, vertexString); - this._gl.compileShader(this._vertexShader); - if (!this._gl.getShaderParameter(this._vertexShader, this._gl.COMPILE_STATUS)) { - throw new Error(this._gl.getShaderInfoLog(this._vertexShader)); - return; - } - this._gl.shaderSource(this._fragmentShader, fragmentString); - this._gl.compileShader(this._fragmentShader); - if (!this._gl.getShaderParameter(this._fragmentShader, this._gl.COMPILE_STATUS)) { - throw new Error(this._gl.getShaderInfoLog(this._fragmentShader)); - return; - } - this._gl.attachShader(this._program, this._vertexShader); - this._gl.attachShader(this._program, this._fragmentShader); - this._gl.linkProgram(this._program); - if (!this._gl.getProgramParameter(this._program, this._gl.LINK_STATUS)) { - throw new Error(this._gl.getProgramInfoLog(this._program)); - } - }; - ProgramWebGL.prototype.dispose = function () { - this._gl.deleteProgram(this._program); - }; - ProgramWebGL.prototype.focusProgram = function () { - this._gl.useProgram(this._program); - }; - Object.defineProperty(ProgramWebGL.prototype, "glProgram", { - get: function () { - return this._program; - }, - enumerable: true, - configurable: true - }); - ProgramWebGL._tokenizer = new AGALTokenizer(); - ProgramWebGL._aglslParser = new AGLSLParser(); - return ProgramWebGL; -})(); -module.exports = ProgramWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvcHJvZ3JhbXdlYmdsLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1XZWJHTCIsIlByb2dyYW1XZWJHTC5jb25zdHJ1Y3RvciIsIlByb2dyYW1XZWJHTC51cGxvYWQiLCJQcm9ncmFtV2ViR0wuZGlzcG9zZSIsIlByb2dyYW1XZWJHTC5mb2N1c1Byb2dyYW0iLCJQcm9ncmFtV2ViR0wuZ2xQcm9ncmFtIl0sIm1hcHBpbmdzIjoiQUFFQSxJQUFPLGFBQWEsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzVFLElBQU8sV0FBVyxXQUFlLHNDQUFzQyxDQUFDLENBQUM7QUFJekUsSUFBTSxZQUFZO0lBVWpCQSxTQVZLQSxZQUFZQSxDQVVMQSxFQUF3QkE7UUFFbkNDLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBO1FBQ2RBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEVBQUVBLENBQUNBO0lBQzFDQSxDQUFDQTtJQUVNRCw2QkFBTUEsR0FBYkEsVUFBY0EsYUFBdUJBLEVBQUVBLGVBQXlCQTtRQUUvREUsSUFBSUEsWUFBWUEsR0FBVUEsWUFBWUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsVUFBVUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxhQUFhQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN2SEEsSUFBSUEsY0FBY0EsR0FBVUEsWUFBWUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsVUFBVUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUUzSEEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0E7UUFDbkVBLElBQUlB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QUN0QkEsQ0FBQ0E7OztPQUFBTDtJQTVEY0EsdUJBQVVBLEdBQWlCQSxJQUFJQSxhQUFhQSxFQUFFQSxDQUFDQTtJQUMvQ0EseUJBQVlBLEdBQWVBLElBQUlBLFdBQVdBLEVBQUVBLENBQUNBO0lBNEQ3REEsbUJBQUNBO0FBQURBLENBL0RBLEFBK0RDQSxJQUFBO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9Qcm9ncmFtV2ViR0wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgQUdBTFRva2VuaXplclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FnbHNsL0FHQUxUb2tlbml6ZXJcIik7XG5pbXBvcnQgQUdMU0xQYXJzZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FnbHNsL0FHTFNMUGFyc2VyXCIpO1xuaW1wb3J0IElQcm9ncmFtXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JUHJvZ3JhbVwiKTtcblxuXG5jbGFzcyBQcm9ncmFtV2ViR0wgaW1wbGVtZW50cyBJUHJvZ3JhbVxue1xuXHRwcml2YXRlIHN0YXRpYyBfdG9rZW5pemVyOkFHQUxUb2tlbml6ZXIgPSBuZXcgQUdBTFRva2VuaXplcigpO1xuXHRwcml2YXRlIHN0YXRpYyBfYWdsc2xQYXJzZXI6QUdMU0xQYXJzZXIgPSBuZXcgQUdMU0xQYXJzZXIoKTtcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX3Byb2dyYW06V2ViR0xQcm9ncmFtO1xuXHRwcml2YXRlIF92ZXJ0ZXhTaGFkZXI6V2ViR0xTaGFkZXI7XG5cdHByaXZhdGUgX2ZyYWdtZW50U2hhZGVyOldlYkdMU2hhZGVyO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dClcblx0e1xuXHRcdHRoaXMuX2dsID0gZ2w7XG5cdFx0dGhpcy5fcHJvZ3JhbSA9IHRoaXMuX2dsLmNyZWF0ZVByb2dyYW0oKTtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWQodmVydGV4UHJvZ3JhbTpCeXRlQXJyYXksIGZyYWdtZW50UHJvZ3JhbTpCeXRlQXJyYXkpXG5cdHtcblx0XHR2YXIgdmVydGV4U3RyaW5nOnN0cmluZyA9IFByb2dyYW1XZWJHTC5fYWdsc2xQYXJzZXIucGFyc2UoUHJvZ3JhbVdlYkdMLl90b2tlbml6ZXIuZGVjcmliZUFHQUxCeXRlQXJyYXkodmVydGV4UHJvZ3JhbSkpO1xuXHRcdHZhciBmcmFnbWVudFN0cmluZzpzdHJpbmcgPSBQcm9ncmFtV2ViR0wuX2FnbHNsUGFyc2VyLnBhcnNlKFByb2dyYW1XZWJHTC5fdG9rZW5pemVyLmRlY3JpYmVBR0FMQnl0ZUFycmF5KGZyYWdtZW50UHJvZ3JhbSkpO1xuXG5cdFx0dGhpcy5fdmVydGV4U2hhZGVyID0gdGhpcy5fZ2wuY3JlYXRlU2hhZGVyKHRoaXMuX2dsLlZFUlRFWF9TSEFERVIpO1xuXHRcdHRoaXMuX2ZyYWdtZW50U2hhZGVyID0gdGhpcy5fZ2wuY3JlYXRlU2hhZGVyKHRoaXMuX2dsLkZSQUdNRU5UX1NIQURFUik7XG5cblx0XHR0aGlzLl9nbC5zaGFkZXJTb3VyY2UodGhpcy5fdmVydGV4U2hhZGVyLCB2ZXJ0ZXhTdHJpbmcpO1xuXHRcdHRoaXMuX2dsLmNvbXBpbGVTaGFkZXIodGhpcy5fdmVydGV4U2hhZGVyKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX3ZlcnRleFNoYWRlciwgdGhpcy5fZ2wuQ09NUElMRV9TVEFUVVMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IodGhpcy5fZ2wuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl92ZXJ0ZXhTaGFkZXIpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9nbC5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U3RyaW5nKTtcblx0XHR0aGlzLl9nbC5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdtZW50U2hhZGVyKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdtZW50U2hhZGVyLCB0aGlzLl9nbC5DT01QSUxFX1NUQVRVUykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcih0aGlzLl9nbC5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdtZW50U2hhZGVyKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fZ2wuYXR0YWNoU2hhZGVyKHRoaXMuX3Byb2dyYW0sIHRoaXMuX3ZlcnRleFNoYWRlcik7XG5cdFx0dGhpcy5fZ2wuYXR0YWNoU2hhZGVyKHRoaXMuX3Byb2dyYW0sIHRoaXMuX2ZyYWdtZW50U2hhZGVyKTtcblx0XHR0aGlzLl9nbC5saW5rUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblxuXHRcdGlmICghdGhpcy5fZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9wcm9ncmFtLCB0aGlzLl9nbC5MSU5LX1NUQVRVUykpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcih0aGlzLl9nbC5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9wcm9ncmFtKSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblx0fVxuXG5cdHB1YmxpYyBmb2N1c1Byb2dyYW0oKVxuXHR7XG5cdFx0dGhpcy5fZ2wudXNlUHJvZ3JhbSh0aGlzLl9wcm9ncmFtKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZ2xQcm9ncmFtKCk6V2ViR0xQcm9ncmFtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvZ3JhbTtcblx0fVxufVxuXG5leHBvcnQgPSBQcm9ncmFtV2ViR0w7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/ResourceBaseFlash.js b/lib/core/stagegl/ResourceBaseFlash.js deleted file mode 100755 index 4b6039c0..00000000 --- a/lib/core/stagegl/ResourceBaseFlash.js +++ /dev/null @@ -1,17 +0,0 @@ -var ResourceBaseFlash = (function () { - function ResourceBaseFlash() { - } - Object.defineProperty(ResourceBaseFlash.prototype, "id", { - get: function () { - return this._pId; - }, - enumerable: true, - configurable: true - }); - ResourceBaseFlash.prototype.dispose = function () { - }; - return ResourceBaseFlash; -})(); -module.exports = ResourceBaseFlash; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvcmVzb3VyY2ViYXNlZmxhc2gudHMiXSwibmFtZXMiOlsiUmVzb3VyY2VCYXNlRmxhc2giLCJSZXNvdXJjZUJhc2VGbGFzaC5jb25zdHJ1Y3RvciIsIlJlc291cmNlQmFzZUZsYXNoLmlkIiwiUmVzb3VyY2VCYXNlRmxhc2guZGlzcG9zZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxpQkFBaUI7SUFBdkJBLFNBQU1BLGlCQUFpQkE7SUFhdkJDLENBQUNBO0lBVEFELHNCQUFXQSxpQ0FBRUE7YUFBYkE7WUFFQ0UsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDbEJBLENBQUNBOzs7T0FBQUY7SUFFTUEsbUNBQU9BLEdBQWRBO0lBR0FHLENBQUNBO0lBQ0ZILHdCQUFDQTtBQUFEQSxDQWJBLEFBYUNBLElBQUE7QUFFRCxBQUEyQixpQkFBbEIsaUJBQWlCLENBQUMiLCJmaWxlIjoiY29yZS9zdGFnZWdsL1Jlc291cmNlQmFzZUZsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIFJlc291cmNlQmFzZUZsYXNoXG57XG5cdHB1YmxpYyBfcElkOm51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IGlkKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcElkO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cblx0fVxufVxuXG5leHBvcnQgPSBSZXNvdXJjZUJhc2VGbGFzaDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/SamplerState.js b/lib/core/stagegl/SamplerState.js deleted file mode 100755 index 550e59a6..00000000 --- a/lib/core/stagegl/SamplerState.js +++ /dev/null @@ -1,8 +0,0 @@ -var SamplerState = (function () { - function SamplerState() { - } - return SamplerState; -})(); -module.exports = SamplerState; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvc2FtcGxlcnN0YXRlLnRzIl0sIm5hbWVzIjpbIlNhbXBsZXJTdGF0ZSIsIlNhbXBsZXJTdGF0ZS5jb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxZQUFZO0lBQWxCQSxTQUFNQSxZQUFZQTtJQU1sQkMsQ0FBQ0E7SUFBREQsbUJBQUNBO0FBQURBLENBTkEsQUFNQ0EsSUFBQTtBQUVELEFBQXNCLGlCQUFiLFlBQVksQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvU2FtcGxlclN0YXRlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIFNhbXBsZXJTdGF0ZVxue1xuXHRwdWJsaWMgdHlwZTpudW1iZXI7XG5cdHB1YmxpYyB3cmFwOm51bWJlcjtcblx0cHVibGljIGZpbHRlcjpudW1iZXI7XG5cdHB1YmxpYyBtaXBmaWx0ZXI6bnVtYmVyO1xufVxuXG5leHBvcnQgPSBTYW1wbGVyU3RhdGU7Il19 \ No newline at end of file diff --git a/lib/core/stagegl/TextureBaseWebGL.js b/lib/core/stagegl/TextureBaseWebGL.js deleted file mode 100755 index e2d8409b..00000000 --- a/lib/core/stagegl/TextureBaseWebGL.js +++ /dev/null @@ -1,21 +0,0 @@ -var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); -var TextureBaseWebGL = (function () { - function TextureBaseWebGL(gl) { - this.textureType = ""; - this._gl = gl; - } - TextureBaseWebGL.prototype.dispose = function () { - throw "Abstract method must be overridden."; - }; - Object.defineProperty(TextureBaseWebGL.prototype, "glTexture", { - get: function () { - throw new AbstractMethodError(); - }, - enumerable: true, - configurable: true - }); - return TextureBaseWebGL; -})(); -module.exports = TextureBaseWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvdGV4dHVyZWJhc2V3ZWJnbC50cyJdLCJuYW1lcyI6WyJUZXh0dXJlQmFzZVdlYkdMIiwiVGV4dHVyZUJhc2VXZWJHTC5jb25zdHJ1Y3RvciIsIlRleHR1cmVCYXNlV2ViR0wuZGlzcG9zZSIsIlRleHR1cmVCYXNlV2ViR0wuZ2xUZXh0dXJlIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLG1CQUFtQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFFckYsSUFBTSxnQkFBZ0I7SUFLckJBLFNBTEtBLGdCQUFnQkEsQ0FLVEEsRUFBd0JBO1FBSDdCQyxnQkFBV0EsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFLOUJBLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBO0lBQ2ZBLENBQUNBO0lBRU1ELGtDQUFPQSxHQUFkQTtRQUVDRSxNQUFNQSxxQ0FBcUNBLENBQUNBO0lBQzdDQSxDQUFDQTtJQUVERixzQkFBV0EsdUNBQVNBO2FBQXBCQTtZQUVDRyxNQUFNQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBO1FBQ2pDQSxDQUFDQTs7O09BQUFIO0lBQ0ZBLHVCQUFDQTtBQUFEQSxDQW5CQSxBQW1CQ0EsSUFBQTtBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJjb3JlL3N0YWdlZ2wvVGV4dHVyZUJhc2VXZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcblxuY2xhc3MgVGV4dHVyZUJhc2VXZWJHTFxue1xuXHRwdWJsaWMgdGV4dHVyZVR5cGU6c3RyaW5nID0gXCJcIjtcblx0cHVibGljIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cblx0Y29uc3RydWN0b3IoZ2w6V2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuXHR7XG5cdFx0dGhpcy5fZ2wgPSBnbDtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKCk6dm9pZFxuXHR7XG5cdFx0dGhyb3cgXCJBYnN0cmFjdCBtZXRob2QgbXVzdCBiZSBvdmVycmlkZGVuLlwiO1xuXHR9XG5cblx0cHVibGljIGdldCBnbFRleHR1cmUoKTpXZWJHTFRleHR1cmVcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVGV4dHVyZUJhc2VXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/TextureWebGL.js b/lib/core/stagegl/TextureWebGL.js deleted file mode 100755 index ec0b4f07..00000000 --- a/lib/core/stagegl/TextureWebGL.js +++ /dev/null @@ -1,86 +0,0 @@ -var __extends = this.__extends || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - __.prototype = b.prototype; - d.prototype = new __(); -}; -var BitmapData = require("awayjs-core/lib/base/BitmapData"); -var TextureBaseWebGL = require("awayjs-stagegl/lib/core/stagegl/TextureBaseWebGL"); -var TextureWebGL = (function (_super) { - __extends(TextureWebGL, _super); - function TextureWebGL(gl, width, height) { - _super.call(this, gl); - this.textureType = "texture2d"; - this._width = width; - this._height = height; - this._glTexture = this._gl.createTexture(); - } - TextureWebGL.prototype.dispose = function () { - this._gl.deleteTexture(this._glTexture); - }; - Object.defineProperty(TextureWebGL.prototype, "width", { - get: function () { - return this._width; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureWebGL.prototype, "height", { - get: function () { - return this._height; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureWebGL.prototype, "frameBuffer", { - get: function () { - if (!this._frameBuffer) { - this._frameBuffer = this._gl.createFramebuffer(); - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, this._frameBuffer); - this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); - this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._width, this._height, 0, this._gl.RGBA, this._gl.UNSIGNED_BYTE, null); - var renderBuffer = this._gl.createRenderbuffer(); - this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, renderBuffer); - this._gl.renderbufferStorage(this._gl.RENDERBUFFER, this._gl.DEPTH_COMPONENT16, this._width, this._height); - this._gl.framebufferTexture2D(this._gl.FRAMEBUFFER, this._gl.COLOR_ATTACHMENT0, this._gl.TEXTURE_2D, this._glTexture, 0); - this._gl.framebufferRenderbuffer(this._gl.FRAMEBUFFER, this._gl.DEPTH_ATTACHMENT, this._gl.RENDERBUFFER, renderBuffer); - this._gl.bindTexture(this._gl.TEXTURE_2D, null); - this._gl.bindRenderbuffer(this._gl.RENDERBUFFER, null); - this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, null); - } - return this._frameBuffer; - }, - enumerable: true, - configurable: true - }); - TextureWebGL.prototype.uploadFromData = function (data, miplevel) { - if (miplevel === void 0) { miplevel = 0; } - if (data instanceof BitmapData) - data = data.imageData; - this._gl.bindTexture(this._gl.TEXTURE_2D, this._glTexture); - this._gl.texImage2D(this._gl.TEXTURE_2D, miplevel, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, data); - this._gl.bindTexture(this._gl.TEXTURE_2D, null); - }; - TextureWebGL.prototype.uploadCompressedTextureFromByteArray = function (data, byteArrayOffset /*uint*/, async) { - if (async === void 0) { async = false; } - var ext = this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); - //this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this) - }; - Object.defineProperty(TextureWebGL.prototype, "glTexture", { - get: function () { - return this._glTexture; - }, - enumerable: true, - configurable: true - }); - TextureWebGL.prototype.generateMipmaps = function () { - //TODO: implement generating mipmaps - //this._gl.bindTexture( this._gl.TEXTURE_2D, this._glTexture ); - //this._gl.generateMipmap(this._gl.TEXTURE_2D); - //this._gl.bindTexture( this._gl.TEXTURE_2D, null ); - }; - return TextureWebGL; -})(TextureBaseWebGL); -module.exports = TextureWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvdGV4dHVyZXdlYmdsLnRzIl0sIm5hbWVzIjpbIlRleHR1cmVXZWJHTCIsIlRleHR1cmVXZWJHTC5jb25zdHJ1Y3RvciIsIlRleHR1cmVXZWJHTC5kaXNwb3NlIiwiVGV4dHVyZVdlYkdMLndpZHRoIiwiVGV4dHVyZVdlYkdMLmhlaWdodCIsIlRleHR1cmVXZWJHTC5mcmFtZUJ1ZmZlciIsIlRleHR1cmVXZWJHTC51cGxvYWRGcm9tRGF0YSIsIlRleHR1cmVXZWJHTC51cGxvYWRDb21wcmVzc2VkVGV4dHVyZUZyb21CeXRlQXJyYXkiLCJUZXh0dXJlV2ViR0wuZ2xUZXh0dXJlIiwiVGV4dHVyZVdlYkdMLmdlbmVyYXRlTWlwbWFwcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxVQUFVLFdBQWUsaUNBQWlDLENBQUMsQ0FBQztBQUluRSxJQUFPLGdCQUFnQixXQUFjLGtEQUFrRCxDQUFDLENBQUM7QUFFekYsSUFBTSxZQUFZO0lBQVNBLFVBQXJCQSxZQUFZQSxVQUF5QkE7SUFZMUNBLFNBWktBLFlBQVlBLENBWUxBLEVBQXdCQSxFQUFFQSxLQUFZQSxFQUFFQSxNQUFhQTtRQUVoRUMsa0JBQU1BLEVBQUVBLENBQUNBLENBQUNBO1FBWEpBLGdCQUFXQSxHQUFVQSxXQUFXQSxDQUFDQTtRQVl2Q0EsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDcEJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE1BQU1BLENBQUNBO1FBRXRCQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxFQUFFQSxDQUFDQTtJQUM1Q0EsQ0FBQ0E7SUFFTUQsOEJBQU9BLEdBQWRBO1FBRUNFLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBO0lBQ3pDQSxDQUFDQTtJQUVERixzQkFBV0EsK0JBQUtBO2FBQWhCQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUNwQkEsQ0FBQ0E7OztPQUFBSDtJQUVEQSxzQkFBV0EsZ0NBQU1BO2FBQWpCQTtZQUVDSSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUNyQkEsQ0FBQ0E7OztPQUFBSjtJQUVEQSxzQkFBV0EscUNBQVdBO2FBQXRCQTtZQUVDSyxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDeEJBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FBQ0E7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtnQkFDbEVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBO2dCQUMzREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsRUFBRUEsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsYUFBYUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7Z0JBRXRJQSxJQUFJQSxZQUFZQSxHQUFxQkEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxDQUFDQTtnQkFDbkVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsWUFBWUEsQ0FBQ0EsQ0FBQ0E7Z0JBQy9EQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxtQkFBbUJBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGlCQUFpQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7Z0JBRTNHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGlCQUFpQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsRUFBRUEsSUFBSUEsQ0FBQ0EsVUFBVUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3pIQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSx1QkFBdUJBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsWUFBWUEsQ0FBQ0EsQ0FBQ0E7Z0JBRXZIQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtnQkFDaERBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7Z0JBQ3ZEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUN0REEsQ0FBQ0E7WUFFREEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0E7UUFDMUJBLENBQUNBOzs7T0FBQUw7SUFJTUEscUNBQWNBLEdBQXJCQSxVQUFzQkEsSUFBUUEsRUFBRUEsUUFBbUJBO1FBQW5CTSx3QkFBbUJBLEdBQW5CQSxZQUFtQkE7UUFFbERBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLFlBQVlBLFVBQVVBLENBQUNBO1lBQzlCQSxJQUFJQSxHQUFpQkEsSUFBS0EsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFFdENBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBO1FBQzNEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxVQUFVQSxFQUFFQSxRQUFRQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUMvR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDakRBLENBQUNBO0lBRU1OLDJEQUFvQ0EsR0FBM0NBLFVBQTRDQSxJQUFjQSxFQUFFQSxlQUFlQSxDQUFRQSxRQUFEQSxBQUFTQSxFQUFFQSxLQUFxQkE7UUFBckJPLHFCQUFxQkEsR0FBckJBLGFBQXFCQTtRQUVqSEEsSUFBSUEsR0FBR0EsR0FBVUEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsQ0FBQ0Esc0NBQXNDQSxDQUFDQSxDQUFDQTtRQUMvRUEsNkRBQTZEQTtJQUM5REEsQ0FBQ0E7SUFFRFAsc0JBQVdBLG1DQUFTQTthQUFwQkE7WUFFQ1EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDeEJBLENBQUNBOzs7T0FBQVI7SUFFTUEsc0NBQWVBLEdBQXRCQTtRQUVDUyxvQ0FBb0NBO1FBQ3BDQSwrREFBK0RBO1FBQy9EQSwrQ0FBK0NBO1FBQy9DQSxvREFBb0RBO0lBQ3JEQSxDQUFDQTtJQUNGVCxtQkFBQ0E7QUFBREEsQ0F6RkEsQUF5RkNBLEVBekYwQixnQkFBZ0IsRUF5RjFDO0FBRUQsQUFBc0IsaUJBQWIsWUFBWSxDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9UZXh0dXJlV2ViR0wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdG1hcERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBCeXRlQXJyYXlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0J5dGVBcnJheVwiKTtcblxuaW1wb3J0IElUZXh0dXJlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVGV4dHVyZVwiKTtcbmltcG9ydCBUZXh0dXJlQmFzZVdlYkdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL1RleHR1cmVCYXNlV2ViR0xcIik7XG5cbmNsYXNzIFRleHR1cmVXZWJHTCBleHRlbmRzIFRleHR1cmVCYXNlV2ViR0wgaW1wbGVtZW50cyBJVGV4dHVyZVxue1xuXG5cdHB1YmxpYyB0ZXh0dXJlVHlwZTpzdHJpbmcgPSBcInRleHR1cmUyZFwiO1xuXG5cdHByaXZhdGUgX3dpZHRoOm51bWJlcjtcblx0cHJpdmF0ZSBfaGVpZ2h0Om51bWJlcjtcblxuXHRwcml2YXRlIF9mcmFtZUJ1ZmZlcjpXZWJHTEZyYW1lYnVmZmVyO1xuXG5cdHByaXZhdGUgX2dsVGV4dHVyZTpXZWJHTFRleHR1cmU7XG5cblx0Y29uc3RydWN0b3IoZ2w6V2ViR0xSZW5kZXJpbmdDb250ZXh0LCB3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXIpXG5cdHtcblx0XHRzdXBlcihnbCk7XG5cdFx0dGhpcy5fd2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG5cblx0XHR0aGlzLl9nbFRleHR1cmUgPSB0aGlzLl9nbC5jcmVhdGVUZXh0dXJlKCk7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9nbC5kZWxldGVUZXh0dXJlKHRoaXMuX2dsVGV4dHVyZSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fd2lkdGg7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IGhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2hlaWdodDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZnJhbWVCdWZmZXIoKTpXZWJHTEZyYW1lYnVmZmVyXG5cdHtcblx0XHRpZiAoIXRoaXMuX2ZyYW1lQnVmZmVyKSB7XG5cdFx0XHR0aGlzLl9mcmFtZUJ1ZmZlciA9IHRoaXMuX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7XG5cdFx0XHR0aGlzLl9nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5fZ2wuRlJBTUVCVUZGRVIsIHRoaXMuX2ZyYW1lQnVmZmVyKTtcblx0XHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2dsVGV4dHVyZSk7XG5cdFx0XHR0aGlzLl9nbC50ZXhJbWFnZTJEKHRoaXMuX2dsLlRFWFRVUkVfMkQsIDAsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIDAsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdFx0XHR2YXIgcmVuZGVyQnVmZmVyOldlYkdMUmVuZGVyYnVmZmVyID0gdGhpcy5fZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7XG5cdFx0XHR0aGlzLl9nbC5iaW5kUmVuZGVyYnVmZmVyKHRoaXMuX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyQnVmZmVyKTtcblx0XHRcdHRoaXMuX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGhpcy5fZ2wuUkVOREVSQlVGRkVSLCB0aGlzLl9nbC5ERVBUSF9DT01QT05FTlQxNiwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XG5cblx0XHRcdHRoaXMuX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRoaXMuX2dsLkZSQU1FQlVGRkVSLCB0aGlzLl9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgdGhpcy5fZ2wuVEVYVFVSRV8yRCwgdGhpcy5fZ2xUZXh0dXJlLCAwKTtcblx0XHRcdHRoaXMuX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRoaXMuX2dsLkZSQU1FQlVGRkVSLCB0aGlzLl9nbC5ERVBUSF9BVFRBQ0hNRU5ULCB0aGlzLl9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlckJ1ZmZlcik7XG5cblx0XHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xuXHRcdFx0dGhpcy5fZ2wuYmluZFJlbmRlcmJ1ZmZlcih0aGlzLl9nbC5SRU5ERVJCVUZGRVIsIG51bGwpO1xuXHRcdFx0dGhpcy5fZ2wuYmluZEZyYW1lYnVmZmVyKHRoaXMuX2dsLkZSQU1FQlVGRkVSLCBudWxsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZnJhbWVCdWZmZXI7XG5cdH1cblxuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoYml0bWFwRGF0YTpCaXRtYXBEYXRhLCBtaXBsZXZlbD86bnVtYmVyKTtcblx0cHVibGljIHVwbG9hZEZyb21EYXRhKGltYWdlOkhUTUxJbWFnZUVsZW1lbnQsIG1pcGxldmVsPzpudW1iZXIpO1xuXHRwdWJsaWMgdXBsb2FkRnJvbURhdGEoZGF0YTphbnksIG1pcGxldmVsOm51bWJlciA9IDApXG5cdHtcblx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEJpdG1hcERhdGEpXG5cdFx0XHRkYXRhID0gKDxCaXRtYXBEYXRhPiBkYXRhKS5pbWFnZURhdGE7XG5cblx0XHR0aGlzLl9nbC5iaW5kVGV4dHVyZSh0aGlzLl9nbC5URVhUVVJFXzJELCB0aGlzLl9nbFRleHR1cmUpO1xuXHRcdHRoaXMuX2dsLnRleEltYWdlMkQodGhpcy5fZ2wuVEVYVFVSRV8yRCwgbWlwbGV2ZWwsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlJHQkEsIHRoaXMuX2dsLlVOU0lHTkVEX0JZVEUsIGRhdGEpO1xuXHRcdHRoaXMuX2dsLmJpbmRUZXh0dXJlKHRoaXMuX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xuXHR9XG5cblx0cHVibGljIHVwbG9hZENvbXByZXNzZWRUZXh0dXJlRnJvbUJ5dGVBcnJheShkYXRhOkJ5dGVBcnJheSwgYnl0ZUFycmF5T2Zmc2V0Om51bWJlciAvKnVpbnQqLywgYXN5bmM6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0dmFyIGV4dDpPYmplY3QgPSB0aGlzLl9nbC5nZXRFeHRlbnNpb24oXCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNcIik7XG5cdFx0Ly90aGlzLl9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0aGlzLl9nbC5URVhUVVJFXzJELCAwLCB0aGlzKVxuXHR9XG5cblx0cHVibGljIGdldCBnbFRleHR1cmUoKTpXZWJHTFRleHR1cmVcblx0e1xuXHRcdHJldHVybiB0aGlzLl9nbFRleHR1cmU7XG5cdH1cblxuXHRwdWJsaWMgZ2VuZXJhdGVNaXBtYXBzKClcblx0e1xuXHRcdC8vVE9ETzogaW1wbGVtZW50IGdlbmVyYXRpbmcgbWlwbWFwc1xuXHRcdC8vdGhpcy5fZ2wuYmluZFRleHR1cmUoIHRoaXMuX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2dsVGV4dHVyZSApO1xuXHRcdC8vdGhpcy5fZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5fZ2wuVEVYVFVSRV8yRCk7XG5cdFx0Ly90aGlzLl9nbC5iaW5kVGV4dHVyZSggdGhpcy5fZ2wuVEVYVFVSRV8yRCwgbnVsbCApO1xuXHR9XG59XG5cbmV4cG9ydCA9IFRleHR1cmVXZWJHTDsiXX0= \ No newline at end of file diff --git a/lib/core/stagegl/VertexBufferWebGL.js b/lib/core/stagegl/VertexBufferWebGL.js deleted file mode 100755 index 2ca02a2d..00000000 --- a/lib/core/stagegl/VertexBufferWebGL.js +++ /dev/null @@ -1,42 +0,0 @@ -var VertexBufferWebGL = (function () { - function VertexBufferWebGL(gl, numVertices, data32PerVertex) { - this._gl = gl; - this._buffer = this._gl.createBuffer(); - this._numVertices = numVertices; - this._data32PerVertex = data32PerVertex; - } - VertexBufferWebGL.prototype.uploadFromArray = function (vertices, startVertex, numVertices) { - this._gl.bindBuffer(this._gl.ARRAY_BUFFER, this._buffer); - //console.log( "** WARNING upload not fully implemented, startVertex & numVertices not considered." ); - // TODO add offsets , startVertex, numVertices * this._data32PerVertex - this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(vertices), this._gl.STATIC_DRAW); - }; - Object.defineProperty(VertexBufferWebGL.prototype, "numVertices", { - get: function () { - return this._numVertices; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(VertexBufferWebGL.prototype, "data32PerVertex", { - get: function () { - return this._data32PerVertex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(VertexBufferWebGL.prototype, "glBuffer", { - get: function () { - return this._buffer; - }, - enumerable: true, - configurable: true - }); - VertexBufferWebGL.prototype.dispose = function () { - this._gl.deleteBuffer(this._buffer); - }; - return VertexBufferWebGL; -})(); -module.exports = VertexBufferWebGL; - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvdmVydGV4YnVmZmVyd2ViZ2wudHMiXSwibmFtZXMiOlsiVmVydGV4QnVmZmVyV2ViR0wiLCJWZXJ0ZXhCdWZmZXJXZWJHTC5jb25zdHJ1Y3RvciIsIlZlcnRleEJ1ZmZlcldlYkdMLnVwbG9hZEZyb21BcnJheSIsIlZlcnRleEJ1ZmZlcldlYkdMLm51bVZlcnRpY2VzIiwiVmVydGV4QnVmZmVyV2ViR0wuZGF0YTMyUGVyVmVydGV4IiwiVmVydGV4QnVmZmVyV2ViR0wuZ2xCdWZmZXIiLCJWZXJ0ZXhCdWZmZXJXZWJHTC5kaXNwb3NlIl0sIm1hcHBpbmdzIjoiQUFFQSxJQUFNLGlCQUFpQjtJQVF0QkEsU0FSS0EsaUJBQWlCQSxDQVFWQSxFQUF3QkEsRUFBRUEsV0FBa0JBLEVBQUVBLGVBQXNCQTtRQUUvRUMsSUFBSUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsQ0FBQ0E7UUFDZEEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0E7UUFDdkNBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLFdBQVdBLENBQUNBO1FBQ2hDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLGVBQWVBLENBQUNBO0lBQ3pDQSxDQUFDQTtJQUVNRCwyQ0FBZUEsR0FBdEJBLFVBQXVCQSxRQUFpQkEsRUFBRUEsV0FBa0JBLEVBQUVBLFdBQWtCQTtRQUUvRUUsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsWUFBWUEsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7UUFFekRBLEFBRUFBLHNHQUZzR0E7UUFDdEdBLHNFQUFzRUE7UUFDdEVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFVBQVVBLENBQUNBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLFlBQVlBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBO0lBQzlGQSxDQUFDQTtJQUVERixzQkFBV0EsMENBQVdBO2FBQXRCQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQTtRQUMxQkEsQ0FBQ0E7OztPQUFBSDtJQUVEQSxzQkFBV0EsOENBQWVBO2FBQTFCQTtZQUVDSSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBO1FBQzlCQSxDQUFDQTs7O09BQUFKO0lBRURBLHNCQUFXQSx1Q0FBUUE7YUFBbkJBO1lBRUNLLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBO1FBQ3JCQSxDQUFDQTs7O09BQUFMO0lBRU1BLG1DQUFPQSxHQUFkQTtRQUVDTSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtJQUNyQ0EsQ0FBQ0E7SUFDRk4sd0JBQUNBO0FBQURBLENBNUNBLEFBNENDQSxJQUFBO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6ImNvcmUvc3RhZ2VnbC9WZXJ0ZXhCdWZmZXJXZWJHTC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVmVydGV4QnVmZmVyXCIpO1xuXG5jbGFzcyBWZXJ0ZXhCdWZmZXJXZWJHTCBpbXBsZW1lbnRzIElWZXJ0ZXhCdWZmZXJcbntcblxuXHRwcml2YXRlIF9nbDpXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG5cdHByaXZhdGUgX251bVZlcnRpY2VzOm51bWJlcjtcblx0cHJpdmF0ZSBfZGF0YTMyUGVyVmVydGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfYnVmZmVyOldlYkdMQnVmZmVyO1xuXG5cdGNvbnN0cnVjdG9yKGdsOldlYkdMUmVuZGVyaW5nQ29udGV4dCwgbnVtVmVydGljZXM6bnVtYmVyLCBkYXRhMzJQZXJWZXJ0ZXg6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fZ2wgPSBnbDtcblx0XHR0aGlzLl9idWZmZXIgPSB0aGlzLl9nbC5jcmVhdGVCdWZmZXIoKTtcblx0XHR0aGlzLl9udW1WZXJ0aWNlcyA9IG51bVZlcnRpY2VzO1xuXHRcdHRoaXMuX2RhdGEzMlBlclZlcnRleCA9IGRhdGEzMlBlclZlcnRleDtcblx0fVxuXG5cdHB1YmxpYyB1cGxvYWRGcm9tQXJyYXkodmVydGljZXM6bnVtYmVyW10sIHN0YXJ0VmVydGV4Om51bWJlciwgbnVtVmVydGljZXM6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fZ2wuYmluZEJ1ZmZlcih0aGlzLl9nbC5BUlJBWV9CVUZGRVIsIHRoaXMuX2J1ZmZlcik7XG5cblx0XHQvL2NvbnNvbGUubG9nKCBcIioqIFdBUk5JTkcgdXBsb2FkIG5vdCBmdWxseSBpbXBsZW1lbnRlZCwgc3RhcnRWZXJ0ZXggJiBudW1WZXJ0aWNlcyBub3QgY29uc2lkZXJlZC5cIiApO1xuXHRcdC8vIFRPRE8gYWRkIG9mZnNldHMgLCBzdGFydFZlcnRleCwgbnVtVmVydGljZXMgKiB0aGlzLl9kYXRhMzJQZXJWZXJ0ZXhcblx0XHR0aGlzLl9nbC5idWZmZXJEYXRhKHRoaXMuX2dsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcyksIHRoaXMuX2dsLlNUQVRJQ19EUkFXKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgbnVtVmVydGljZXMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9udW1WZXJ0aWNlcztcblx0fVxuXG5cdHB1YmxpYyBnZXQgZGF0YTMyUGVyVmVydGV4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGF0YTMyUGVyVmVydGV4O1xuXHR9XG5cblx0cHVibGljIGdldCBnbEJ1ZmZlcigpOldlYkdMQnVmZmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fZ2wuZGVsZXRlQnVmZmVyKHRoaXMuX2J1ZmZlcik7XG5cdH1cbn1cblxuZXhwb3J0ID0gVmVydGV4QnVmZmVyV2ViR0w7Il19 \ No newline at end of file diff --git a/lib/filters/Filter3DBase.js b/lib/filters/Filter3DBase.js index e5fdd62a..e26835c0 100755 --- a/lib/filters/Filter3DBase.js +++ b/lib/filters/Filter3DBase.js @@ -62,4 +62,4 @@ var Filter3DBase = (function () { })(); module.exports = Filter3DBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL2ZpbHRlcjNkYmFzZS50cyJdLCJuYW1lcyI6WyJGaWx0ZXIzREJhc2UiLCJGaWx0ZXIzREJhc2UuY29uc3RydWN0b3IiLCJGaWx0ZXIzREJhc2UucmVxdWlyZURlcHRoUmVuZGVyIiwiRmlsdGVyM0RCYXNlLnBBZGRUYXNrIiwiRmlsdGVyM0RCYXNlLnRhc2tzIiwiRmlsdGVyM0RCYXNlLmdldE1haW5JbnB1dFRleHR1cmUiLCJGaWx0ZXIzREJhc2UudGV4dHVyZVdpZHRoIiwiRmlsdGVyM0RCYXNlLnRleHR1cmVIZWlnaHQiLCJGaWx0ZXIzREJhc2Uuc2V0UmVuZGVyVGFyZ2V0cyIsIkZpbHRlcjNEQmFzZS5kaXNwb3NlIiwiRmlsdGVyM0RCYXNlLnVwZGF0ZSJdLCJtYXBwaW5ncyI6IkFBTUEsSUFBTSxZQUFZO0lBT2pCQSxTQVBLQSxZQUFZQTtRQVNoQkMsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsSUFBSUEsS0FBS0EsRUFBb0JBLENBQUNBO0lBQzdDQSxDQUFDQTtJQUVERCxzQkFBV0EsNENBQWtCQTthQUE3QkE7WUFFQ0UsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQTtRQUNqQ0EsQ0FBQ0E7OztPQUFBRjtJQUVNQSwrQkFBUUEsR0FBZkEsVUFBZ0JBLE1BQXVCQTtRQUV0Q0csSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7UUFFekJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLG1CQUFtQkEsSUFBSUEsSUFBSUEsQ0FBQ0E7WUFDcENBLElBQUlBLENBQUNBLG1CQUFtQkEsR0FBR0EsTUFBTUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQTtJQUN2REEsQ0FBQ0E7SUFFREgsc0JBQVdBLCtCQUFLQTthQUFoQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDcEJBLENBQUNBOzs7T0FBQUo7SUFFTUEsMENBQW1CQSxHQUExQkEsVUFBMkJBLEtBQVdBO1FBRXJDSyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxtQkFBbUJBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO0lBQ2xEQSxDQUFDQTtJQUVETCxzQkFBV0Esc0NBQVlBO2FBQXZCQTtZQUVDTSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7YUFFRE4sVUFBd0JBLEtBQVlBO1lBRW5DTSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUUzQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxZQUFZQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7OztPQVJBTjtJQVVEQSxzQkFBV0EsdUNBQWFBO2FBQXhCQTtZQUVDTyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7YUFFRFAsVUFBeUJBLEtBQVlBO1lBRXBDTyxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUU1QkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN2Q0EsQ0FBQ0E7OztPQVJBUDtJQVVEQSxxREFBcURBO0lBQzlDQSx1Q0FBZ0JBLEdBQXZCQSxVQUF3QkEsVUFBbUJBLEVBQUVBLEtBQVdBO1FBRXZEUSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxNQUFNQSxHQUFHQSxVQUFVQSxDQUFDQTtJQUN6REEsQ0FBQ0E7SUFFTVIsOEJBQU9BLEdBQWRBO1FBRUNTLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtJQUMzQkEsQ0FBQ0E7SUFFTVQsNkJBQU1BLEdBQWJBLFVBQWNBLEtBQVdBLEVBQUVBLE1BQWFBO0lBR3hDVSxDQUFDQTtJQUNGVixtQkFBQ0E7QUFBREEsQ0E3RUEsQUE2RUNBLElBQUE7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiZmlsdGVycy9GaWx0ZXIzREJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lUZXh0dXJlXCIpO1xuaW1wb3J0IEZpbHRlcjNEVGFza0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL3Rhc2tzL0ZpbHRlcjNEVGFza0Jhc2VcIik7XG5cbmNsYXNzIEZpbHRlcjNEQmFzZVxue1xuXHRwcml2YXRlIF90YXNrczpBcnJheTxGaWx0ZXIzRFRhc2tCYXNlPjtcblx0cHJpdmF0ZSBfcmVxdWlyZURlcHRoUmVuZGVyOmJvb2xlYW47XG5cdHByaXZhdGUgX3RleHR1cmVXaWR0aDpudW1iZXI7XG5cdHByaXZhdGUgX3RleHR1cmVIZWlnaHQ6bnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHRoaXMuX3Rhc2tzID0gbmV3IEFycmF5PEZpbHRlcjNEVGFza0Jhc2U+KCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlcXVpcmVEZXB0aFJlbmRlcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXI7XG5cdH1cblxuXHRwdWJsaWMgcEFkZFRhc2soZmlsdGVyOkZpbHRlcjNEVGFza0Jhc2UpXG5cdHtcblx0XHR0aGlzLl90YXNrcy5wdXNoKGZpbHRlcik7XG5cblx0XHRpZiAodGhpcy5fcmVxdWlyZURlcHRoUmVuZGVyID09IG51bGwpXG5cdFx0XHR0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXIgPSBmaWx0ZXIucmVxdWlyZURlcHRoUmVuZGVyO1xuXHR9XG5cblx0cHVibGljIGdldCB0YXNrcygpOkZpbHRlcjNEVGFza0Jhc2VbXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Rhc2tzO1xuXHR9XG5cblx0cHVibGljIGdldE1haW5JbnB1dFRleHR1cmUoc3RhZ2U6U3RhZ2UpOklUZXh0dXJlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGFza3NbMF0uZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRleHR1cmVXaWR0aCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVXaWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgdGV4dHVyZVdpZHRoKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX3RleHR1cmVXaWR0aCA9IHZhbHVlO1xuXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyArK2kpXG5cdFx0XHR0aGlzLl90YXNrc1tpXS50ZXh0dXJlV2lkdGggPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZUhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVIZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRleHR1cmVIZWlnaHQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fdGV4dHVyZUhlaWdodCA9IHZhbHVlO1xuXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyArK2kpXG5cdFx0XHR0aGlzLl90YXNrc1tpXS50ZXh0dXJlSGVpZ2h0ID0gdmFsdWU7XG5cdH1cblxuXHQvLyBsaW5rIHVwIHRoZSBmaWx0ZXJzIGNvcnJlY3RseSB3aXRoIHRoZSBuZXh0IGZpbHRlclxuXHRwdWJsaWMgc2V0UmVuZGVyVGFyZ2V0cyhtYWluVGFyZ2V0OklUZXh0dXJlLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHRoaXMuX3Rhc2tzW3RoaXMuX3Rhc2tzLmxlbmd0aCAtIDFdLnRhcmdldCA9IG1haW5UYXJnZXQ7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3Rhc2tzW2ldLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGUoc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpXG5cdHtcblxuXHR9XG59XG5cbmV4cG9ydCA9IEZpbHRlcjNEQmFzZTsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL2ZpbHRlcjNkYmFzZS50cyJdLCJuYW1lcyI6WyJGaWx0ZXIzREJhc2UiLCJGaWx0ZXIzREJhc2UuY29uc3RydWN0b3IiLCJGaWx0ZXIzREJhc2UucmVxdWlyZURlcHRoUmVuZGVyIiwiRmlsdGVyM0RCYXNlLnBBZGRUYXNrIiwiRmlsdGVyM0RCYXNlLnRhc2tzIiwiRmlsdGVyM0RCYXNlLmdldE1haW5JbnB1dFRleHR1cmUiLCJGaWx0ZXIzREJhc2UudGV4dHVyZVdpZHRoIiwiRmlsdGVyM0RCYXNlLnRleHR1cmVIZWlnaHQiLCJGaWx0ZXIzREJhc2Uuc2V0UmVuZGVyVGFyZ2V0cyIsIkZpbHRlcjNEQmFzZS5kaXNwb3NlIiwiRmlsdGVyM0RCYXNlLnVwZGF0ZSJdLCJtYXBwaW5ncyI6IkFBTUEsSUFBTSxZQUFZO0lBT2pCQSxTQVBLQSxZQUFZQTtRQVNoQkMsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsSUFBSUEsS0FBS0EsRUFBb0JBLENBQUNBO0lBQzdDQSxDQUFDQTtJQUVERCxzQkFBV0EsNENBQWtCQTthQUE3QkE7WUFFQ0UsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQTtRQUNqQ0EsQ0FBQ0E7OztPQUFBRjtJQUVNQSwrQkFBUUEsR0FBZkEsVUFBZ0JBLE1BQXVCQTtRQUV0Q0csSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7UUFFekJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLG1CQUFtQkEsSUFBSUEsSUFBSUEsQ0FBQ0E7WUFDcENBLElBQUlBLENBQUNBLG1CQUFtQkEsR0FBR0EsTUFBTUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQTtJQUN2REEsQ0FBQ0E7SUFFREgsc0JBQVdBLCtCQUFLQTthQUFoQkE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDcEJBLENBQUNBOzs7T0FBQUo7SUFFTUEsMENBQW1CQSxHQUExQkEsVUFBMkJBLEtBQVdBO1FBRXJDSyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxtQkFBbUJBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO0lBQ2xEQSxDQUFDQTtJQUVETCxzQkFBV0Esc0NBQVlBO2FBQXZCQTtZQUVDTSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7YUFFRE4sVUFBd0JBLEtBQVlBO1lBRW5DTSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUUzQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxZQUFZQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7OztPQVJBTjtJQVVEQSxzQkFBV0EsdUNBQWFBO2FBQXhCQTtZQUVDTyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7YUFFRFAsVUFBeUJBLEtBQVlBO1lBRXBDTyxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUU1QkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsRUFBRUEsQ0FBQ0E7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN2Q0EsQ0FBQ0E7OztPQVJBUDtJQVVEQSxxREFBcURBO0lBQzlDQSx1Q0FBZ0JBLEdBQXZCQSxVQUF3QkEsVUFBbUJBLEVBQUVBLEtBQVdBO1FBRXZEUSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxNQUFNQSxHQUFHQSxVQUFVQSxDQUFDQTtJQUN6REEsQ0FBQ0E7SUFFTVIsOEJBQU9BLEdBQWRBO1FBRUNTLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLEVBQUVBLEVBQUVBLENBQUNBO1lBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtJQUMzQkEsQ0FBQ0E7SUFFTVQsNkJBQU1BLEdBQWJBLFVBQWNBLEtBQVdBLEVBQUVBLE1BQWFBO0lBR3hDVSxDQUFDQTtJQUNGVixtQkFBQ0E7QUFBREEsQ0E3RUEsQUE2RUNBLElBQUE7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoiZmlsdGVycy9GaWx0ZXIzREJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IElUZXh0dXJlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVRleHR1cmVcIik7XG5pbXBvcnQgRmlsdGVyM0RUYXNrQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2ZpbHRlcnMvdGFza3MvRmlsdGVyM0RUYXNrQmFzZVwiKTtcblxuY2xhc3MgRmlsdGVyM0RCYXNlXG57XG5cdHByaXZhdGUgX3Rhc2tzOkFycmF5PEZpbHRlcjNEVGFza0Jhc2U+O1xuXHRwcml2YXRlIF9yZXF1aXJlRGVwdGhSZW5kZXI6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfdGV4dHVyZVdpZHRoOm51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZUhlaWdodDpudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0dGhpcy5fdGFza3MgPSBuZXcgQXJyYXk8RmlsdGVyM0RUYXNrQmFzZT4oKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVxdWlyZURlcHRoUmVuZGVyKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlcjtcblx0fVxuXG5cdHB1YmxpYyBwQWRkVGFzayhmaWx0ZXI6RmlsdGVyM0RUYXNrQmFzZSlcblx0e1xuXHRcdHRoaXMuX3Rhc2tzLnB1c2goZmlsdGVyKTtcblxuXHRcdGlmICh0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXIgPT0gbnVsbClcblx0XHRcdHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciA9IGZpbHRlci5yZXF1aXJlRGVwdGhSZW5kZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRhc2tzKCk6RmlsdGVyM0RUYXNrQmFzZVtdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGFza3M7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZTpTdGFnZSk6SVRleHR1cmVcblx0e1xuXHRcdHJldHVybiB0aGlzLl90YXNrc1swXS5nZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZVdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZVdpZHRoO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlV2lkdGgodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fdGV4dHVyZVdpZHRoID0gdmFsdWU7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3Rhc2tzW2ldLnRleHR1cmVXaWR0aCA9IHZhbHVlO1xuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlSGVpZ2h0KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZUhlaWdodDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgdGV4dHVyZUhlaWdodCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl90ZXh0dXJlSGVpZ2h0ID0gdmFsdWU7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3Rhc2tzW2ldLnRleHR1cmVIZWlnaHQgPSB2YWx1ZTtcblx0fVxuXG5cdC8vIGxpbmsgdXAgdGhlIGZpbHRlcnMgY29ycmVjdGx5IHdpdGggdGhlIG5leHQgZmlsdGVyXG5cdHB1YmxpYyBzZXRSZW5kZXJUYXJnZXRzKG1haW5UYXJnZXQ6SVRleHR1cmUsIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dGhpcy5fdGFza3NbdGhpcy5fdGFza3MubGVuZ3RoIC0gMV0udGFyZ2V0ID0gbWFpblRhcmdldDtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgKytpKVxuXHRcdFx0dGhpcy5fdGFza3NbaV0uZGlzcG9zZSgpO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZShzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXG5cdH1cbn1cblxuZXhwb3J0ID0gRmlsdGVyM0RCYXNlOyJdfQ== \ No newline at end of file diff --git a/lib/filters/Filter3DBase.ts b/lib/filters/Filter3DBase.ts index 253dba01..ce72e981 100644 --- a/lib/filters/Filter3DBase.ts +++ b/lib/filters/Filter3DBase.ts @@ -1,7 +1,7 @@ import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); import Filter3DTaskBase = require("awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase"); class Filter3DBase diff --git a/lib/filters/tasks/Filter3DTaskBase.js b/lib/filters/tasks/Filter3DTaskBase.js index c42d13b7..6c5d4ead 100755 --- a/lib/filters/tasks/Filter3DTaskBase.js +++ b/lib/filters/tasks/Filter3DTaskBase.js @@ -1,6 +1,6 @@ var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); var AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); var Filter3DTaskBase = (function () { function Filter3DTaskBase(requireDepthRender) { if (requireDepthRender === void 0) { requireDepthRender = false; } @@ -126,4 +126,4 @@ var Filter3DTaskBase = (function () { })(); module.exports = Filter3DTaskBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL3Rhc2tzL2ZpbHRlcjNkdGFza2Jhc2UudHMiXSwibmFtZXMiOlsiRmlsdGVyM0RUYXNrQmFzZSIsIkZpbHRlcjNEVGFza0Jhc2UuY29uc3RydWN0b3IiLCJGaWx0ZXIzRFRhc2tCYXNlLnRleHR1cmVTY2FsZSIsIkZpbHRlcjNEVGFza0Jhc2UudGFyZ2V0IiwiRmlsdGVyM0RUYXNrQmFzZS50ZXh0dXJlV2lkdGgiLCJGaWx0ZXIzRFRhc2tCYXNlLnRleHR1cmVIZWlnaHQiLCJGaWx0ZXIzRFRhc2tCYXNlLmdldE1haW5JbnB1dFRleHR1cmUiLCJGaWx0ZXIzRFRhc2tCYXNlLmRpc3Bvc2UiLCJGaWx0ZXIzRFRhc2tCYXNlLnBJbnZhbGlkYXRlUHJvZ3JhbSIsIkZpbHRlcjNEVGFza0Jhc2UucFVwZGF0ZVByb2dyYW0iLCJGaWx0ZXIzRFRhc2tCYXNlLnBHZXRWZXJ0ZXhDb2RlIiwiRmlsdGVyM0RUYXNrQmFzZS5wR2V0RnJhZ21lbnRDb2RlIiwiRmlsdGVyM0RUYXNrQmFzZS5wVXBkYXRlVGV4dHVyZXMiLCJGaWx0ZXIzRFRhc2tCYXNlLmdldFByb2dyYW0iLCJGaWx0ZXIzRFRhc2tCYXNlLmFjdGl2YXRlIiwiRmlsdGVyM0RUYXNrQmFzZS5kZWFjdGl2YXRlIiwiRmlsdGVyM0RUYXNrQmFzZS5yZXF1aXJlRGVwdGhSZW5kZXIiXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sbUJBQW1CLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQU1yRixJQUFPLGlCQUFpQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBS25HLElBQU0sZ0JBQWdCO0lBZXJCQSxTQWZLQSxnQkFBZ0JBLENBZVRBLGtCQUFrQ0E7UUFBbENDLGtDQUFrQ0EsR0FBbENBLDBCQUFrQ0E7UUFYdENBLHdCQUFtQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDaENBLHlCQUFvQkEs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cUJBO0lBRWpFYyxDQUFDQTtJQUVNZCxxQ0FBVUEsR0FBakJBLFVBQWtCQSxLQUFXQTtJQUU3QmUsQ0FBQ0E7SUFFRGYsc0JBQVdBLGdEQUFrQkE7YUFBN0JBO1lBRUNnQixNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLENBQUNBO1FBQ2pDQSxDQUFDQTs7O09BQUFoQjtJQUVGQSx1QkFBQ0E7QUFBREEsQ0FqS0EsQUFpS0NBLElBQUE7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiZmlsdGVycy90YXNrcy9GaWx0ZXIzRFRhc2tCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBBR0FMTWluaUFzc2VtYmxlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9hZ2xzbC9hc3NlbWJsZXIvQUdBTE1pbmlBc3NlbWJsZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZvcm1hdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFRleHR1cmVGb3JtYXRcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBJUHJvZ3JhbVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSVByb2dyYW1cIik7XG5pbXBvcnQgSVRleHR1cmVcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lUZXh0dXJlXCIpO1xuXG5jbGFzcyBGaWx0ZXIzRFRhc2tCYXNlXG57XG5cdHByaXZhdGUgX21haW5JbnB1dFRleHR1cmU6SVRleHR1cmU7XG5cblx0cHJpdmF0ZSBfc2NhbGVkVGV4dHVyZVdpZHRoOm51bWJlciA9IC0xO1xuXHRwcml2YXRlIF9zY2FsZWRUZXh0dXJlSGVpZ2h0Om51bWJlciA9IC0xO1xuXHRwcml2YXRlIF90ZXh0dXJlV2lkdGg6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3RleHR1cmVIZWlnaHQ6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3RleHR1cmVEaW1lbnNpb25zSW52YWxpZDpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfcHJvZ3JhbTNESW52YWxpZDpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfcHJvZ3JhbTNEOklQcm9ncmFtO1xuXHRwcml2YXRlIF90YXJnZXQ6SVRleHR1cmU7XG5cdHByaXZhdGUgX3JlcXVpcmVEZXB0aFJlbmRlcjpib29sZWFuO1xuXHRwcml2YXRlIF90ZXh0dXJlU2NhbGU6bnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvcihyZXF1aXJlRGVwdGhSZW5kZXI6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cblx0XHR0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXIgPSByZXF1aXJlRGVwdGhSZW5kZXI7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dHVyZSBzY2FsZSBmb3IgdGhlIGlucHV0IG9mIHRoaXMgdGV4dHVyZS4gVGhpcyB3aWxsIGRlZmluZSB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgY2hhaW5cblx0ICovXG5cdHB1YmxpYyBnZXQgdGV4dHVyZVNjYWxlKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZVNjYWxlO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlU2NhbGUodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3RleHR1cmVTY2FsZSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3RleHR1cmVTY2FsZSA9IHZhbHVlO1xuXHRcdHRoaXMuX3NjYWxlZFRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmVXaWR0aCA+PiB0aGlzLl90ZXh0dXJlU2NhbGU7XG5cdFx0dGhpcy5fc2NhbGVkVGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmVIZWlnaHQgPj4gdGhpcy5fdGV4dHVyZVNjYWxlO1xuXHRcdHRoaXMuX3RleHR1cmVEaW1lbnNpb25zSW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRhcmdldCgpOklUZXh0dXJlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGFyZ2V0O1xuXHR9XG5cblx0cHVibGljIHNldCB0YXJnZXQodmFsdWU6SVRleHR1cmUpXG5cdHtcblx0XHR0aGlzLl90YXJnZXQgPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZVdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZVdpZHRoO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlV2lkdGgodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3RleHR1cmVXaWR0aCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3RleHR1cmVXaWR0aCA9IHZhbHVlO1xuXHRcdHRoaXMuX3NjYWxlZFRleHR1cmVXaWR0aCA9IHRoaXMuX3RleHR1cmVXaWR0aCA+PiB0aGlzLl90ZXh0dXJlU2NhbGU7XG5cdFx0dGhpcy5fdGV4dHVyZURpbWVuc2lvbnNJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZUhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVIZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRleHR1cmVIZWlnaHQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3RleHR1cmVIZWlnaHQgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl90ZXh0dXJlSGVpZ2h0ID0gdmFsdWU7XG5cdFx0dGhpcy5fc2NhbGVkVGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmVIZWlnaHQgPj4gdGhpcy5fdGV4dHVyZVNjYWxlO1xuXHRcdHRoaXMuX3RleHR1cmVEaW1lbnNpb25zSW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZTpTdGFnZSk6SVRleHR1cmVcblx0e1xuXHRcdGlmICh0aGlzLl90ZXh0dXJlRGltZW5zaW9uc0ludmFsaWQpXG5cdFx0XHR0aGlzLnBVcGRhdGVUZXh0dXJlcyhzdGFnZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5fbWFpbklucHV0VGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGlmICh0aGlzLl9tYWluSW5wdXRUZXh0dXJlKVxuXHRcdFx0dGhpcy5fbWFpbklucHV0VGV4dHVyZS5kaXNwb3NlKCk7XG5cblx0XHRpZiAodGhpcy5fcHJvZ3JhbTNEKVxuXHRcdFx0dGhpcy5fcHJvZ3JhbTNELmRpc3Bvc2UoKTtcblx0fVxuXG5cdHB1YmxpYyBwSW52YWxpZGF0ZVByb2dyYW0oKVxuXHR7XG5cdFx0dGhpcy5fcHJvZ3JhbTNESW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgcFVwZGF0ZVByb2dyYW0oc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRpZiAodGhpcy5fcHJvZ3JhbTNEKVxuXHRcdFx0dGhpcy5fcHJvZ3JhbTNELmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3Byb2dyYW0zRCA9ICg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5jcmVhdGVQcm9ncmFtKCk7XG5cblx0XHR2YXIgdmVydGV4Qnl0ZUNvZGU6Qnl0ZUFycmF5ID0gKG5ldyBBR0FMTWluaUFzc2VtYmxlcigpLmFzc2VtYmxlKFwicGFydCB2ZXJ0ZXggMVxcblwiICsgdGhpcy5wR2V0VmVydGV4Q29kZSgpICsgXCJlbmRwYXJ0XCIpKVsndmVydGV4J10uZGF0YTtcblx0XHR2YXIgZnJhZ21lbnRCeXRlQ29kZTpCeXRlQXJyYXkgPSAobmV3IEFHQUxNaW5pQXNzZW1ibGVyKCkuYXNzZW1ibGUoXCJwYXJ0IGZyYWdtZW50IDFcXG5cIiArIHRoaXMucEdldEZyYWdtZW50Q29kZSgpICsgXCJlbmRwYXJ0XCIpKVsnZnJhZ21lbnQnXS5kYXRhO1xuXHRcdHRoaXMuX3Byb2dyYW0zRC51cGxvYWQodmVydGV4Qnl0ZUNvZGUsIGZyYWdtZW50Qnl0ZUNvZGUpO1xuXHRcdHRoaXMuX3Byb2dyYW0zREludmFsaWQgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBwR2V0VmVydGV4Q29kZSgpOnN0cmluZ1xuXHR7XG5cdFx0Ly8gVE9ETzogaW1lcGxlbWVudCBBR0FMIDw+IEdMU0xcblxuXHRcdHJldHVybiBcIm1vdiBvcCwgdmEwXFxuXCIgKyBcIm1vdiB2MCwgdmExXFxuXCI7XG5cdH1cblxuXHRwdWJsaWMgcEdldEZyYWdtZW50Q29kZSgpOnN0cmluZ1xuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHVibGljIHBVcGRhdGVUZXh0dXJlcyhzdGFnZTpTdGFnZSlcblx0e1xuXHRcdGlmICh0aGlzLl9tYWluSW5wdXRUZXh0dXJlKVxuXHRcdFx0dGhpcy5fbWFpbklucHV0VGV4dHVyZS5kaXNwb3NlKCk7XG5cblx0XHR0aGlzLl9tYWluSW5wdXRUZXh0dXJlID0gKDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmNyZWF0ZVRleHR1cmUodGhpcy5fc2NhbGVkVGV4dHVyZVdpZHRoLCB0aGlzLl9zY2FsZWRUZXh0dXJlSGVpZ2h0LCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0LkJHUkEsIHRydWUpO1xuXG5cdFx0dGhpcy5fdGV4dHVyZURpbWVuc2lvbnNJbnZhbGlkID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvZ3JhbShzdGFnZTpTdGFnZSk6SVByb2dyYW1cblx0e1xuXHRcdGlmICh0aGlzLl9wcm9ncmFtM0RJbnZhbGlkKVxuXHRcdFx0dGhpcy5wVXBkYXRlUHJvZ3JhbShzdGFnZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcHJvZ3JhbTNEO1xuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlKHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCBkZXB0aFRleHR1cmU6SVRleHR1cmUpXG5cdHtcblx0fVxuXG5cdHB1YmxpYyBkZWFjdGl2YXRlKHN0YWdlOlN0YWdlKVxuXHR7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlcXVpcmVEZXB0aFJlbmRlcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXI7XG5cdH1cblxufVxuXG5leHBvcnQgPSBGaWx0ZXIzRFRhc2tCYXNlOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL3Rhc2tzL2ZpbHRlcjNkdGFza2Jhc2UudHMiXSwibmFtZXMiOlsiRmlsdGVyM0RUYXNrQmFzZSIsIkZpbHRlcjNEVGFza0Jhc2UuY29uc3RydWN0b3IiLCJGaWx0ZXIzRFRhc2tCYXNlLnRleHR1cmVTY2FsZSIsIkZpbHRlcjNEVGFza0Jhc2UudGFyZ2V0IiwiRmlsdGVyM0RUYXNrQmFzZS50ZXh0dXJlV2lkdGgiLCJGaWx0ZXIzRFRhc2tCYXNlLnRleHR1cmVIZWlnaHQiLCJGaWx0ZXIzRFRhc2tCYXNlLmdldE1haW5JbnB1dFRleHR1cmUiLCJGaWx0ZXIzRFRhc2tCYXNlLmRpc3Bvc2UiLCJGaWx0ZXIzRFRhc2tCYXNlLnBJbnZhbGlkYXRlUHJvZ3JhbSIsIkZpbHRlcjNEVGFza0Jhc2UucFVwZGF0ZVByb2dyYW0iLCJGaWx0ZXIzRFRhc2tCYXNlLnBHZXRWZXJ0ZXhDb2RlIiwiRmlsdGVyM0RUYXNrQmFzZS5wR2V0RnJhZ21lbnRDb2RlIiwiRmlsdGVyM0RUYXNrQmFzZS5wVXBkYXRlVGV4dHVyZXMiLCJGaWx0ZXIzRFRhc2tCYXNlLmdldFByb2dyYW0iLCJGaWx0ZXIzRFRhc2tCYXNlLmFjdGl2YXRlIiwiRmlsdGVyM0RUYXNrQmFzZS5kZWFjdGl2YXRlIiwiRmlsdGVyM0RUYXNrQmFzZS5yZXF1aXJlRGVwdGhSZW5kZXIiXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sbUJBQW1CLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQU1yRixJQUFPLGlCQUFpQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBSzNGLElBQU0sZ0JBQWdCO0lBZXJCQSxTQWZLQSxnQkFBZ0JBLENBZVRBLGtCQUFrQ0E7UUFBbENDLGtDQUFrQ0EsR0FBbENBLDBCQUFrQ0E7UUFYdENBLHdCQUFtQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDaENBLHlCQUFvQkEs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cUJBO0lBRWpFYyxDQUFDQTtJQUVNZCxxQ0FBVUEsR0FBakJBLFVBQWtCQSxLQUFXQTtJQUU3QmUsQ0FBQ0E7SUFFRGYsc0JBQVdBLGdEQUFrQkE7YUFBN0JBO1lBRUNnQixNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLENBQUNBO1FBQ2pDQSxDQUFDQTs7O09BQUFoQjtJQUVGQSx1QkFBQ0E7QUFBREEsQ0FqS0EsQUFpS0NBLElBQUE7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoiZmlsdGVycy90YXNrcy9GaWx0ZXIzRFRhc2tCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IEJ5dGVBcnJheVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvQnl0ZUFycmF5XCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgQUdBTE1pbmlBc3NlbWJsZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYWdsc2wvYXNzZW1ibGVyL0FHQUxNaW5pQXNzZW1ibGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGb3JtYXRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZvcm1hdFwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBJUHJvZ3JhbVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lQcm9ncmFtXCIpO1xuaW1wb3J0IElUZXh0dXJlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVRleHR1cmVcIik7XG5cbmNsYXNzIEZpbHRlcjNEVGFza0Jhc2Vcbntcblx0cHJpdmF0ZSBfbWFpbklucHV0VGV4dHVyZTpJVGV4dHVyZTtcblxuXHRwcml2YXRlIF9zY2FsZWRUZXh0dXJlV2lkdGg6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3NjYWxlZFRleHR1cmVIZWlnaHQ6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3RleHR1cmVXaWR0aDpudW1iZXIgPSAtMTtcblx0cHJpdmF0ZSBfdGV4dHVyZUhlaWdodDpudW1iZXIgPSAtMTtcblx0cHJpdmF0ZSBfdGV4dHVyZURpbWVuc2lvbnNJbnZhbGlkOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9wcm9ncmFtM0RJbnZhbGlkOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9wcm9ncmFtM0Q6SVByb2dyYW07XG5cdHByaXZhdGUgX3RhcmdldDpJVGV4dHVyZTtcblx0cHJpdmF0ZSBfcmVxdWlyZURlcHRoUmVuZGVyOmJvb2xlYW47XG5cdHByaXZhdGUgX3RleHR1cmVTY2FsZTpudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yKHJlcXVpcmVEZXB0aFJlbmRlcjpib29sZWFuID0gZmFsc2UpXG5cdHtcblxuXHRcdHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciA9IHJlcXVpcmVEZXB0aFJlbmRlcjtcblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0dXJlIHNjYWxlIGZvciB0aGUgaW5wdXQgb2YgdGhpcyB0ZXh0dXJlLiBUaGlzIHdpbGwgZGVmaW5lIHRoZSBvdXRwdXQgb2YgdGhlIHByZXZpb3VzIGVudHJ5IGluIHRoZSBjaGFpblxuXHQgKi9cblx0cHVibGljIGdldCB0ZXh0dXJlU2NhbGUoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlU2NhbGU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRleHR1cmVTY2FsZSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fdGV4dHVyZVNjYWxlID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdGV4dHVyZVNjYWxlID0gdmFsdWU7XG5cdFx0dGhpcy5fc2NhbGVkVGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZVdpZHRoID4+IHRoaXMuX3RleHR1cmVTY2FsZTtcblx0XHR0aGlzLl9zY2FsZWRUZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZUhlaWdodCA+PiB0aGlzLl90ZXh0dXJlU2NhbGU7XG5cdFx0dGhpcy5fdGV4dHVyZURpbWVuc2lvbnNJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGFyZ2V0KCk6SVRleHR1cmVcblx0e1xuXHRcdHJldHVybiB0aGlzLl90YXJnZXQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRhcmdldCh2YWx1ZTpJVGV4dHVyZSlcblx0e1xuXHRcdHRoaXMuX3RhcmdldCA9IHZhbHVlO1xuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlV2lkdGgoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlV2lkdGg7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHRleHR1cmVXaWR0aCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fdGV4dHVyZVdpZHRoID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdGV4dHVyZVdpZHRoID0gdmFsdWU7XG5cdFx0dGhpcy5fc2NhbGVkVGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZVdpZHRoID4+IHRoaXMuX3RleHR1cmVTY2FsZTtcblx0XHR0aGlzLl90ZXh0dXJlRGltZW5zaW9uc0ludmFsaWQgPSB0cnVlO1xuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlSGVpZ2h0KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZUhlaWdodDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgdGV4dHVyZUhlaWdodCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fdGV4dHVyZUhlaWdodCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3RleHR1cmVIZWlnaHQgPSB2YWx1ZTtcblx0XHR0aGlzLl9zY2FsZWRUZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZUhlaWdodCA+PiB0aGlzLl90ZXh0dXJlU2NhbGU7XG5cdFx0dGhpcy5fdGV4dHVyZURpbWVuc2lvbnNJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlOlN0YWdlKTpJVGV4dHVyZVxuXHR7XG5cdFx0aWYgKHRoaXMuX3RleHR1cmVEaW1lbnNpb25zSW52YWxpZClcblx0XHRcdHRoaXMucFVwZGF0ZVRleHR1cmVzKHN0YWdlKTtcblxuXHRcdHJldHVybiB0aGlzLl9tYWluSW5wdXRUZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0aWYgKHRoaXMuX21haW5JbnB1dFRleHR1cmUpXG5cdFx0XHR0aGlzLl9tYWluSW5wdXRUZXh0dXJlLmRpc3Bvc2UoKTtcblxuXHRcdGlmICh0aGlzLl9wcm9ncmFtM0QpXG5cdFx0XHR0aGlzLl9wcm9ncmFtM0QuZGlzcG9zZSgpO1xuXHR9XG5cblx0cHVibGljIHBJbnZhbGlkYXRlUHJvZ3JhbSgpXG5cdHtcblx0XHR0aGlzLl9wcm9ncmFtM0RJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBwVXBkYXRlUHJvZ3JhbShzdGFnZTpTdGFnZSlcblx0e1xuXHRcdGlmICh0aGlzLl9wcm9ncmFtM0QpXG5cdFx0XHR0aGlzLl9wcm9ncmFtM0QuZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fcHJvZ3JhbTNEID0gKDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmNyZWF0ZVByb2dyYW0oKTtcblxuXHRcdHZhciB2ZXJ0ZXhCeXRlQ29kZTpCeXRlQXJyYXkgPSAobmV3IEFHQUxNaW5pQXNzZW1ibGVyKCkuYXNzZW1ibGUoXCJwYXJ0IHZlcnRleCAxXFxuXCIgKyB0aGlzLnBHZXRWZXJ0ZXhDb2RlKCkgKyBcImVuZHBhcnRcIikpWyd2ZXJ0ZXgnXS5kYXRhO1xuXHRcdHZhciBmcmFnbWVudEJ5dGVDb2RlOkJ5dGVBcnJheSA9IChuZXcgQUdBTE1pbmlBc3NlbWJsZXIoKS5hc3NlbWJsZShcInBhcnQgZnJhZ21lbnQgMVxcblwiICsgdGhpcy5wR2V0RnJhZ21lbnRDb2RlKCkgKyBcImVuZHBhcnRcIikpWydmcmFnbWVudCddLmRhdGE7XG5cdFx0dGhpcy5fcHJvZ3JhbTNELnVwbG9hZCh2ZXJ0ZXhCeXRlQ29kZSwgZnJhZ21lbnRCeXRlQ29kZSk7XG5cdFx0dGhpcy5fcHJvZ3JhbTNESW52YWxpZCA9IGZhbHNlO1xuXHR9XG5cblx0cHVibGljIHBHZXRWZXJ0ZXhDb2RlKCk6c3RyaW5nXG5cdHtcblx0XHQvLyBUT0RPOiBpbWVwbGVtZW50IEFHQUwgPD4gR0xTTFxuXG5cdFx0cmV0dXJuIFwibW92IG9wLCB2YTBcXG5cIiArIFwibW92IHYwLCB2YTFcXG5cIjtcblx0fVxuXG5cdHB1YmxpYyBwR2V0RnJhZ21lbnRDb2RlKCk6c3RyaW5nXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwdWJsaWMgcFVwZGF0ZVRleHR1cmVzKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX21haW5JbnB1dFRleHR1cmUpXG5cdFx0XHR0aGlzLl9tYWluSW5wdXRUZXh0dXJlLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX21haW5JbnB1dFRleHR1cmUgPSAoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuY3JlYXRlVGV4dHVyZSh0aGlzLl9zY2FsZWRUZXh0dXJlV2lkdGgsIHRoaXMuX3NjYWxlZFRleHR1cmVIZWlnaHQsIENvbnRleHRHTFRleHR1cmVGb3JtYXQuQkdSQSwgdHJ1ZSk7XG5cblx0XHR0aGlzLl90ZXh0dXJlRGltZW5zaW9uc0ludmFsaWQgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRQcm9ncmFtKHN0YWdlOlN0YWdlKTpJUHJvZ3JhbVxuXHR7XG5cdFx0aWYgKHRoaXMuX3Byb2dyYW0zREludmFsaWQpXG5cdFx0XHR0aGlzLnBVcGRhdGVQcm9ncmFtKHN0YWdlKTtcblxuXHRcdHJldHVybiB0aGlzLl9wcm9ncmFtM0Q7XG5cdH1cblxuXHRwdWJsaWMgYWN0aXZhdGUoc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEsIGRlcHRoVGV4dHVyZTpJVGV4dHVyZSlcblx0e1xuXHR9XG5cblx0cHVibGljIGRlYWN0aXZhdGUoc3RhZ2U6U3RhZ2UpXG5cdHtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVxdWlyZURlcHRoUmVuZGVyKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlcjtcblx0fVxuXG59XG5cbmV4cG9ydCA9IEZpbHRlcjNEVGFza0Jhc2U7Il19 \ No newline at end of file diff --git a/lib/filters/tasks/Filter3DTaskBase.ts b/lib/filters/tasks/Filter3DTaskBase.ts index 14010cc0..1c8f485b 100644 --- a/lib/filters/tasks/Filter3DTaskBase.ts +++ b/lib/filters/tasks/Filter3DTaskBase.ts @@ -3,12 +3,12 @@ import ByteArray = require("awayjs-core/lib/utils/ByteArray"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import AGALMiniAssembler = require("awayjs-stagegl/lib/aglsl/assembler/AGALMiniAssembler"); -import ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); +import ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); class Filter3DTaskBase { diff --git a/lib/managers/RTTBufferManager.js b/lib/managers/RTTBufferManager.js index 6ffca081..77877ac1 100755 --- a/lib/managers/RTTBufferManager.js +++ b/lib/managers/RTTBufferManager.js @@ -218,4 +218,4 @@ var RTTBufferManagerVO = (function () { })(); module.exports = RTTBufferManager; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9ydHRidWZmZXJtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbIlJUVEJ1ZmZlck1hbmFnZXIiLCJSVFRCdWZmZXJNYW5hZ2VyLmNvbnN0cnVjdG9yIiwiUlRUQnVmZmVyTWFuYWdlci5nZXRJbnN0YW5jZSIsIlJUVEJ1ZmZlck1hbmFnZXIuZ2V0UlRUQnVmZmVyTWFuYWdlckZyb21TdGFnZSIsIlJUVEJ1ZmZlck1hbmFnZXIuZGVsZXRlUlRUQnVmZmVyTWFuYWdlciIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWCIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWSIsIlJUVEJ1ZmZlck1hbmFnZXIudmlld1dpZHRoIiwiUlRUQnVmZmVyTWFuYWdlci52aWV3SGVpZ2h0IiwiUlRUQnVmZmVyTWFuYWdlci5yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIiLCJSVFRCdWZmZXJNYW5hZ2VyLnJlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyIiwiUlRUQnVmZmVyTWFuYWdlci5pbmRleEJ1ZmZlciIsIlJUVEJ1ZmZlck1hbmFnZXIucmVuZGVyVG9UZXh0dXJlUmVjdCIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVdpZHRoIiwiUlRUQnVmZmVyTWFuYWdlci50ZXh0dXJlSGVpZ2h0IiwiUlRUQnVmZmVyTWFuYWdlci5kaXNwb3NlIiwiUlRUQnVmZmVyTWFuYWdlci51cGRhdGVSVFRCdWZmZXJzIiwiUlRUQnVmZmVyTWFuYWdlclZPIiwiUlRUQnVmZmVyTWFuYWdlclZPLmNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFNBQVMsV0FBZSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2pFLElBQU8sS0FBSyxXQUFnQiw4QkFBOEIsQ0FBQyxDQUFDO0FBQzVELElBQU8sZUFBZSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFDOUUsSUFBTyxZQUFZLFdBQWUsb0NBQW9DLENBQUMsQ0FBQztBQU94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QUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzdEQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMxRUEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFNUVBLElBQUlBLEVBQUVBLEdBQVVBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQUNBLEVBQUVBLENBQUNBO1FBQzNCQSxJQUFJQSxFQUFFQSxHQUFVQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFDQSxFQUFFQSxDQUFDQTtRQUMzQkEsSUFBSUEsRUFBRUEsR0FBVUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsRUFBRUEsQ0FBQ0E7UUFDM0JBLElBQUlBLEVBQUVBLEdBQVVBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQUNBLEVBQUVBLENBQUNBO1FBRTNCQSxBQUNBQSxzSkFEc0pBO1FBQ3RKQSxZQUFZQSxHQUFHQSxDQUFLQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxDQUFFQSxDQUFDQTtRQUU3RkEsV0FBV0EsR0FBR0EsQ0FBTUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsQ0FBRUEsQ0FBQ0E7UUFFN0ZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdEVBLElBQUlBLENBQUNBLDJCQUEyQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFcEVBLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLEtBQUtBLENBQUNBO0lBQzlCQSxDQUFDQTtJQUNGaEIsdUJBQUNBO0FBQURBLENBM1BBLEFBMlBDQSxFQTNQOEIsZUFBZSxFQTJQN0M7QUFJRCxJQUFNLGtCQUFrQjtJQUF4QmlCLFNBQU1BLGtCQUFrQkE7SUFLeEJDLENBQUNBO0lBQURELHlCQUFDQTtBQUFEQSxDQUxBLEFBS0NBLElBQUE7QUFQRCxpQkFBUyxnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYW5hZ2Vycy9SVFRCdWZmZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IFRleHR1cmVVdGlsc1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvVGV4dHVyZVV0aWxzXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBJSW5kZXhCdWZmZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JSW5kZXhCdWZmZXJcIik7XG5pbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JVmVydGV4QnVmZmVyXCIpO1xuXG5jbGFzcyBSVFRCdWZmZXJNYW5hZ2VyIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyXG57XG5cdHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZXM6QXJyYXk8UlRUQnVmZmVyTWFuYWdlclZPPjtcblxuXHRwcml2YXRlIF9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXI6SVZlcnRleEJ1ZmZlcjtcblx0cHJpdmF0ZSBfcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXI6SVZlcnRleEJ1ZmZlcjtcblxuXHRwcml2YXRlIF9pbmRleEJ1ZmZlcjpJSW5kZXhCdWZmZXI7XG5cdHByaXZhdGUgX3N0YWdlOlN0YWdlO1xuXHRwcml2YXRlIF92aWV3V2lkdGg6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3ZpZXdIZWlnaHQ6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3RleHR1cmVXaWR0aDpudW1iZXIgPSAtMTtcblx0cHJpdmF0ZSBfdGV4dHVyZUhlaWdodDpudW1iZXIgPSAtMTtcblx0cHJpdmF0ZSBfcmVuZGVyVG9UZXh0dXJlUmVjdDpSZWN0YW5nbGU7XG5cdHByaXZhdGUgX2J1ZmZlcnNJbnZhbGlkOmJvb2xlYW4gPSB0cnVlO1xuXG5cdHByaXZhdGUgX3RleHR1cmVSYXRpb1g6bnVtYmVyO1xuXHRwcml2YXRlIF90ZXh0dXJlUmF0aW9ZOm51bWJlcjtcblxuXHRjb25zdHJ1Y3RvcihzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVSZWN0ID0gbmV3IFJlY3RhbmdsZSgpO1xuXG5cdFx0dGhpcy5fc3RhZ2UgPSBzdGFnZTtcblxuXHR9XG5cblx0cHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShzdGFnZTpTdGFnZSk6UlRUQnVmZmVyTWFuYWdlclxuXHR7XG5cdFx0aWYgKCFzdGFnZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0YWdlIGtleSBjYW5ub3QgYmUgbnVsbCFcIik7XG5cblx0XHRpZiAoUlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzID09IG51bGwpXG5cdFx0XHRSVFRCdWZmZXJNYW5hZ2VyLl9pbnN0YW5jZXMgPSBuZXcgQXJyYXk8UlRUQnVmZmVyTWFuYWdlclZPPigpO1xuXG5cdFx0dmFyIHJ0dEJ1ZmZlck1hbmFnZXI6UlRUQnVmZmVyTWFuYWdlciA9IFJUVEJ1ZmZlck1hbmFnZXIuZ2V0UlRUQnVmZmVyTWFuYWdlckZyb21TdGFnZShzdGFnZSk7XG5cblx0XHRpZiAocnR0QnVmZmVyTWFuYWdlciA9PSBudWxsKSB7XG5cdFx0XHRydHRCdWZmZXJNYW5hZ2VyID0gbmV3IFJUVEJ1ZmZlck1hbmFnZXIoc3RhZ2UpO1xuXG5cdFx0XHR2YXIgdm86UlRUQnVmZmVyTWFuYWdlclZPID0gbmV3IFJUVEJ1ZmZlck1hbmFnZXJWTygpO1xuXG5cdFx0XHR2by5zdGFnZTNkID0gc3RhZ2U7XG5cdFx0XHR2by5ydHRiZm0gPSBydHRCdWZmZXJNYW5hZ2VyO1xuXG5cdFx0XHRSVFRCdWZmZXJNYW5hZ2VyLl9pbnN0YW5jZXMucHVzaCh2byk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJ0dEJ1ZmZlck1hbmFnZXI7XG5cblx0fVxuXG5cdHByaXZhdGUgc3RhdGljIGdldFJUVEJ1ZmZlck1hbmFnZXJGcm9tU3RhZ2Uoc3RhZ2U6U3RhZ2UpOlJUVEJ1ZmZlck1hbmFnZXJcblx0e1xuXG5cdFx0dmFyIGw6bnVtYmVyID0gUlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzLmxlbmd0aDtcblx0XHR2YXIgcjpSVFRCdWZmZXJNYW5hZ2VyVk87XG5cblx0XHRmb3IgKHZhciBjOm51bWJlciA9IDA7IGMgPCBsOyBjKyspIHtcblx0XHRcdHIgPSBSVFRCdWZmZXJNYW5hZ2VyLl9pbnN0YW5jZXNbIGMgXTtcblxuXHRcdFx0aWYgKHIuc3RhZ2UzZCA9PT0gc3RhZ2UpXG5cdFx0XHRcdHJldHVybiByLnJ0dGJmbTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgc3RhdGljIGRlbGV0ZVJUVEJ1ZmZlck1hbmFnZXIoc3RhZ2U6U3RhZ2UpOnZvaWRcblx0e1xuXHRcdHZhciBsOm51bWJlciA9IFJUVEJ1ZmZlck1hbmFnZXIuX2luc3RhbmNlcy5sZW5ndGg7XG5cdFx0dmFyIHI6UlRUQnVmZmVyTWFuYWdlclZPO1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbDsgYysrKSB7XG5cdFx0XHRyID0gUlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzWyBjIF07XG5cblx0XHRcdGlmIChyLnN0YWdlM2QgPT09IHN0YWdlKSB7XG5cdFx0XHRcdFJUVEJ1ZmZlck1hbmFnZXIuX2luc3RhbmNlcy5zcGxpY2UoYywgMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRleHR1cmVSYXRpb1goKTpudW1iZXJcblx0e1xuXHRcdGlmICh0aGlzLl9idWZmZXJzSW52YWxpZClcblx0XHRcdHRoaXMudXBkYXRlUlRUQnVmZmVycygpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVSYXRpb1g7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRleHR1cmVSYXRpb1koKTpudW1iZXJcblx0e1xuXHRcdGlmICh0aGlzLl9idWZmZXJzSW52YWxpZClcblx0XHRcdHRoaXMudXBkYXRlUlRUQnVmZmVycygpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVSYXRpb1k7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHZpZXdXaWR0aCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdXaWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgdmlld1dpZHRoKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh2YWx1ZSA9PSB0aGlzLl92aWV3V2lkdGgpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl92aWV3V2lkdGggPSB2YWx1ZTtcblxuXHRcdHRoaXMuX2J1ZmZlcnNJbnZhbGlkID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3RleHR1cmVXaWR0aCA9IFRleHR1cmVVdGlscy5nZXRCZXN0UG93ZXJPZjIodGhpcy5fdmlld1dpZHRoKTtcblxuXHRcdGlmICh0aGlzLl90ZXh0dXJlV2lkdGggPiB0aGlzLl92aWV3V2lkdGgpIHtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QueCA9IE1hdGguZmxvb3IoKHRoaXMuX3RleHR1cmVXaWR0aCAtIHRoaXMuX3ZpZXdXaWR0aCkqLjUpO1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdC53aWR0aCA9IHRoaXMuX3ZpZXdXaWR0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdC54ID0gMDtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3Qud2lkdGggPSB0aGlzLl90ZXh0dXJlV2lkdGg7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5SRVNJWkUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdmlld0hlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdIZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHZpZXdIZWlnaHQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHZhbHVlID09IHRoaXMuX3ZpZXdIZWlnaHQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl92aWV3SGVpZ2h0ID0gdmFsdWU7XG5cblx0XHR0aGlzLl9idWZmZXJzSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLl90ZXh0dXJlSGVpZ2h0ID0gVGV4dHVyZVV0aWxzLmdldEJlc3RQb3dlck9mMih0aGlzLl92aWV3SGVpZ2h0KTtcblxuXHRcdGlmICh0aGlzLl90ZXh0dXJlSGVpZ2h0ID4gdGhpcy5fdmlld0hlaWdodCkge1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdC55ID0gTWF0aC5mbG9vcigodGhpcy5fdGV4dHVyZUhlaWdodCAtIHRoaXMuX3ZpZXdIZWlnaHQpKi41KTtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QuaGVpZ2h0ID0gdGhpcy5fdmlld0hlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdC55ID0gMDtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZUhlaWdodDtcblx0XHR9XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KEV2ZW50LlJFU0laRSkpO1xuXHR9XG5cblx0cHVibGljIGdldCByZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIoKTpJVmVydGV4QnVmZmVyXG5cdHtcblx0XHRpZiAodGhpcy5fYnVmZmVyc0ludmFsaWQpXG5cdFx0XHR0aGlzLnVwZGF0ZVJUVEJ1ZmZlcnMoKTtcblxuXHRcdHJldHVybiB0aGlzLl9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyKCk6SVZlcnRleEJ1ZmZlclxuXHR7XG5cdFx0aWYgKHRoaXMuX2J1ZmZlcnNJbnZhbGlkKVxuXHRcdFx0dGhpcy51cGRhdGVSVFRCdWZmZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXI7XG5cblx0fVxuXG5cdHB1YmxpYyBnZXQgaW5kZXhCdWZmZXIoKTpJSW5kZXhCdWZmZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9pbmRleEJ1ZmZlcjtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyVG9UZXh0dXJlUmVjdCgpOlJlY3RhbmdsZVxuXHR7XG5cdFx0aWYgKHRoaXMuX2J1ZmZlcnNJbnZhbGlkKVxuXHRcdFx0dGhpcy51cGRhdGVSVFRCdWZmZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZVdpZHRoKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZVdpZHRoO1xuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlSGVpZ2h0KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZUhlaWdodDtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdFJUVEJ1ZmZlck1hbmFnZXIuZGVsZXRlUlRUQnVmZmVyTWFuYWdlcih0aGlzLl9zdGFnZSk7XG5cblx0XHRpZiAodGhpcy5faW5kZXhCdWZmZXIpIHtcblx0XHRcdHRoaXMuX2luZGV4QnVmZmVyLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3JlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1NjcmVlblZlcnRleEJ1ZmZlciA9IG51bGw7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuXHRcdFx0dGhpcy5faW5kZXhCdWZmZXIgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdC8vIHRvZG86IHBsYWNlIGFsbCB0aGlzIGluIGEgc2VwYXJhdGUgbW9kZWwsIHNpbmNlIGl0J3MgdXNlZCBhbGwgb3ZlciB0aGUgcGxhY2Vcblx0Ly8gbWF5YmUgaXQgZXZlbiBoYXMgYSBwbGFjZSBpbiB0aGUgY29yZSAodG9nZXRoZXIgd2l0aCBzY3JlZW5SZWN0IGV0Yyk/XG5cdC8vIG5lZWRzIHRvIGJlIHN0b3JlZCBwZXIgdmlldyBvZiBjb3Vyc2Vcblx0cHJpdmF0ZSB1cGRhdGVSVFRCdWZmZXJzKClcblx0e1xuXHRcdHZhciBjb250ZXh0OkNvbnRleHRHTEJhc2UgPSA8Q29udGV4dEdMQmFzZT4gdGhpcy5fc3RhZ2UuY29udGV4dDtcblx0XHR2YXIgdGV4dHVyZVZlcnRzOm51bWJlcltdO1xuXHRcdHZhciBzY3JlZW5WZXJ0czpudW1iZXJbXTtcblxuXHRcdHZhciB4Om51bWJlcjtcblx0XHR2YXIgeTpudW1iZXI7XG5cblx0XHRpZiAodGhpcy5fcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyID09IG51bGwpXG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcig0LCA1KTtcblxuXHRcdGlmICh0aGlzLl9yZW5kZXJUb1NjcmVlblZlcnRleEJ1ZmZlciA9PSBudWxsKVxuXHRcdFx0dGhpcy5fcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcig0LCA1KTtcblxuXHRcdGlmICghdGhpcy5faW5kZXhCdWZmZXIpIHtcblx0XHRcdHRoaXMuX2luZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcig2KTtcblxuXHRcdFx0dGhpcy5faW5kZXhCdWZmZXIudXBsb2FkRnJvbUFycmF5KFsyLCAxLCAwLCAzLCAyLCAwXSwgMCwgNik7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGV4dHVyZVJhdGlvWCA9IHggPSBNYXRoLm1pbih0aGlzLl92aWV3V2lkdGgvdGhpcy5fdGV4dHVyZVdpZHRoLCAxKTtcblx0XHR0aGlzLl90ZXh0dXJlUmF0aW9ZID0geSA9IE1hdGgubWluKHRoaXMuX3ZpZXdIZWlnaHQvdGhpcy5fdGV4dHVyZUhlaWdodCwgMSk7XG5cblx0XHR2YXIgdTE6bnVtYmVyID0gKDEgLSB4KSouNTtcblx0XHR2YXIgdTI6bnVtYmVyID0gKHggKyAxKSouNTtcblx0XHR2YXIgdjE6bnVtYmVyID0gKHkgKyAxKSouNTtcblx0XHR2YXIgdjI6bnVtYmVyID0gKDEgLSB5KSouNTtcblxuXHRcdC8vIGxhc3QgZWxlbWVudCBjb250YWlucyBpbmRpY2VzIGZvciBkYXRhIHBlciB2ZXJ0ZXggdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB2ZXJ0ZXggc2hhZGVyIGlmIG5lY2Vzc2FyeSAoaWU6IGZydXN0dW0gY29ybmVycyBmb3IgZGVmZXJyZWQgcmVuZGVyaW5nKVxuXHRcdHRleHR1cmVWZXJ0cyA9IFsgICAgLXgsIC15LCB1MSwgdjEsIDAsIHgsIC15LCB1MiwgdjEsIDEsIHgsIHksIHUyLCB2MiwgMiwgLXgsIHksIHUxLCB2MiwgMyBdO1xuXG5cdFx0c2NyZWVuVmVydHMgPSBbICAgICAtMSwgLTEsIHUxLCB2MSwgMCwgMSwgLTEsIHUyLCB2MSwgMSwgMSwgMSwgdTIsIHYyLCAyLCAtMSwgMSwgdTEsIHYyLCAzIF07XG5cblx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIudXBsb2FkRnJvbUFycmF5KHRleHR1cmVWZXJ0cywgMCwgNCk7XG5cdFx0dGhpcy5fcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXIudXBsb2FkRnJvbUFycmF5KHNjcmVlblZlcnRzLCAwLCA0KTtcblxuXHRcdHRoaXMuX2J1ZmZlcnNJbnZhbGlkID0gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0ID0gUlRUQnVmZmVyTWFuYWdlcjtcblxuY2xhc3MgUlRUQnVmZmVyTWFuYWdlclZPXG57XG5cdHB1YmxpYyBzdGFnZTNkOlN0YWdlO1xuXG5cdHB1YmxpYyBydHRiZm06UlRUQnVmZmVyTWFuYWdlcjtcbn0iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9ydHRidWZmZXJtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbIlJUVEJ1ZmZlck1hbmFnZXIiLCJSVFRCdWZmZXJNYW5hZ2VyLmNvbnN0cnVjdG9yIiwiUlRUQnVmZmVyTWFuYWdlci5nZXRJbnN0YW5jZSIsIlJUVEJ1ZmZlck1hbmFnZXIuZ2V0UlRUQnVmZmVyTWFuYWdlckZyb21TdGFnZSIsIlJUVEJ1ZmZlck1hbmFnZXIuZGVsZXRlUlRUQnVmZmVyTWFuYWdlciIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWCIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWSIsIlJUVEJ1ZmZlck1hbmFnZXIudmlld1dpZHRoIiwiUlRUQnVmZmVyTWFuYWdlci52aWV3SGVpZ2h0IiwiUlRUQnVmZmVyTWFuYWdlci5yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIiLCJSVFRCdWZmZXJNYW5hZ2VyLnJlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyIiwiUlRUQnVmZmVyTWFuYWdlci5pbmRleEJ1ZmZlciIsIlJUVEJ1ZmZlck1hbmFnZXIucmVuZGVyVG9UZXh0dXJlUmVjdCIsIlJUVEJ1ZmZlck1hbmFnZXIudGV4dHVyZVdpZHRoIiwiUlRUQnVmZmVyTWFuYWdlci50ZXh0dXJlSGVpZ2h0IiwiUlRUQnVmZmVyTWFuYWdlci5kaXNwb3NlIiwiUlRUQnVmZmVyTWFuYWdlci51cGRhdGVSVFRCdWZmZXJzIiwiUlRUQnVmZmVyTWFuYWdlclZPIiwiUlRUQnVmZmVyTWFuYWdlclZPLmNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFNBQVMsV0FBZSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2pFLElBQU8sS0FBSyxXQUFnQiw4QkFBOEIsQ0FBQyxDQUFDO0FBQzVELElBQU8sZUFBZSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFDOUUsSUFBTyxZQUFZLFdBQWUsb0NBQW9DLENBQUMsQ0FBQztBQU94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QUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzdEQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMxRUEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFNUVBLElBQUlBLEVBQUVBLEdBQVVBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQUNBLEVBQUVBLENBQUNBO1FBQzNCQSxJQUFJQSxFQUFFQSxHQUFVQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFDQSxFQUFFQSxDQUFDQTtRQUMzQkEsSUFBSUEsRUFBRUEsR0FBVUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsRUFBRUEsQ0FBQ0E7UUFDM0JBLElBQUlBLEVBQUVBLEdBQVVBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQUNBLEVBQUVBLENBQUNBO1FBRTNCQSxBQUNBQSxzSkFEc0pBO1FBQ3RKQSxZQUFZQSxHQUFHQSxDQUFLQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxDQUFDQSxDQUFFQSxDQUFDQTtRQUU3RkEsV0FBV0EsR0FBR0EsQ0FBTUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsQ0FBQ0EsQ0FBRUEsQ0FBQ0E7UUFFN0ZBLElBQUlBLENBQUNBLDRCQUE0QkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdEVBLElBQUlBLENBQUNBLDJCQUEyQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFcEVBLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLEtBQUtBLENBQUNBO0lBQzlCQSxDQUFDQTtJQUNGaEIsdUJBQUNBO0FBQURBLENBM1BBLEFBMlBDQSxFQTNQOEIsZUFBZSxFQTJQN0M7QUFJRCxJQUFNLGtCQUFrQjtJQUF4QmlCLFNBQU1BLGtCQUFrQkE7SUFLeEJDLENBQUNBO0lBQURELHlCQUFDQTtBQUFEQSxDQUxBLEFBS0NBLElBQUE7QUFQRCxpQkFBUyxnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYW5hZ2Vycy9SVFRCdWZmZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IFRleHR1cmVVdGlsc1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvVGV4dHVyZVV0aWxzXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JSW5kZXhCdWZmZXJcIik7XG5pbXBvcnQgSVZlcnRleEJ1ZmZlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVZlcnRleEJ1ZmZlclwiKTtcblxuY2xhc3MgUlRUQnVmZmVyTWFuYWdlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlclxue1xuXHRwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2VzOkFycmF5PFJUVEJ1ZmZlck1hbmFnZXJWTz47XG5cblx0cHJpdmF0ZSBfcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyOklWZXJ0ZXhCdWZmZXI7XG5cdHByaXZhdGUgX3JlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyOklWZXJ0ZXhCdWZmZXI7XG5cblx0cHJpdmF0ZSBfaW5kZXhCdWZmZXI6SUluZGV4QnVmZmVyO1xuXHRwcml2YXRlIF9zdGFnZTpTdGFnZTtcblx0cHJpdmF0ZSBfdmlld1dpZHRoOm51bWJlciA9IC0xO1xuXHRwcml2YXRlIF92aWV3SGVpZ2h0Om51bWJlciA9IC0xO1xuXHRwcml2YXRlIF90ZXh0dXJlV2lkdGg6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3RleHR1cmVIZWlnaHQ6bnVtYmVyID0gLTE7XG5cdHByaXZhdGUgX3JlbmRlclRvVGV4dHVyZVJlY3Q6UmVjdGFuZ2xlO1xuXHRwcml2YXRlIF9idWZmZXJzSW52YWxpZDpib29sZWFuID0gdHJ1ZTtcblxuXHRwcml2YXRlIF90ZXh0dXJlUmF0aW9YOm51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZVJhdGlvWTpudW1iZXI7XG5cblx0Y29uc3RydWN0b3Ioc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlUmVjdCA9IG5ldyBSZWN0YW5nbGUoKTtcblxuXHRcdHRoaXMuX3N0YWdlID0gc3RhZ2U7XG5cblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2Uoc3RhZ2U6U3RhZ2UpOlJUVEJ1ZmZlck1hbmFnZXJcblx0e1xuXHRcdGlmICghc3RhZ2UpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdGFnZSBrZXkgY2Fubm90IGJlIG51bGwhXCIpO1xuXG5cdFx0aWYgKFJUVEJ1ZmZlck1hbmFnZXIuX2luc3RhbmNlcyA9PSBudWxsKVxuXHRcdFx0UlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzID0gbmV3IEFycmF5PFJUVEJ1ZmZlck1hbmFnZXJWTz4oKTtcblxuXHRcdHZhciBydHRCdWZmZXJNYW5hZ2VyOlJUVEJ1ZmZlck1hbmFnZXIgPSBSVFRCdWZmZXJNYW5hZ2VyLmdldFJUVEJ1ZmZlck1hbmFnZXJGcm9tU3RhZ2Uoc3RhZ2UpO1xuXG5cdFx0aWYgKHJ0dEJ1ZmZlck1hbmFnZXIgPT0gbnVsbCkge1xuXHRcdFx0cnR0QnVmZmVyTWFuYWdlciA9IG5ldyBSVFRCdWZmZXJNYW5hZ2VyKHN0YWdlKTtcblxuXHRcdFx0dmFyIHZvOlJUVEJ1ZmZlck1hbmFnZXJWTyA9IG5ldyBSVFRCdWZmZXJNYW5hZ2VyVk8oKTtcblxuXHRcdFx0dm8uc3RhZ2UzZCA9IHN0YWdlO1xuXHRcdFx0dm8ucnR0YmZtID0gcnR0QnVmZmVyTWFuYWdlcjtcblxuXHRcdFx0UlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzLnB1c2godm8pO1xuXHRcdH1cblxuXHRcdHJldHVybiBydHRCdWZmZXJNYW5hZ2VyO1xuXG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBnZXRSVFRCdWZmZXJNYW5hZ2VyRnJvbVN0YWdlKHN0YWdlOlN0YWdlKTpSVFRCdWZmZXJNYW5hZ2VyXG5cdHtcblxuXHRcdHZhciBsOm51bWJlciA9IFJUVEJ1ZmZlck1hbmFnZXIuX2luc3RhbmNlcy5sZW5ndGg7XG5cdFx0dmFyIHI6UlRUQnVmZmVyTWFuYWdlclZPO1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbDsgYysrKSB7XG5cdFx0XHRyID0gUlRUQnVmZmVyTWFuYWdlci5faW5zdGFuY2VzWyBjIF07XG5cblx0XHRcdGlmIChyLnN0YWdlM2QgPT09IHN0YWdlKVxuXHRcdFx0XHRyZXR1cm4gci5ydHRiZm07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBkZWxldGVSVFRCdWZmZXJNYW5hZ2VyKHN0YWdlOlN0YWdlKTp2b2lkXG5cdHtcblx0XHR2YXIgbDpudW1iZXIgPSBSVFRCdWZmZXJNYW5hZ2VyLl9pbnN0YW5jZXMubGVuZ3RoO1xuXHRcdHZhciByOlJUVEJ1ZmZlck1hbmFnZXJWTztcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IGw7IGMrKykge1xuXHRcdFx0ciA9IFJUVEJ1ZmZlck1hbmFnZXIuX2luc3RhbmNlc1sgYyBdO1xuXG5cdFx0XHRpZiAoci5zdGFnZTNkID09PSBzdGFnZSkge1xuXHRcdFx0XHRSVFRCdWZmZXJNYW5hZ2VyLl9pbnN0YW5jZXMuc3BsaWNlKGMsIDEpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlUmF0aW9YKCk6bnVtYmVyXG5cdHtcblx0XHRpZiAodGhpcy5fYnVmZmVyc0ludmFsaWQpXG5cdFx0XHR0aGlzLnVwZGF0ZVJUVEJ1ZmZlcnMoKTtcblxuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlUmF0aW9YO1xuXHR9XG5cblx0cHVibGljIGdldCB0ZXh0dXJlUmF0aW9ZKCk6bnVtYmVyXG5cdHtcblx0XHRpZiAodGhpcy5fYnVmZmVyc0ludmFsaWQpXG5cdFx0XHR0aGlzLnVwZGF0ZVJUVEJ1ZmZlcnMoKTtcblxuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlUmF0aW9ZO1xuXHR9XG5cblx0cHVibGljIGdldCB2aWV3V2lkdGgoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl92aWV3V2lkdGg7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHZpZXdXaWR0aCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodmFsdWUgPT0gdGhpcy5fdmlld1dpZHRoKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld1dpZHRoID0gdmFsdWU7XG5cblx0XHR0aGlzLl9idWZmZXJzSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLl90ZXh0dXJlV2lkdGggPSBUZXh0dXJlVXRpbHMuZ2V0QmVzdFBvd2VyT2YyKHRoaXMuX3ZpZXdXaWR0aCk7XG5cblx0XHRpZiAodGhpcy5fdGV4dHVyZVdpZHRoID4gdGhpcy5fdmlld1dpZHRoKSB7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVSZWN0LnggPSBNYXRoLmZsb29yKCh0aGlzLl90ZXh0dXJlV2lkdGggLSB0aGlzLl92aWV3V2lkdGgpKi41KTtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3Qud2lkdGggPSB0aGlzLl92aWV3V2lkdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QueCA9IDA7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVSZWN0LndpZHRoID0gdGhpcy5fdGV4dHVyZVdpZHRoO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoRXZlbnQuUkVTSVpFKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHZpZXdIZWlnaHQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl92aWV3SGVpZ2h0O1xuXHR9XG5cblx0cHVibGljIHNldCB2aWV3SGVpZ2h0KHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh2YWx1ZSA9PSB0aGlzLl92aWV3SGVpZ2h0KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld0hlaWdodCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fYnVmZmVyc0ludmFsaWQgPSB0cnVlO1xuXG5cdFx0dGhpcy5fdGV4dHVyZUhlaWdodCA9IFRleHR1cmVVdGlscy5nZXRCZXN0UG93ZXJPZjIodGhpcy5fdmlld0hlaWdodCk7XG5cblx0XHRpZiAodGhpcy5fdGV4dHVyZUhlaWdodCA+IHRoaXMuX3ZpZXdIZWlnaHQpIHtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QueSA9IE1hdGguZmxvb3IoKHRoaXMuX3RleHR1cmVIZWlnaHQgLSB0aGlzLl92aWV3SGVpZ2h0KSouNSk7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVSZWN0LmhlaWdodCA9IHRoaXMuX3ZpZXdIZWlnaHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3QueSA9IDA7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVSZWN0LmhlaWdodCA9IHRoaXMuX3RleHR1cmVIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5SRVNJWkUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyKCk6SVZlcnRleEJ1ZmZlclxuXHR7XG5cdFx0aWYgKHRoaXMuX2J1ZmZlcnNJbnZhbGlkKVxuXHRcdFx0dGhpcy51cGRhdGVSVFRCdWZmZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyO1xuXHR9XG5cblx0cHVibGljIGdldCByZW5kZXJUb1NjcmVlblZlcnRleEJ1ZmZlcigpOklWZXJ0ZXhCdWZmZXJcblx0e1xuXHRcdGlmICh0aGlzLl9idWZmZXJzSW52YWxpZClcblx0XHRcdHRoaXMudXBkYXRlUlRUQnVmZmVycygpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyO1xuXG5cdH1cblxuXHRwdWJsaWMgZ2V0IGluZGV4QnVmZmVyKCk6SUluZGV4QnVmZmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXhCdWZmZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlbmRlclRvVGV4dHVyZVJlY3QoKTpSZWN0YW5nbGVcblx0e1xuXHRcdGlmICh0aGlzLl9idWZmZXJzSW52YWxpZClcblx0XHRcdHRoaXMudXBkYXRlUlRUQnVmZmVycygpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclRvVGV4dHVyZVJlY3Q7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHRleHR1cmVXaWR0aCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVXaWR0aDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgdGV4dHVyZUhlaWdodCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVIZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRSVFRCdWZmZXJNYW5hZ2VyLmRlbGV0ZVJUVEJ1ZmZlck1hbmFnZXIodGhpcy5fc3RhZ2UpO1xuXG5cdFx0aWYgKHRoaXMuX2luZGV4QnVmZmVyKSB7XG5cdFx0XHR0aGlzLl9pbmRleEJ1ZmZlci5kaXNwb3NlKCk7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1NjcmVlblZlcnRleEJ1ZmZlci5kaXNwb3NlKCk7XG5cdFx0XHR0aGlzLl9yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXIuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXIgPSBudWxsO1xuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyID0gbnVsbDtcblx0XHRcdHRoaXMuX2luZGV4QnVmZmVyID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvLyB0b2RvOiBwbGFjZSBhbGwgdGhpcyBpbiBhIHNlcGFyYXRlIG1vZGVsLCBzaW5jZSBpdCdzIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlXG5cdC8vIG1heWJlIGl0IGV2ZW4gaGFzIGEgcGxhY2UgaW4gdGhlIGNvcmUgKHRvZ2V0aGVyIHdpdGggc2NyZWVuUmVjdCBldGMpP1xuXHQvLyBuZWVkcyB0byBiZSBzdG9yZWQgcGVyIHZpZXcgb2YgY291cnNlXG5cdHByaXZhdGUgdXBkYXRlUlRUQnVmZmVycygpXG5cdHtcblx0XHR2YXIgY29udGV4dDpDb250ZXh0R0xCYXNlID0gPENvbnRleHRHTEJhc2U+IHRoaXMuX3N0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIHRleHR1cmVWZXJ0czpudW1iZXJbXTtcblx0XHR2YXIgc2NyZWVuVmVydHM6bnVtYmVyW107XG5cblx0XHR2YXIgeDpudW1iZXI7XG5cdFx0dmFyIHk6bnVtYmVyO1xuXG5cdFx0aWYgKHRoaXMuX3JlbmRlclRvVGV4dHVyZVZlcnRleEJ1ZmZlciA9PSBudWxsKVxuXHRcdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIoNCwgNSk7XG5cblx0XHRpZiAodGhpcy5fcmVuZGVyVG9TY3JlZW5WZXJ0ZXhCdWZmZXIgPT0gbnVsbClcblx0XHRcdHRoaXMuX3JlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIoNCwgNSk7XG5cblx0XHRpZiAoIXRoaXMuX2luZGV4QnVmZmVyKSB7XG5cdFx0XHR0aGlzLl9pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIoNik7XG5cblx0XHRcdHRoaXMuX2luZGV4QnVmZmVyLnVwbG9hZEZyb21BcnJheShbMiwgMSwgMCwgMywgMiwgMF0sIDAsIDYpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3RleHR1cmVSYXRpb1ggPSB4ID0gTWF0aC5taW4odGhpcy5fdmlld1dpZHRoL3RoaXMuX3RleHR1cmVXaWR0aCwgMSk7XG5cdFx0dGhpcy5fdGV4dHVyZVJhdGlvWSA9IHkgPSBNYXRoLm1pbih0aGlzLl92aWV3SGVpZ2h0L3RoaXMuX3RleHR1cmVIZWlnaHQsIDEpO1xuXG5cdFx0dmFyIHUxOm51bWJlciA9ICgxIC0geCkqLjU7XG5cdFx0dmFyIHUyOm51bWJlciA9ICh4ICsgMSkqLjU7XG5cdFx0dmFyIHYxOm51bWJlciA9ICh5ICsgMSkqLjU7XG5cdFx0dmFyIHYyOm51bWJlciA9ICgxIC0geSkqLjU7XG5cblx0XHQvLyBsYXN0IGVsZW1lbnQgY29udGFpbnMgaW5kaWNlcyBmb3IgZGF0YSBwZXIgdmVydGV4IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgdmVydGV4IHNoYWRlciBpZiBuZWNlc3NhcnkgKGllOiBmcnVzdHVtIGNvcm5lcnMgZm9yIGRlZmVycmVkIHJlbmRlcmluZylcblx0XHR0ZXh0dXJlVmVydHMgPSBbICAgIC14LCAteSwgdTEsIHYxLCAwLCB4LCAteSwgdTIsIHYxLCAxLCB4LCB5LCB1MiwgdjIsIDIsIC14LCB5LCB1MSwgdjIsIDMgXTtcblxuXHRcdHNjcmVlblZlcnRzID0gWyAgICAgLTEsIC0xLCB1MSwgdjEsIDAsIDEsIC0xLCB1MiwgdjEsIDEsIDEsIDEsIHUyLCB2MiwgMiwgLTEsIDEsIHUxLCB2MiwgMyBdO1xuXG5cdFx0dGhpcy5fcmVuZGVyVG9UZXh0dXJlVmVydGV4QnVmZmVyLnVwbG9hZEZyb21BcnJheSh0ZXh0dXJlVmVydHMsIDAsIDQpO1xuXHRcdHRoaXMuX3JlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyLnVwbG9hZEZyb21BcnJheShzY3JlZW5WZXJ0cywgMCwgNCk7XG5cblx0XHR0aGlzLl9idWZmZXJzSW52YWxpZCA9IGZhbHNlO1xuXHR9XG59XG5cbmV4cG9ydCA9IFJUVEJ1ZmZlck1hbmFnZXI7XG5cbmNsYXNzIFJUVEJ1ZmZlck1hbmFnZXJWT1xue1xuXHRwdWJsaWMgc3RhZ2UzZDpTdGFnZTtcblxuXHRwdWJsaWMgcnR0YmZtOlJUVEJ1ZmZlck1hbmFnZXI7XG59Il19 \ No newline at end of file diff --git a/lib/managers/RTTBufferManager.ts b/lib/managers/RTTBufferManager.ts index d216971c..3703bc29 100644 --- a/lib/managers/RTTBufferManager.ts +++ b/lib/managers/RTTBufferManager.ts @@ -3,10 +3,10 @@ import Event = require("awayjs-core/lib/events/Event"); import EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); import TextureUtils = require("awayjs-core/lib/utils/TextureUtils"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); class RTTBufferManager extends EventDispatcher { diff --git a/lib/managers/StageManager.js b/lib/managers/StageManager.js index 89781655..97adf817 100755 --- a/lib/managers/StageManager.js +++ b/lib/managers/StageManager.js @@ -7,7 +7,7 @@ var __extends = this.__extends || function (d, b) { var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); var StageEvent = require("awayjs-display/lib/events/StageEvent"); -var Stage = require("awayjs-stagegl/lib/core/base/Stage"); +var Stage = require("awayjs-stagegl/lib/base/Stage"); /** * The StageManager class provides a multiton object that handles management for Stage objects. * @@ -143,4 +143,4 @@ var StageManager = (function (_super) { })(EventDispatcher); module.exports = StageManager; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9zdGFnZW1hbmFnZXIudHMiXSwibmFtZXMiOlsiU3RhZ2VNYW5hZ2VyIiwiU3RhZ2VNYW5hZ2VyLmNvbnN0cnVjdG9yIiwiU3RhZ2VNYW5hZ2VyLmdldEluc3RhbmNlIiwiU3RhZ2VNYW5hZ2VyLmdldFN0YWdlQXQiLCJTdGFnZU1hbmFnZXIuaVJlbW92ZVN0YWdlIiwiU3RhZ2VNYW5hZ2VyLmdldEZyZWVTdGFnZSIsIlN0YWdlTWFuYWdlci5oYXNGcmVlU3RhZ2UiLCJTdGFnZU1hbmFnZXIubnVtU2xvdHNGcmVlIiwiU3RhZ2VNYW5hZ2VyLm51bVNsb3RzVXNlZCIsIlN0YWdlTWFuYWdlci5udW1TbG90c1RvdGFsIiwiU3RhZ2VNYW5hZ2VyLm9uQ29udGV4dENyZWF0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sZUFBZSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFDOUUsSUFBTyxhQUFhLFdBQWMsc0NBQXNDLENBQUMsQ0FBQztBQUUxRSxJQUFPLFVBQVUsV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBRXhFLElBQU8sS0FBSyxXQUFnQixvQ0FBb0MsQ0FBQyxDQUFDO0FBRWxFLEFBS0E7Ozs7R0FERztJQUNHLFlBQVk7SUFBU0EsVUFBckJBLFlBQVlBLFVBQXdCQTtJQVN6Q0E7Ozs7T0FJR0E7SUFDSEEsU0FkS0EsWUFBWUE7UUFBbEJDLGlCQTBJQ0E7UUExSENBLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxLQUFLQSxDQUFRQSxZQUFZQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBO1FBRWpFQSxJQUFJQSxDQUFDQSx5QkFBeUJBLEdBQUdBLFVBQUNBLEtBQVdBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBNUJBLENBQTRCQSxDQUFDQTtJQUNoRkEsQ0FBQ0E7SUFFREQ7Ozs7T0FJR0E7SUFDV0Es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MElDQSxFQTFJMEIsZUFBZSxFQTBJekM7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoibWFuYWdlcnMvU3RhZ2VNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IEFyZ3VtZW50RXJyb3JcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQXJndW1lbnRFcnJvclwiKTtcblxuaW1wb3J0IFN0YWdlRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2V2ZW50cy9TdGFnZUV2ZW50XCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuXG4vKipcbiAqIFRoZSBTdGFnZU1hbmFnZXIgY2xhc3MgcHJvdmlkZXMgYSBtdWx0aXRvbiBvYmplY3QgdGhhdCBoYW5kbGVzIG1hbmFnZW1lbnQgZm9yIFN0YWdlIG9iamVjdHMuXG4gKlxuICogQHNlZSBhd2F5LmJhc2UuU3RhZ2VcbiAqL1xuY2xhc3MgU3RhZ2VNYW5hZ2VyIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyXG57XG5cdHByaXZhdGUgc3RhdGljIFNUQUdFX01BWF9RVUFOVElUWTpudW1iZXIgPSA4O1xuXHRwcml2YXRlIF9zdGFnZXM6QXJyYXk8U3RhZ2U+O1xuXG5cdHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTpTdGFnZU1hbmFnZXI7XG5cdHByaXZhdGUgc3RhdGljIF9udW1TdGFnZXM6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfb25Db250ZXh0Q3JlYXRlZERlbGVnYXRlOihldmVudDpFdmVudCkgPT4gdm9pZDtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTdGFnZU1hbmFnZXIgY2xhc3MuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIFN0YWdlIG9iamVjdHMgdG8gYmUgbWFuYWdlZC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9zdGFnZXMgPSBuZXcgQXJyYXk8U3RhZ2U+KFN0YWdlTWFuYWdlci5TVEFHRV9NQVhfUVVBTlRJVFkpO1xuXG5cdFx0dGhpcy5fb25Db250ZXh0Q3JlYXRlZERlbGVnYXRlID0gKGV2ZW50OkV2ZW50KSA9PiB0aGlzLm9uQ29udGV4dENyZWF0ZWQoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBTdGFnZU1hbmFnZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBTdGFnZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIFN0YWdlIG9iamVjdHMgdG8gYmUgbWFuYWdlZC5cblx0ICogQHJldHVybiBUaGUgU3RhZ2VNYW5hZ2VyIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gU3RhZ2Ugb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOlN0YWdlTWFuYWdlclxuXHR7XG5cdFx0aWYgKHRoaXMuX2luc3RhbmNlID09IG51bGwpXG5cdFx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTdGFnZU1hbmFnZXIoKTtcblxuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgU3RhZ2UgZm9yIHRoZSBnaXZlbiBpbmRleC5cblx0ICpcblx0ICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIFN0YWdlLlxuXHQgKiBAcGFyYW0gZm9yY2VTb2Z0d2FyZSBXaGV0aGVyIHRvIGZvcmNlIHNvZnR3YXJlIG1vZGUgZXZlbiBpZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gcHJvZmlsZSBUaGUgY29tcGF0aWJpbGl0eSBwcm9maWxlLCBhbiBlbnVtZXJhdGlvbiBvZiBDb250ZXh0UHJvZmlsZVxuXHQgKiBAcmV0dXJuIFRoZSBTdGFnZSBmb3IgdGhlIGdpdmVuIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGdldFN0YWdlQXQoaW5kZXg6bnVtYmVyLCBmb3JjZVNvZnR3YXJlOmJvb2xlYW4gPSBmYWxzZSwgcHJvZmlsZTpzdHJpbmcgPSBcImJhc2VsaW5lXCIsIG1vZGU6c3RyaW5nID0gXCJhdXRvXCIpOlN0YWdlXG5cdHtcblx0XHRpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IFN0YWdlTWFuYWdlci5TVEFHRV9NQVhfUVVBTlRJVFkpXG5cdFx0XHR0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihcIkluZGV4IGlzIG91dCBvZiBib3VuZHMgWzAuLlwiICsgU3RhZ2VNYW5hZ2VyLlNUQUdFX01BWF9RVUFOVElUWSArIFwiXVwiKTtcblxuXHRcdGlmICghdGhpcy5fc3RhZ2VzW2luZGV4XSkge1xuXHRcdFx0U3RhZ2VNYW5hZ2VyLl9udW1TdGFnZXMrKztcblxuXHRcdFx0dmFyIGNhbnZhczpIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG5cdFx0XHRjYW52YXMuaWQgPSBcInN0YWdlXCIgKyBpbmRleDtcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcblx0XHRcdHZhciBzdGFnZTpTdGFnZSA9IHRoaXMuX3N0YWdlc1tpbmRleF0gPSBuZXcgU3RhZ2UoY2FudmFzLCBpbmRleCwgdGhpcywgZm9yY2VTb2Z0d2FyZSwgcHJvZmlsZSk7XG5cdFx0XHRzdGFnZS5hZGRFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuQ09OVEVYVF9DUkVBVEVELCB0aGlzLl9vbkNvbnRleHRDcmVhdGVkRGVsZWdhdGUpO1xuXHRcdFx0c3RhZ2UucmVxdWVzdENvbnRleHQoZm9yY2VTb2Z0d2FyZSwgcHJvZmlsZSwgbW9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0YWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBTdGFnZSBmcm9tIHRoZSBtYW5hZ2VyLlxuXHQgKiBAcGFyYW0gc3RhZ2Vcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBpUmVtb3ZlU3RhZ2Uoc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRTdGFnZU1hbmFnZXIuX251bVN0YWdlcy0tO1xuXG5cdFx0c3RhZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0Q3JlYXRlZERlbGVnYXRlKTtcblxuXHRcdHRoaXMuX3N0YWdlc1tzdGFnZS5zdGFnZUluZGV4XSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBzdGFnZS4gQW4gZXJyb3IgaXMgdGhyb3duIGlmIHRoZXJlIGFyZSBubyBTdGFnZVByb3hpZXMgYXZhaWxhYmxlXG5cdCAqIEBwYXJhbSBmb3JjZVNvZnR3YXJlIFdoZXRoZXIgdG8gZm9yY2Ugc29mdHdhcmUgbW9kZSBldmVuIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBwcm9maWxlIFRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGUsIGFuIGVudW1lcmF0aW9uIG9mIENvbnRleHRQcm9maWxlXG5cdCAqIEByZXR1cm4gVGhlIGFsbG9jYXRlZCBzdGFnZVxuXHQgKi9cblx0cHVibGljIGdldEZyZWVTdGFnZShmb3JjZVNvZnR3YXJlOmJvb2xlYW4gPSBmYWxzZSwgcHJvZmlsZTpzdHJpbmcgPSBcImJhc2VsaW5lXCIsIG1vZGU6c3RyaW5nID0gXCJhdXRvXCIpOlN0YWdlXG5cdHtcblx0XHR2YXIgaTpudW1iZXIgPSAwO1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5fc3RhZ2VzLmxlbmd0aDtcblxuXHRcdHdoaWxlIChpIDwgbGVuKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3N0YWdlc1tpXSlcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0U3RhZ2VBdChpLCBmb3JjZVNvZnR3YXJlLCBwcm9maWxlLCBtb2RlKTtcblxuXHRcdFx0KytpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIG5ldyBzdGFnZSBjYW4gYmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgY2xhc3MuXG5cdCAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBvbmUgc2xvdCBmcmVlIGZvciBhIG5ldyBzdGFnZVxuXHQgKi9cblx0cHVibGljIGdldCBoYXNGcmVlU3RhZ2UoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gU3RhZ2VNYW5hZ2VyLl9udW1TdGFnZXMgPCBTdGFnZU1hbmFnZXIuU1RBR0VfTUFYX1FVQU5USVRZPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYW1vdW50IG9mIHN0YWdlIG9iamVjdHMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgY2xhc3Ncblx0ICogQHJldHVybiB0aGUgYW1vdW50IG9mIGZyZWUgc2xvdHNcblx0ICovXG5cdHB1YmxpYyBnZXQgbnVtU2xvdHNGcmVlKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gU3RhZ2VNYW5hZ2VyLlNUQUdFX01BWF9RVUFOVElUWSAtIFN0YWdlTWFuYWdlci5fbnVtU3RhZ2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBTdGFnZSBvYmplY3RzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IHRoZSBjbGFzcy5cblx0ICogQHJldHVybiB0aGUgYW1vdW50IG9mIHNsb3RzIHVzZWRcblx0ICovXG5cdHB1YmxpYyBnZXQgbnVtU2xvdHNVc2VkKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gU3RhZ2VNYW5hZ2VyLl9udW1TdGFnZXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1heGltdW0gYW1vdW50IG9mIFN0YWdlIG9iamVjdHMgdGhhdCBjYW4gYmUgbWFuYWdlZCBieSB0aGUgY2xhc3Ncblx0ICovXG5cdHB1YmxpYyBnZXQgbnVtU2xvdHNUb3RhbCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3N0YWdlcy5sZW5ndGg7XG5cdH1cblxuXHRwcml2YXRlIG9uQ29udGV4dENyZWF0ZWQoZXZlbnQ6RXZlbnQpOnZvaWRcblx0e1xuXHRcdC8vdmFyIHN0YWdlOlN0YWdlID0gPFN0YWdlPiBlLnRhcmdldDtcblx0XHQvL2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3RhZ2UuY2FudmFzKVxuXHR9XG59XG5cbmV4cG9ydCA9IFN0YWdlTWFuYWdlcjsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9zdGFnZW1hbmFnZXIudHMiXSwibmFtZXMiOlsiU3RhZ2VNYW5hZ2VyIiwiU3RhZ2VNYW5hZ2VyLmNvbnN0cnVjdG9yIiwiU3RhZ2VNYW5hZ2VyLmdldEluc3RhbmNlIiwiU3RhZ2VNYW5hZ2VyLmdldFN0YWdlQXQiLCJTdGFnZU1hbmFnZXIuaVJlbW92ZVN0YWdlIiwiU3RhZ2VNYW5hZ2VyLmdldEZyZWVTdGFnZSIsIlN0YWdlTWFuYWdlci5oYXNGcmVlU3RhZ2UiLCJTdGFnZU1hbmFnZXIubnVtU2xvdHNGcmVlIiwiU3RhZ2VNYW5hZ2VyLm51bVNsb3RzVXNlZCIsIlN0YWdlTWFuYWdlci5udW1TbG90c1RvdGFsIiwiU3RhZ2VNYW5hZ2VyLm9uQ29udGV4dENyZWF0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sZUFBZSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFDOUUsSUFBTyxhQUFhLFdBQWMsc0NBQXNDLENBQUMsQ0FBQztBQUUxRSxJQUFPLFVBQVUsV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBRXhFLElBQU8sS0FBSyxXQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO0FBRTdELEFBS0E7Ozs7R0FERztJQUNHLFlBQVk7SUFBU0EsVUFBckJBLFlBQVlBLFVBQXdCQTtJQVN6Q0E7Ozs7T0FJR0E7SUFDSEEsU0FkS0EsWUFBWUE7UUFBbEJDLGlCQTBJQ0E7UUExSENBLGlCQUFPQSxDQUFDQTtRQUVSQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxLQUFLQSxDQUFRQSxZQUFZQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBO1FBRWpFQSxJQUFJQSxDQUFDQSx5QkFBeUJBLEdBQUdBLFVBQUNBLEtBQVdBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBNUJBLENBQTRCQSxDQUFDQTtJQUNoRkEsQ0FBQ0E7SUFFREQ7Ozs7T0FJR0E7SUFDV0Es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MElDQSxFQTFJMEIsZUFBZSxFQTBJekM7QUFFRCxBQUFzQixpQkFBYixZQUFZLENBQUMiLCJmaWxlIjoibWFuYWdlcnMvU3RhZ2VNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudERpc3BhdGNoZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnREaXNwYXRjaGVyXCIpO1xuaW1wb3J0IEFyZ3VtZW50RXJyb3JcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQXJndW1lbnRFcnJvclwiKTtcblxuaW1wb3J0IFN0YWdlRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2V2ZW50cy9TdGFnZUV2ZW50XCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcblxuLyoqXG4gKiBUaGUgU3RhZ2VNYW5hZ2VyIGNsYXNzIHByb3ZpZGVzIGEgbXVsdGl0b24gb2JqZWN0IHRoYXQgaGFuZGxlcyBtYW5hZ2VtZW50IGZvciBTdGFnZSBvYmplY3RzLlxuICpcbiAqIEBzZWUgYXdheS5iYXNlLlN0YWdlXG4gKi9cbmNsYXNzIFN0YWdlTWFuYWdlciBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlclxue1xuXHRwcml2YXRlIHN0YXRpYyBTVEFHRV9NQVhfUVVBTlRJVFk6bnVtYmVyID0gODtcblx0cHJpdmF0ZSBfc3RhZ2VzOkFycmF5PFN0YWdlPjtcblxuXHRwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6U3RhZ2VNYW5hZ2VyO1xuXHRwcml2YXRlIHN0YXRpYyBfbnVtU3RhZ2VzOm51bWJlciA9IDA7XG5cdHByaXZhdGUgX29uQ29udGV4dENyZWF0ZWREZWxlZ2F0ZTooZXZlbnQ6RXZlbnQpID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgU3RhZ2VNYW5hZ2VyIGNsYXNzLlxuXHQgKiBAcGFyYW0gc3RhZ2UgVGhlIFN0YWdlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBTdGFnZSBvYmplY3RzIHRvIGJlIG1hbmFnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fc3RhZ2VzID0gbmV3IEFycmF5PFN0YWdlPihTdGFnZU1hbmFnZXIuU1RBR0VfTUFYX1FVQU5USVRZKTtcblxuXHRcdHRoaXMuX29uQ29udGV4dENyZWF0ZWREZWxlZ2F0ZSA9IChldmVudDpFdmVudCkgPT4gdGhpcy5vbkNvbnRleHRDcmVhdGVkKGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgU3RhZ2VNYW5hZ2VyIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gU3RhZ2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gc3RhZ2UgVGhlIFN0YWdlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBTdGFnZSBvYmplY3RzIHRvIGJlIG1hbmFnZWQuXG5cdCAqIEByZXR1cm4gVGhlIFN0YWdlTWFuYWdlciBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIFN0YWdlIG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTpTdGFnZU1hbmFnZXJcblx0e1xuXHRcdGlmICh0aGlzLl9pbnN0YW5jZSA9PSBudWxsKVxuXHRcdFx0dGhpcy5faW5zdGFuY2UgPSBuZXcgU3RhZ2VNYW5hZ2VyKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFN0YWdlIGZvciB0aGUgZ2l2ZW4gaW5kZXguXG5cdCAqXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIHJlcXVlc3RlZCBTdGFnZS5cblx0ICogQHBhcmFtIGZvcmNlU29mdHdhcmUgV2hldGhlciB0byBmb3JjZSBzb2Z0d2FyZSBtb2RlIGV2ZW4gaWYgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIGF2YWlsYWJsZS5cblx0ICogQHBhcmFtIHByb2ZpbGUgVGhlIGNvbXBhdGliaWxpdHkgcHJvZmlsZSwgYW4gZW51bWVyYXRpb24gb2YgQ29udGV4dFByb2ZpbGVcblx0ICogQHJldHVybiBUaGUgU3RhZ2UgZm9yIHRoZSBnaXZlbiBpbmRleC5cblx0ICovXG5cdHB1YmxpYyBnZXRTdGFnZUF0KGluZGV4Om51bWJlciwgZm9yY2VTb2Z0d2FyZTpib29sZWFuID0gZmFsc2UsIHByb2ZpbGU6c3RyaW5nID0gXCJiYXNlbGluZVwiLCBtb2RlOnN0cmluZyA9IFwiYXV0b1wiKTpTdGFnZVxuXHR7XG5cdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBTdGFnZU1hbmFnZXIuU1RBR0VfTUFYX1FVQU5USVRZKVxuXHRcdFx0dGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoXCJJbmRleCBpcyBvdXQgb2YgYm91bmRzIFswLi5cIiArIFN0YWdlTWFuYWdlci5TVEFHRV9NQVhfUVVBTlRJVFkgKyBcIl1cIik7XG5cblx0XHRpZiAoIXRoaXMuX3N0YWdlc1tpbmRleF0pIHtcblx0XHRcdFN0YWdlTWFuYWdlci5fbnVtU3RhZ2VzKys7XG5cblx0XHRcdHZhciBjYW52YXM6SFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXHRcdFx0Y2FudmFzLmlkID0gXCJzdGFnZVwiICsgaW5kZXg7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG5cdFx0XHR2YXIgc3RhZ2U6U3RhZ2UgPSB0aGlzLl9zdGFnZXNbaW5kZXhdID0gbmV3IFN0YWdlKGNhbnZhcywgaW5kZXgsIHRoaXMsIGZvcmNlU29mdHdhcmUsIHByb2ZpbGUpO1xuXHRcdFx0c3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0Q3JlYXRlZERlbGVnYXRlKTtcblx0XHRcdHN0YWdlLnJlcXVlc3RDb250ZXh0KGZvcmNlU29mdHdhcmUsIHByb2ZpbGUsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdGFnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgU3RhZ2UgZnJvbSB0aGUgbWFuYWdlci5cblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgaVJlbW92ZVN0YWdlKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0U3RhZ2VNYW5hZ2VyLl9udW1TdGFnZXMtLTtcblxuXHRcdHN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5DT05URVhUX0NSRUFURUQsIHRoaXMuX29uQ29udGV4dENyZWF0ZWREZWxlZ2F0ZSk7XG5cblx0XHR0aGlzLl9zdGFnZXNbc3RhZ2Uuc3RhZ2VJbmRleF0gPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgc3RhZ2UuIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGVyZSBhcmUgbm8gU3RhZ2VQcm94aWVzIGF2YWlsYWJsZVxuXHQgKiBAcGFyYW0gZm9yY2VTb2Z0d2FyZSBXaGV0aGVyIHRvIGZvcmNlIHNvZnR3YXJlIG1vZGUgZXZlbiBpZiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gcHJvZmlsZSBUaGUgY29tcGF0aWJpbGl0eSBwcm9maWxlLCBhbiBlbnVtZXJhdGlvbiBvZiBDb250ZXh0UHJvZmlsZVxuXHQgKiBAcmV0dXJuIFRoZSBhbGxvY2F0ZWQgc3RhZ2Vcblx0ICovXG5cdHB1YmxpYyBnZXRGcmVlU3RhZ2UoZm9yY2VTb2Z0d2FyZTpib29sZWFuID0gZmFsc2UsIHByb2ZpbGU6c3RyaW5nID0gXCJiYXNlbGluZVwiLCBtb2RlOnN0cmluZyA9IFwiYXV0b1wiKTpTdGFnZVxuXHR7XG5cdFx0dmFyIGk6bnVtYmVyID0gMDtcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX3N0YWdlcy5sZW5ndGg7XG5cblx0XHR3aGlsZSAoaSA8IGxlbikge1xuXHRcdFx0aWYgKCF0aGlzLl9zdGFnZXNbaV0pXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFN0YWdlQXQoaSwgZm9yY2VTb2Z0d2FyZSwgcHJvZmlsZSwgbW9kZSk7XG5cblx0XHRcdCsraTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBuZXcgc3RhZ2UgY2FuIGJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgYnkgdGhlIGNsYXNzLlxuXHQgKiBAcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgb25lIHNsb3QgZnJlZSBmb3IgYSBuZXcgc3RhZ2Vcblx0ICovXG5cdHB1YmxpYyBnZXQgaGFzRnJlZVN0YWdlKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIFN0YWdlTWFuYWdlci5fbnVtU3RhZ2VzIDwgU3RhZ2VNYW5hZ2VyLlNUQUdFX01BWF9RVUFOVElUWT8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBzdGFnZSBvYmplY3RzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYW5kIG1hbmFnZWQgYnkgdGhlIGNsYXNzXG5cdCAqIEByZXR1cm4gdGhlIGFtb3VudCBvZiBmcmVlIHNsb3RzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVNsb3RzRnJlZSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIFN0YWdlTWFuYWdlci5TVEFHRV9NQVhfUVVBTlRJVFkgLSBTdGFnZU1hbmFnZXIuX251bVN0YWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgU3RhZ2Ugb2JqZWN0cyBjdXJyZW50bHkgbWFuYWdlZCBieSB0aGUgY2xhc3MuXG5cdCAqIEByZXR1cm4gdGhlIGFtb3VudCBvZiBzbG90cyB1c2VkXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVNsb3RzVXNlZCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIFN0YWdlTWFuYWdlci5fbnVtU3RhZ2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBTdGFnZSBvYmplY3RzIHRoYXQgY2FuIGJlIG1hbmFnZWQgYnkgdGhlIGNsYXNzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVNsb3RzVG90YWwoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zdGFnZXMubGVuZ3RoO1xuXHR9XG5cblx0cHJpdmF0ZSBvbkNvbnRleHRDcmVhdGVkKGV2ZW50OkV2ZW50KTp2b2lkXG5cdHtcblx0XHQvL3ZhciBzdGFnZTpTdGFnZSA9IDxTdGFnZT4gZS50YXJnZXQ7XG5cdFx0Ly9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHN0YWdlLmNhbnZhcylcblx0fVxufVxuXG5leHBvcnQgPSBTdGFnZU1hbmFnZXI7Il19 \ No newline at end of file diff --git a/lib/managers/StageManager.ts b/lib/managers/StageManager.ts index 044eafcd..3d7889ef 100644 --- a/lib/managers/StageManager.ts +++ b/lib/managers/StageManager.ts @@ -3,7 +3,7 @@ import ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); import StageEvent = require("awayjs-display/lib/events/StageEvent"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); /** * The StageManager class provides a multiton object that handles management for Stage objects. diff --git a/lib/materials/LineBasicMaterial.js b/lib/materials/LineBasicMaterial.js index 560ca332..67e6818a 100755 --- a/lib/materials/LineBasicMaterial.js +++ b/lib/materials/LineBasicMaterial.js @@ -6,7 +6,7 @@ var __extends = this.__extends || function (d, b) { }; var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); var LineBasicPass = require("awayjs-stagegl/lib/materials/passes/LineBasicPass"); /** @@ -73,4 +73,4 @@ var LineBasicMaterial = (function (_super) { })(StageGLMaterialBase); module.exports = LineBasicMaterial; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbGluZWJhc2ljbWF0ZXJpYWwudHMiXSwibmFtZXMiOlsiTGluZUJhc2ljTWF0ZXJpYWwiLCJMaW5lQmFzaWNNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIkxpbmVCYXNpY01hdGVyaWFsLl9pR2V0VmVydGV4Q29kZSIsIkxpbmVCYXNpY01hdGVyaWFsLl9pQWN0aXZhdGVQYXNzIiwiTGluZUJhc2ljTWF0ZXJpYWwuX2lSZW5kZXJQYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFFBQVEsV0FBZ0IsK0JBQStCLENBQUMsQ0FBQztBQUVoRSxJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBTS9FLElBQU8sb0JBQW9CLFdBQWEsc0RBQXNELENBQUMsQ0FBQztBQUVoRyxJQUFPLG1CQUFtQixXQUFhLGtEQUFrRCxDQUFDLENBQUM7QUFJM0YsSUFBTyxhQUFhLFdBQWMsbURBQW1ELENBQUMsQ0FBQztBQUV2RixBQUtBOzs7O0dBREc7SUFDRyxpQkFBaUI7SUFBU0EsVUFBMUJBLGlCQUFpQkEsVUFBNEJBO0lBV2xEQTs7OztPQUlHQTtJQUNIQSxTQWhCS0EsaUJBQWlCQSxDQWdCVkEsU0FBdUJBO1FBQXZCQyx5QkFBdUJBLEdBQXZCQSxnQkFBdUJBO1FBRWxDQSxpQkFBT0EsQ0FBQ0E7UUFiREEsZUFBVUEsR0FBaUJBLElBQUlBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBZWhFQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxTQUFTQSxDQUFDQTtRQUU1QkEsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFdEJBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLGFBQWFBLEVBQUVBLENBQUNBLENBQUNBO1FBRTdEQSxJQUFJQSxDQUFDQSxXQUFX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LEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBLEVBQUVBLGVBQWVBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0E7UUFDbExBLE9BQU9BLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLGVBQWVBLENBQUNBLFVBQVVBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLFVBQVVBLENBQUNBLEVBQUVBLGVBQWVBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBRXRLQSxPQUFPQSxDQUFDQSxhQUFhQSxDQUFDQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxVQUFVQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtJQUN0R0EsQ0FBQ0E7SUF6SWFKLDZCQUFXQSxHQUFpQkEsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDdERBLCtCQUFhQSxHQUFpQkEsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUF5SXhFQSx3QkFBQ0E7QUFBREEsQ0E1SUEsQUE0SUNBLEVBNUkrQixtQkFBbUIsRUE0SWxEO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9MaW5lQmFzaWNNYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcblxuaW1wb3J0IExpbmVTdWJHZW9tZXRyeVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGluZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IENvbnRleHRHTFByb2dyYW1UeXBlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xQcm9ncmFtVHlwZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgTGluZUJhc2ljUGFzc1x0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTGluZUJhc2ljUGFzc1wiKTtcblxuLyoqXG4gKiBMaW5lTWF0ZXJpYWwgaXMgYSBtYXRlcmlhbCBleGNsdXNpdmVseSB1c2VkIHRvIHJlbmRlciB3aXJlZnJhbWUgb2JqZWN0c1xuICpcbiAqIEBzZWUgYXdheS5lbnRpdGllcy5MaW5lc1xuICovXG5jbGFzcyBMaW5lQmFzaWNNYXRlcmlhbCBleHRlbmRzIFN0YWdlR0xNYXRlcmlhbEJhc2Vcbntcblx0cHVibGljIHN0YXRpYyBwT05FX1ZFQ1RPUjpBcnJheTxudW1iZXI+ID0gQXJyYXk8bnVtYmVyPigxLCAxLCAxLCAxKTtcblx0cHVibGljIHN0YXRpYyBwRlJPTlRfVkVDVE9SOkFycmF5PG51bWJlcj4gPSBBcnJheTxudW1iZXI+KDAsIDAsIC0xLCAwKTtcblxuXHRwcml2YXRlIF9jb25zdGFudHM6QXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KDAsIDAsIDAsIDApO1xuXHRwcml2YXRlIF9jYWxjTWF0cml4Ok1hdHJpeDNEO1xuXHRwcml2YXRlIF90aGlja25lc3M6bnVtYmVyO1xuXG5cdHByaXZhdGUgX3NjcmVlblBhc3M6TGluZUJhc2ljUGFzcztcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBMaW5lTWF0ZXJpYWwgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdGhpY2tuZXNzIFRoZSB0aGlja25lc3Mgb2YgdGhlIHdpcmVmcmFtZSBsaW5lcy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHRoaWNrbmVzczpudW1iZXIgPSAxLjI1KVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX3RoaWNrbmVzcyA9IHRoaWNrbmVzcztcblxuXHRcdHRoaXMuYm90aFNpZGVzID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3BBZGRTY3JlZW5QYXNzKHRoaXMuX3NjcmVlblBhc3MgPSBuZXcgTGluZUJhc2ljUGFzcygpKTtcblxuXHRcdHRoaXMuX2NhbGNNYXRyaXggPSBuZXcgTWF0cml4M0QoKTtcblxuXHRcdHRoaXMuX2NvbnN0YW50c1sxXSA9IDEvMjU1O1xuXHR9XG5cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ0NhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZzpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwibTQ0IHZ0MCwgdmEwLCB2YzhcdFx0XHRcXG5cIiArIC8vIHRyYW5zZm9ybSBRMCB0byBleWUgc3BhY2Vcblx0XHRcdFwibTQ0IHZ0MSwgdmExLCB2YzhcdFx0XHRcXG5cIiArIC8vIHRyYW5zZm9ybSBRMSB0byBleWUgc3BhY2Vcblx0XHRcdFwic3ViIHZ0MiwgdnQxLCB2dDAgXHRcdFx0XFxuXCIgKyAvLyBMID0gUTEgLSBRMFxuXG5cdFx0XHQvLyB0ZXN0IGlmIGJlaGluZCBjYW1lcmEgbmVhciBwbGFuZVxuXHRcdFx0Ly8gaWYgMCAtIFEwLnogPCBDYW1lcmEubmVhciB0aGVuIHRoZSBwb2ludCBuZWVkcyB0byBiZSBjbGlwcGVkXG5cdFx0XHQvL1wibmVnIHZ0NS54LCB2dDAuelx0XHRcdFx0XFxuXCIgKyAvLyAwIC0gUTAuelxuXHRcdFx0XCJzbHQgdnQ1LngsIHZ0MC56LCB2Yzcuelx0XHRcdFxcblwiICsgLy8gYmVoaW5kID0gKCAwIC0gUTAueiA8IC1DYW1lcmEubmVhciApID8gMSA6IDBcblx0XHRcdFwic3ViIHZ0NS55LCB2YzUueCwgdnQ1LnhcdFx0XHRcXG5cIiArIC8vICFiZWhpbmQgPSAxIC0gYmVoaW5kXG5cblx0XHRcdC8vIHAgPSBwb2ludCBvbiB0aGUgcGxhbmUgKDAsMCwtbmVhcilcblx0XHRcdC8vIG4gPSBwbGFuZSBub3JtYWwgKDAsMCwtMSlcblx0XHRcdC8vIEQgPSBRMSAtIFEwXG5cdFx0XHQvLyB0ID0gKCBkb3QoIG4sICggcCAtIFEwICkgKSAvICggZG90KCBuLCBkIClcblxuXHRcdFx0Ly8gc29sdmUgZm9yIHQgd2hlcmUgbGluZSBjcm9zc2VzIENhbWVyYS5uZWFyXG5cdFx0XHRcImFkZCB2dDQueCwgdnQwLnosIHZjNy56XHRcdFx0XFxuXCIgKyAvLyBRMC56ICsgKCAtQ2FtZXJhLm5lYXIgKVxuXHRcdFx0XCJzdWIgdnQ0LnksIHZ0MC56LCB2dDEuelx0XHRcdFxcblwiICsgLy8gUTAueiAtIFExLnpcblxuXHRcdFx0Ly8gZml4IGRpdmlkZSBieSB6ZXJvIGZvciBob3Jpem9udGFsIGxpbmVzXG5cdFx0XHRcInNlcSB2dDQueiwgdnQ0LnkgdmM2LnhcdFx0XHRcXG5cIiArIC8vIG9mZnNldCA9IChRMC56IC0gUTEueik9PTAgPyAxIDogMFxuXHRcdFx0XCJhZGQgdnQ0LnksIHZ0NC55LCB2dDQuelx0XHRcdFxcblwiICsgLy8gKCBRMC56IC0gUTEueiApICsgb2Zmc2V0XG5cblx0XHRcdFwiZGl2IHZ0NC56LCB2dDQueCwgdnQ0LnlcdFx0XHRcXG5cIiArIC8vIHQgPSAoIFEwLnogLSBuZWFyICkgLyAoIFEwLnogLSBRMS56IClcblxuXHRcdFx0XCJtdWwgdnQ0Lnh5eiwgdnQ0Lnp6eiwgdnQyLnh5elx0XFxuXCIgKyAvLyB0KEwpXG5cdFx0XHRcImFkZCB2dDMueHl6LCB2dDAueHl6LCB2dDQueHl6XHRcXG5cIiArIC8vIFFjbGlwcGVkID0gUTAgKyB0KEwpXG5cdFx0XHRcIm1vdiB2dDMudywgdmM1LnhcdFx0XHRcXG5cIiArIC8vIFFjbGlwcGVkLncgPSAxXG5cblx0XHRcdC8vIElmIG5lY2Vzc2FyeSwgcmVwbGFjZSBRMCB3aXRoIG5ldyBRY2xpcHBlZFxuXHRcdFx0XCJtdWwgdnQwLCB2dDAsIHZ0NS55eXl5XHRcdFx0XFxuXCIgKyAvLyAhYmVoaW5kICogUTBcblx0XHRcdFwibXVsIHZ0MywgdnQzLCB2dDUueHh4eFx0XHRcdFxcblwiICsgLy8gYmVoaW5kICogUWNsaXBwZWRcblx0XHRcdFwiYWRkIHZ0MCwgdnQwLCB2dDNcdFx0XHRcdFxcblwiICsgLy8gbmV3UTAgPSBRMCArIFFjbGlwcGVkXG5cblx0XHRcdC8vIGNhbGN1bGF0ZSBzaWRlIHZlY3RvciBmb3IgbGluZVxuXHRcdFx0XCJzdWIgdnQyLCB2dDEsIHZ0MCBcdFx0XHRcXG5cIiArIC8vIEwgPSBRMSAtIFEwXG5cdFx0XHRcIm5ybSB2dDIueHl6LCB2dDIueHl6XHRcdFx0XFxuXCIgKyAvLyBub3JtYWxpemUoIEwgKVxuXHRcdFx0XCJucm0gdnQ1Lnh5eiwgdnQwLnh5elx0XHRcdFxcblwiICsgLy8gRCA9IG5vcm1hbGl6ZSggUTEgKVxuXHRcdFx0XCJtb3YgdnQ1LncsIHZjNS54XHRcdFx0XHRcXG5cIiArIC8vIEQudyA9IDFcblx0XHRcdFwiY3JzIHZ0My54eXosIHZ0MiwgdnQ1XHRcdFx0XFxuXCIgKyAvLyBTID0gTCB4IERcblx0XHRcdFwibnJtIHZ0My54eXosIHZ0My54eXpcdFx0XHRcXG5cIiArIC8vIG5vcm1hbGl6ZSggUyApXG5cblx0XHRcdC8vIGZhY2UgdGhlIHNpZGUgdmVjdG9yIHByb3Blcmx5IGZvciB0aGUgZ2l2ZW4gcG9pbnRcblx0XHRcdFwibXVsIHZ0My54eXosIHZ0My54eXosIHZhMi54eHhcdFxcblwiICsgLy8gUyAqPSB3ZWlnaHRcblx0XHRcdFwibW92IHZ0My53LCB2YzUueFx0XHRcdFxcblwiICsgLy8gUy53ID0gMVxuXG5cdFx0XHQvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCByZXF1aXJlZCB0byBtb3ZlIGF0IHRoZSBwb2ludCdzIGRpc3RhbmNlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIGxpbmUncyBwaXhlbCB3aWR0aFxuXHRcdFx0Ly8gc2NhbGUgdGhlIHNpZGUgdmVjdG9yIGJ5IHRoYXQgYW1vdW50XG5cdFx0XHRcImRwMyB2dDQueCwgdnQwLCB2YzZcdFx0XHRcXG5cIiArIC8vIGRpc3RhbmNlID0gZG90KCB2aWV3IClcblx0XHRcdFwibXVsIHZ0NC54LCB2dDQueCwgdmM3LnhcdFx0XHRcXG5cIiArIC8vIGRpc3RhbmNlICo9IHZwc29kXG5cdFx0XHRcIm11bCB2dDMueHl6LCB2dDMueHl6LCB2dDQueHh4XHRcXG5cIiArIC8vIFMueHl6ICo9IHBpeGVsU2NhbGVGYWN0b3JcblxuXHRcdFx0Ly8gYWRkIHNjYWxlZCBzaWRlIHZlY3RvciB0byBRMCBhbmQgdHJhbnNmb3JtIHRvIGNsaXAgc3BhY2Vcblx0XHRcdFwiYWRkIHZ0MC54eXosIHZ0MC54eXosIHZ0My54eXpcdFxcblwiICsgLy8gUTAgKyBTXG5cblx0XHRcdFwibTQ0IG9wLCB2dDAsIHZjMFx0XHRcdFxcblwiICsgLy8gdHJhbnNmb3JtIFEwIHRvIGNsaXAgc3BhY2VcblxuXHRcdFx0Ly8gaW50ZXJwb2xhdGUgY29sb3Jcblx0XHRcdFwibW92IHYwLCB2YTNcdFx0XHRcdFxcblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZVBhc3MocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdHN1cGVyLl9pQWN0aXZhdGVQYXNzKHBhc3MsIHN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdHRoaXMuX2NvbnN0YW50c1swXSA9IHRoaXMuX3RoaWNrbmVzcy8oKHN0YWdlLnNjaXNzb3JSZWN0KT8gTWF0aC5taW4oc3RhZ2Uuc2Npc3NvclJlY3Qud2lkdGgsIHN0YWdlLnNjaXNzb3JSZWN0LmhlaWdodCkgOiBNYXRoLm1pbihzdGFnZS53aWR0aCwgc3RhZ2UuaGVpZ2h0KSk7XG5cblx0XHQvLyB2YWx1ZSB0byBjb252ZXJ0IGRpc3RhbmNlIGZyb20gY2FtZXJhIHRvIG1vZGVsIGxlbmd0aCBwZXIgcGl4ZWwgd2lkdGhcblx0XHR0aGlzLl9jb25zdGFudHNbMl0gPSBjYW1lcmEucHJvamVjdGlvbi5uZWFyO1xuXG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgNSwgTGluZUJhc2ljTWF0ZXJpYWwucE9ORV9WRUNUT1IsIDEpO1xuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShDb250ZXh0R0xQcm9ncmFtVHlwZS5WRVJURVgsIDYsIExpbmVCYXNpY01hdGVyaWFsLnBGUk9OVF9WRUNUT1IsIDEpO1xuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShDb250ZXh0R0xQcm9ncmFtVHlwZS5WRVJURVgsIDcsIHRoaXMuX2NvbnN0YW50cywgMSk7XG5cblx0XHQvLyBwcm9qZWN0aW9uIG1hdHJpeFxuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21NYXRyaXgoQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYLCAwLCBjYW1lcmEucHJvamVjdGlvbi5tYXRyaXgsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lSZW5kZXJQYXNzKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgcmVuZGVyYWJsZTpSZW5kZXJhYmxlQmFzZSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEsIHZpZXdQcm9qZWN0aW9uOk1hdHJpeDNEKVxuXHR7XG5cdFx0c3VwZXIuX2lSZW5kZXJQYXNzKHBhc3MsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0dGhpcy5fY2FsY01hdHJpeC5jb3B5RnJvbShyZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5zY2VuZVRyYW5zZm9ybSk7XG5cdFx0dGhpcy5fY2FsY01hdHJpeC5hcHBlbmQoY2FtZXJhLmludmVyc2VTY2VuZVRyYW5zZm9ybSk7XG5cblx0XHRjb250ZXh0LnNldFByb2dyYW1Db25zdGFudHNGcm9tTWF0cml4KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgOCwgdGhpcy5fY2FsY01hdHJpeCwgdHJ1ZSk7XG5cblx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKDAsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShMaW5lU3ViR2VvbWV0cnkuU1RBUlRfUE9TSVRJT05fREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KExpbmVTdWJHZW9tZXRyeS5TVEFSVF9QT1NJVElPTl9EQVRBKSwgTGluZVN1Ykdlb21ldHJ5LlBPU0lUSU9OX0ZPUk1BVCk7XG5cdFx0Y29udGV4dC5hY3RpdmF0ZUJ1ZmZlcigxLCByZW5kZXJhYmxlLmdldFZlcnRleERhdGEoTGluZVN1Ykdlb21ldHJ5LkVORF9QT1NJVElPTl9EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoTGluZVN1Ykdlb21ldHJ5LkVORF9QT1NJVElPTl9EQVRBKSwgTGluZVN1Ykdlb21ldHJ5LlBPU0lUSU9OX0ZPUk1BVCk7XG5cdFx0Y29udGV4dC5hY3RpdmF0ZUJ1ZmZlcigyLCByZW5kZXJhYmxlLmdldFZlcnRleERhdGEoTGluZVN1Ykdlb21ldHJ5LlRISUNLTkVTU19EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoTGluZVN1Ykdlb21ldHJ5LlRISUNLTkVTU19EQVRBKSwgTGluZVN1Ykdlb21ldHJ5LlRISUNLTkVTU19GT1JNQVQpO1xuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMywgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKExpbmVTdWJHZW9tZXRyeS5DT0xPUl9EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoTGluZVN1Ykdlb21ldHJ5LkNPTE9SX0RBVEEpLCBMaW5lU3ViR2VvbWV0cnkuQ09MT1JfRk9STUFUKTtcblxuXHRcdGNvbnRleHQuZHJhd1RyaWFuZ2xlcyhjb250ZXh0LmdldEluZGV4QnVmZmVyKHJlbmRlcmFibGUuZ2V0SW5kZXhEYXRhKCkpLCAwLCByZW5kZXJhYmxlLm51bVRyaWFuZ2xlcyk7XG5cdH1cbn1cblxuZXhwb3J0ID0gTGluZUJhc2ljTWF0ZXJpYWw7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbGluZWJhc2ljbWF0ZXJpYWwudHMiXSwibmFtZXMiOlsiTGluZUJhc2ljTWF0ZXJpYWwiLCJMaW5lQmFzaWNNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIkxpbmVCYXNpY01hdGVyaWFsLl9pR2V0VmVydGV4Q29kZSIsIkxpbmVCYXNpY01hdGVyaWFsLl9pQWN0aXZhdGVQYXNzIiwiTGluZUJhc2ljTWF0ZXJpYWwuX2lSZW5kZXJQYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFFBQVEsV0FBZ0IsK0JBQStCLENBQUMsQ0FBQztBQUVoRSxJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBTS9FLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUV4RixJQUFPLG1CQUFtQixXQUFhLGtEQUFrRCxDQUFDLENBQUM7QUFJM0YsSUFBTyxhQUFhLFdBQWMsbURBQW1ELENBQUMsQ0FBQztBQUV2RixBQUtBOzs7O0dBREc7SUFDRyxpQkFBaUI7SUFBU0EsVUFBMUJBLGlCQUFpQkEsVUFBNEJBO0lBV2xEQTs7OztPQUlHQTtJQUNIQSxTQWhCS0EsaUJBQWlCQSxDQWdCVkEsU0FBdUJBO1FBQXZCQyx5QkFBdUJBLEdBQXZCQSxnQkFBdUJBO1FBRWxDQSxpQkFBT0EsQ0FBQ0E7UUFiREEsZUFBVUEsR0FBaUJBLElBQUlBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBZWhFQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxTQUFTQSxDQUFDQTtRQUU1QkEsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFdEJBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLGFBQWFBLEVBQUVBLENBQUNBLENBQUNBO1FBRTdEQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxJQUFJQSxRQUFRQSxFQUFFQSxDQUFDQTtRQUVsQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBQ0EsR0FBR0EsQ0FBQ0E7SUFDNUJBLENBQUNBO0lBR0REOztPQUVHQTtJQUNJQSwyQ0FBZUEsR0FBdEJBLFVBQXVCQSxZQUE2QkEsRUFBRUEsUUFBNEJBLEVBQUVBLFNBQTRCQTtRQUUvR0UsTUFBTUEsQ0FBQ0Esd0JBQXdCQSxHQUM5QkEsd0JBQXdCQSxHQUN4QkEseUJBQXlCQSxHQUt6QkEsOEJBQThCQSxHQUM5QkEsOEJBQThCQSxHQVE5QkEsOEJBQThCQSxHQUM5QkEsOEJBQThCQSxHQUc5QkEsNkJBQTZCQSxHQUM3QkEsOEJBQThCQSxHQUU5QkEsOEJBQThCQSxHQUU5QkEsa0NBQWtDQSxHQUNsQ0Esa0NBQWtDQSxHQUNsQ0EsdUJBQXVCQSxHQUd2QkEsNkJBQTZCQSxHQUM3QkEsNkJBQTZCQSxHQUM3QkEseUJBQXlCQSxHQUd6QkEseUJBQXlCQSxHQUN6QkEsMkJBQTJCQSxHQUMzQkEsMkJBQTJCQSxHQUMzQkEsd0JBQXdCQSxHQUN4QkEsNEJBQTRCQSxHQUM1QkEsMkJBQTJCQSxHQUczQkEsa0NBQWtDQSxHQUNsQ0EsdUJBQXVCQSxHQUl2QkEsMEJBQTBCQSxHQUMxQkEsOEJBQThCQSxHQUM5QkEsa0NBQWtDQSxHQUdsQ0Esa0NBQWtDQSxHQUVsQ0EsdUJBQXVCQSxHQUd2QkEsbUJBQW1CQSxDQUFDQTtJQUN0QkEsQ0FBQ0E7SUFFREY7O09BRUdBO0lBQ0lBLDBDQUFjQSxHQUFyQkEsVUFBc0JBLElBQXFCQSxFQUFFQSxLQUFXQSxFQUFFQSxNQUFhQTtRQUV0RUcsZ0JBQUtBLENBQUNBLGNBQWNBLFlBQUNBLElBQUlBLEVBQUVBLEtBQUtBLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO1FBRTFDQSxJQUFJQSxPQUFPQSxHQUFxQ0EsS0FBS0EsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFFOURBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFVBQVVBLEdBQUNBLENBQUNBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEdBQUVBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEtBQUtBLEVBQUVBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLE1BQU1BLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEtBQUtBLENBQUNBLEtBQUtBLEVBQUVBLEtBQUtBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1FBRTlKQSxBQUNBQSx3RUFEd0VBO1FBQ3hFQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQTtRQUU1Q0EsT0FBT0EsQ0FBQ0EsNEJBQTRCQSxDQUFDQSxvQkFBb0JBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLGlCQUFpQkEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdkdBLE9BQU9BLENBQUNBLDRCQUE0QkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxpQkFBaUJBLENBQUNBLGFBQWFBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQ3pHQSxPQUFPQSxDQUFDQSw0QkFBNEJBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsVUFBVUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFekZBLEFBQ0FBLG9CQURvQkE7UUFDcEJBLE9BQU9BLENBQUNBLDZCQUE2QkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQSxNQUFNQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUN2R0EsQ0FBQ0E7SUFFREg7O09BRUdBO0lBQ0lBLHdDQUFZQSxHQUFuQkEsVUFBb0JBLElBQXFCQSxFQUFFQSxVQUF5QkEsRUFBRUEsS0FBV0EsRUFBRUEsTUFBYUEsRUFBRUEsY0FBdUJBO1FBRXhISSxnQkFBS0EsQ0FBQ0EsWUFBWUEsWUFBQ0EsSUFBSUEsRUFBRUEsVUFBVUEsRUFBRUEsS0FBS0EsRUFBRUEsTUFBTUEsRUFBRUEsY0FBY0EsQ0FBQ0EsQ0FBQ0E7UUFFcEVBLElBQUlBLE9BQU9BLEdBQXFDQSxLQUFLQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUM5REEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0E7UUFDbEVBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0E7UUFFdERBLE9BQU9BLENBQUNBLDZCQUE2QkEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxJQUFJQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUU5RkEsT0FBT0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsVUFBVUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxlQUFlQSxDQUFDQSxlQUFlQSxDQUFDQSxtQkFBbUJBLENBQUNBLEVBQUVBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBO1FBQzNMQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxhQUFhQSxDQUFDQSxlQUFlQSxDQUFDQSxpQkFBaUJBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsRUFBRUEsZUFBZUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFDdkxBLE9BQU9BLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBLEVBQUVBLGVBQWVBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0E7UUFDbExBLE9BQU9BLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLGVBQWVBLENBQUNBLFVBQVVBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBLFVBQVVBLENBQUNBLEVBQUVBLGVBQWVBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBRXRLQSxPQUFPQSxDQUFDQSxhQUFhQSxDQUFDQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxVQUFVQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtJQUN0R0EsQ0FBQ0E7SUF6SWFKLDZCQUFXQSxHQUFpQkEsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDdERBLCtCQUFhQSxHQUFpQkEsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUF5SXhFQSx3QkFBQ0E7QUFBREEsQ0E1SUEsQUE0SUNBLEVBNUkrQixtQkFBbUIsRUE0SWxEO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9MaW5lQmFzaWNNYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcblxuaW1wb3J0IExpbmVTdWJHZW9tZXRyeVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGluZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IENvbnRleHRHTFByb2dyYW1UeXBlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMUHJvZ3JhbVR5cGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBMaW5lQmFzaWNQYXNzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9MaW5lQmFzaWNQYXNzXCIpO1xuXG4vKipcbiAqIExpbmVNYXRlcmlhbCBpcyBhIG1hdGVyaWFsIGV4Y2x1c2l2ZWx5IHVzZWQgdG8gcmVuZGVyIHdpcmVmcmFtZSBvYmplY3RzXG4gKlxuICogQHNlZSBhd2F5LmVudGl0aWVzLkxpbmVzXG4gKi9cbmNsYXNzIExpbmVCYXNpY01hdGVyaWFsIGV4dGVuZHMgU3RhZ2VHTE1hdGVyaWFsQmFzZVxue1xuXHRwdWJsaWMgc3RhdGljIHBPTkVfVkVDVE9SOkFycmF5PG51bWJlcj4gPSBBcnJheTxudW1iZXI+KDEsIDEsIDEsIDEpO1xuXHRwdWJsaWMgc3RhdGljIHBGUk9OVF9WRUNUT1I6QXJyYXk8bnVtYmVyPiA9IEFycmF5PG51bWJlcj4oMCwgMCwgLTEsIDApO1xuXG5cdHByaXZhdGUgX2NvbnN0YW50czpBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oMCwgMCwgMCwgMCk7XG5cdHByaXZhdGUgX2NhbGNNYXRyaXg6TWF0cml4M0Q7XG5cdHByaXZhdGUgX3RoaWNrbmVzczpudW1iZXI7XG5cblx0cHJpdmF0ZSBfc2NyZWVuUGFzczpMaW5lQmFzaWNQYXNzO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IExpbmVNYXRlcmlhbCBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB0aGlja25lc3MgVGhlIHRoaWNrbmVzcyBvZiB0aGUgd2lyZWZyYW1lIGxpbmVzLlxuXHQgKi9cblx0Y29uc3RydWN0b3IodGhpY2tuZXNzOm51bWJlciA9IDEuMjUpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fdGhpY2tuZXNzID0gdGhpY2tuZXNzO1xuXG5cdFx0dGhpcy5ib3RoU2lkZXMgPSB0cnVlO1xuXG5cdFx0dGhpcy5fcEFkZFNjcmVlblBhc3ModGhpcy5fc2NyZWVuUGFzcyA9IG5ldyBMaW5lQmFzaWNQYXNzKCkpO1xuXG5cdFx0dGhpcy5fY2FsY01hdHJpeCA9IG5ldyBNYXRyaXgzRCgpO1xuXG5cdFx0dGhpcy5fY29uc3RhbnRzWzFdID0gMS8yNTU7XG5cdH1cblxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJtNDQgdnQwLCB2YTAsIHZjOFx0XHRcdFxcblwiICsgLy8gdHJhbnNmb3JtIFEwIHRvIGV5ZSBzcGFjZVxuXHRcdFx0XCJtNDQgdnQxLCB2YTEsIHZjOFx0XHRcdFxcblwiICsgLy8gdHJhbnNmb3JtIFExIHRvIGV5ZSBzcGFjZVxuXHRcdFx0XCJzdWIgdnQyLCB2dDEsIHZ0MCBcdFx0XHRcXG5cIiArIC8vIEwgPSBRMSAtIFEwXG5cblx0XHRcdC8vIHRlc3QgaWYgYmVoaW5kIGNhbWVyYSBuZWFyIHBsYW5lXG5cdFx0XHQvLyBpZiAwIC0gUTAueiA8IENhbWVyYS5uZWFyIHRoZW4gdGhlIHBvaW50IG5lZWRzIHRvIGJlIGNsaXBwZWRcblx0XHRcdC8vXCJuZWcgdnQ1LngsIHZ0MC56XHRcdFx0XHRcXG5cIiArIC8vIDAgLSBRMC56XG5cdFx0XHRcInNsdCB2dDUueCwgdnQwLnosIHZjNy56XHRcdFx0XFxuXCIgKyAvLyBiZWhpbmQgPSAoIDAgLSBRMC56IDwgLUNhbWVyYS5uZWFyICkgPyAxIDogMFxuXHRcdFx0XCJzdWIgdnQ1LnksIHZjNS54LCB2dDUueFx0XHRcdFxcblwiICsgLy8gIWJlaGluZCA9IDEgLSBiZWhpbmRcblxuXHRcdFx0Ly8gcCA9IHBvaW50IG9uIHRoZSBwbGFuZSAoMCwwLC1uZWFyKVxuXHRcdFx0Ly8gbiA9IHBsYW5lIG5vcm1hbCAoMCwwLC0xKVxuXHRcdFx0Ly8gRCA9IFExIC0gUTBcblx0XHRcdC8vIHQgPSAoIGRvdCggbiwgKCBwIC0gUTAgKSApIC8gKCBkb3QoIG4sIGQgKVxuXG5cdFx0XHQvLyBzb2x2ZSBmb3IgdCB3aGVyZSBsaW5lIGNyb3NzZXMgQ2FtZXJhLm5lYXJcblx0XHRcdFwiYWRkIHZ0NC54LCB2dDAueiwgdmM3LnpcdFx0XHRcXG5cIiArIC8vIFEwLnogKyAoIC1DYW1lcmEubmVhciApXG5cdFx0XHRcInN1YiB2dDQueSwgdnQwLnosIHZ0MS56XHRcdFx0XFxuXCIgKyAvLyBRMC56IC0gUTEuelxuXG5cdFx0XHQvLyBmaXggZGl2aWRlIGJ5IHplcm8gZm9yIGhvcml6b250YWwgbGluZXNcblx0XHRcdFwic2VxIHZ0NC56LCB2dDQueSB2YzYueFx0XHRcdFxcblwiICsgLy8gb2Zmc2V0ID0gKFEwLnogLSBRMS56KT09MCA/IDEgOiAwXG5cdFx0XHRcImFkZCB2dDQueSwgdnQ0LnksIHZ0NC56XHRcdFx0XFxuXCIgKyAvLyAoIFEwLnogLSBRMS56ICkgKyBvZmZzZXRcblxuXHRcdFx0XCJkaXYgdnQ0LnosIHZ0NC54LCB2dDQueVx0XHRcdFxcblwiICsgLy8gdCA9ICggUTAueiAtIG5lYXIgKSAvICggUTAueiAtIFExLnogKVxuXG5cdFx0XHRcIm11bCB2dDQueHl6LCB2dDQuenp6LCB2dDIueHl6XHRcXG5cIiArIC8vIHQoTClcblx0XHRcdFwiYWRkIHZ0My54eXosIHZ0MC54eXosIHZ0NC54eXpcdFxcblwiICsgLy8gUWNsaXBwZWQgPSBRMCArIHQoTClcblx0XHRcdFwibW92IHZ0My53LCB2YzUueFx0XHRcdFxcblwiICsgLy8gUWNsaXBwZWQudyA9IDFcblxuXHRcdFx0Ly8gSWYgbmVjZXNzYXJ5LCByZXBsYWNlIFEwIHdpdGggbmV3IFFjbGlwcGVkXG5cdFx0XHRcIm11bCB2dDAsIHZ0MCwgdnQ1Lnl5eXlcdFx0XHRcXG5cIiArIC8vICFiZWhpbmQgKiBRMFxuXHRcdFx0XCJtdWwgdnQzLCB2dDMsIHZ0NS54eHh4XHRcdFx0XFxuXCIgKyAvLyBiZWhpbmQgKiBRY2xpcHBlZFxuXHRcdFx0XCJhZGQgdnQwLCB2dDAsIHZ0M1x0XHRcdFx0XFxuXCIgKyAvLyBuZXdRMCA9IFEwICsgUWNsaXBwZWRcblxuXHRcdFx0Ly8gY2FsY3VsYXRlIHNpZGUgdmVjdG9yIGZvciBsaW5lXG5cdFx0XHRcInN1YiB2dDIsIHZ0MSwgdnQwIFx0XHRcdFxcblwiICsgLy8gTCA9IFExIC0gUTBcblx0XHRcdFwibnJtIHZ0Mi54eXosIHZ0Mi54eXpcdFx0XHRcXG5cIiArIC8vIG5vcm1hbGl6ZSggTCApXG5cdFx0XHRcIm5ybSB2dDUueHl6LCB2dDAueHl6XHRcdFx0XFxuXCIgKyAvLyBEID0gbm9ybWFsaXplKCBRMSApXG5cdFx0XHRcIm1vdiB2dDUudywgdmM1LnhcdFx0XHRcdFxcblwiICsgLy8gRC53ID0gMVxuXHRcdFx0XCJjcnMgdnQzLnh5eiwgdnQyLCB2dDVcdFx0XHRcXG5cIiArIC8vIFMgPSBMIHggRFxuXHRcdFx0XCJucm0gdnQzLnh5eiwgdnQzLnh5elx0XHRcdFxcblwiICsgLy8gbm9ybWFsaXplKCBTIClcblxuXHRcdFx0Ly8gZmFjZSB0aGUgc2lkZSB2ZWN0b3IgcHJvcGVybHkgZm9yIHRoZSBnaXZlbiBwb2ludFxuXHRcdFx0XCJtdWwgdnQzLnh5eiwgdnQzLnh5eiwgdmEyLnh4eFx0XFxuXCIgKyAvLyBTICo9IHdlaWdodFxuXHRcdFx0XCJtb3YgdnQzLncsIHZjNS54XHRcdFx0XFxuXCIgKyAvLyBTLncgPSAxXG5cblx0XHRcdC8vIGNhbGN1bGF0ZSB0aGUgYW1vdW50IHJlcXVpcmVkIHRvIG1vdmUgYXQgdGhlIHBvaW50J3MgZGlzdGFuY2UgdG8gY29ycmVzcG9uZCB0byB0aGUgbGluZSdzIHBpeGVsIHdpZHRoXG5cdFx0XHQvLyBzY2FsZSB0aGUgc2lkZSB2ZWN0b3IgYnkgdGhhdCBhbW91bnRcblx0XHRcdFwiZHAzIHZ0NC54LCB2dDAsIHZjNlx0XHRcdFxcblwiICsgLy8gZGlzdGFuY2UgPSBkb3QoIHZpZXcgKVxuXHRcdFx0XCJtdWwgdnQ0LngsIHZ0NC54LCB2YzcueFx0XHRcdFxcblwiICsgLy8gZGlzdGFuY2UgKj0gdnBzb2Rcblx0XHRcdFwibXVsIHZ0My54eXosIHZ0My54eXosIHZ0NC54eHhcdFxcblwiICsgLy8gUy54eXogKj0gcGl4ZWxTY2FsZUZhY3RvclxuXG5cdFx0XHQvLyBhZGQgc2NhbGVkIHNpZGUgdmVjdG9yIHRvIFEwIGFuZCB0cmFuc2Zvcm0gdG8gY2xpcCBzcGFjZVxuXHRcdFx0XCJhZGQgdnQwLnh5eiwgdnQwLnh5eiwgdnQzLnh5elx0XFxuXCIgKyAvLyBRMCArIFNcblxuXHRcdFx0XCJtNDQgb3AsIHZ0MCwgdmMwXHRcdFx0XFxuXCIgKyAvLyB0cmFuc2Zvcm0gUTAgdG8gY2xpcCBzcGFjZVxuXG5cdFx0XHQvLyBpbnRlcnBvbGF0ZSBjb2xvclxuXHRcdFx0XCJtb3YgdjAsIHZhM1x0XHRcdFx0XFxuXCI7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUFjdGl2YXRlUGFzcyhwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0c3VwZXIuX2lBY3RpdmF0ZVBhc3MocGFzcywgc3RhZ2UsIGNhbWVyYSk7XG5cblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0O1xuXG5cdFx0dGhpcy5fY29uc3RhbnRzWzBdID0gdGhpcy5fdGhpY2tuZXNzLygoc3RhZ2Uuc2Npc3NvclJlY3QpPyBNYXRoLm1pbihzdGFnZS5zY2lzc29yUmVjdC53aWR0aCwgc3RhZ2Uuc2Npc3NvclJlY3QuaGVpZ2h0KSA6IE1hdGgubWluKHN0YWdlLndpZHRoLCBzdGFnZS5oZWlnaHQpKTtcblxuXHRcdC8vIHZhbHVlIHRvIGNvbnZlcnQgZGlzdGFuY2UgZnJvbSBjYW1lcmEgdG8gbW9kZWwgbGVuZ3RoIHBlciBwaXhlbCB3aWR0aFxuXHRcdHRoaXMuX2NvbnN0YW50c1syXSA9IGNhbWVyYS5wcm9qZWN0aW9uLm5lYXI7XG5cblx0XHRjb250ZXh0LnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkoQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYLCA1LCBMaW5lQmFzaWNNYXRlcmlhbC5wT05FX1ZFQ1RPUiwgMSk7XG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgNiwgTGluZUJhc2ljTWF0ZXJpYWwucEZST05UX1ZFQ1RPUiwgMSk7XG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgNywgdGhpcy5fY29uc3RhbnRzLCAxKTtcblxuXHRcdC8vIHByb2plY3Rpb24gbWF0cml4XG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChDb250ZXh0R0xQcm9ncmFtVHlwZS5WRVJURVgsIDAsIGNhbWVyYS5wcm9qZWN0aW9uLm1hdHJpeCwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaVJlbmRlclBhc3MocGFzczpNYXRlcmlhbFBhc3NEYXRhLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHRzdXBlci5faVJlbmRlclBhc3MocGFzcywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSwgdmlld1Byb2plY3Rpb24pO1xuXG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblx0XHR0aGlzLl9jYWxjTWF0cml4LmNvcHlGcm9tKHJlbmRlcmFibGUuc291cmNlRW50aXR5LnNjZW5lVHJhbnNmb3JtKTtcblx0XHR0aGlzLl9jYWxjTWF0cml4LmFwcGVuZChjYW1lcmEuaW52ZXJzZVNjZW5lVHJhbnNmb3JtKTtcblxuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21NYXRyaXgoQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYLCA4LCB0aGlzLl9jYWxjTWF0cml4LCB0cnVlKTtcblxuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKExpbmVTdWJHZW9tZXRyeS5TVEFSVF9QT1NJVElPTl9EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoTGluZVN1Ykdlb21ldHJ5LlNUQVJUX1BPU0lUSU9OX0RBVEEpLCBMaW5lU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKDEsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShMaW5lU3ViR2VvbWV0cnkuRU5EX1BPU0lUSU9OX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChMaW5lU3ViR2VvbWV0cnkuRU5EX1BPU0lUSU9OX0RBVEEpLCBMaW5lU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKDIsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShMaW5lU3ViR2VvbWV0cnkuVEhJQ0tORVNTX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChMaW5lU3ViR2VvbWV0cnkuVEhJQ0tORVNTX0RBVEEpLCBMaW5lU3ViR2VvbWV0cnkuVEhJQ0tORVNTX0ZPUk1BVCk7XG5cdFx0Y29udGV4dC5hY3RpdmF0ZUJ1ZmZlcigzLCByZW5kZXJhYmxlLmdldFZlcnRleERhdGEoTGluZVN1Ykdlb21ldHJ5LkNPTE9SX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChMaW5lU3ViR2VvbWV0cnkuQ09MT1JfREFUQSksIExpbmVTdWJHZW9tZXRyeS5DT0xPUl9GT1JNQVQpO1xuXG5cdFx0Y29udGV4dC5kcmF3VHJpYW5nbGVzKGNvbnRleHQuZ2V0SW5kZXhCdWZmZXIocmVuZGVyYWJsZS5nZXRJbmRleERhdGEoKSksIDAsIHJlbmRlcmFibGUubnVtVHJpYW5nbGVzKTtcblx0fVxufVxuXG5leHBvcnQgPSBMaW5lQmFzaWNNYXRlcmlhbDsiXX0= \ No newline at end of file diff --git a/lib/materials/LineBasicMaterial.ts b/lib/materials/LineBasicMaterial.ts index 04fa21bd..ed4d3900 100644 --- a/lib/materials/LineBasicMaterial.ts +++ b/lib/materials/LineBasicMaterial.ts @@ -3,11 +3,11 @@ import Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); import LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/SkyboxMaterial.js b/lib/materials/SkyboxMaterial.js index 40985f97..6fd5710b 100755 --- a/lib/materials/SkyboxMaterial.js +++ b/lib/materials/SkyboxMaterial.js @@ -5,11 +5,11 @@ var __extends = this.__extends || function (d, b) { d.prototype = new __(); }; var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); var SkyboxPass = require("awayjs-stagegl/lib/materials/passes/SkyboxPass"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); @@ -96,4 +96,4 @@ var SkyboxMaterial = (function (_super) { })(StageGLMaterialBase); module.exports = SkyboxMaterial; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvc2t5Ym94bWF0ZXJpYWwudHMiXSwibmFtZXMiOlsiU2t5Ym94TWF0ZXJpYWwiLCJTa3lib3hNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlNreWJveE1hdGVyaWFsLmN1YmVNYXAiLCJTa3lib3hNYXRlcmlhbC5faUdldFZlcnRleENvZGUiLCJTa3lib3hNYXRlcmlhbC5faUdldEZyYWdtZW50Q29kZSIsIlNreWJveE1hdGVyaWFsLl9pQWN0aXZhdGVQYXNzIiwiU2t5Ym94TWF0ZXJpYWwuX2lSZW5kZXJQYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFNdEYsSUFBTyxvQkFBb0IsV0FBYSxzREFBc0QsQ0FBQyxDQUFDO0FBQ2hHLElBQU8sa0JBQWtCLFdBQWEsb0RBQW9ELENBQUMsQ0FBQztBQUM1RixJQUFPLG9CQUFvQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFDaEcsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBQ25HLElBQU8saUJBQWlCLFdBQWEsbURBQW1ELENBQUMsQ0FBQztBQUUxRixJQUFPLG1CQUFtQixXQUFhLGtEQUFrRCxDQUFDLENBQUM7QUFJM0YsSUFBTyxVQUFVLFdBQWUsZ0RBQWdELENBQUMsQ0FBQztBQUNsRixJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFLQTs7OztHQURHO0lBQ0csY0FBYztJQUFTQSxVQUF2QkEsY0FBY0EsVUFBNEJBO0lBTS9DQTs7O09BR0dBO0lBQ0hBLFNBVktBLGNBQWNBLENBVVBBLE9BQXVCQSxFQUFFQSxNQUFxQkEsRUFBRUEsTUFBc0JBLEVBQUVBLE1BQXNCQTtRQUFyRUMsc0JBQXFCQSxHQUFyQkEsYUFBcUJBO1FBQUVBLHNCQUFzQkEsR0FBdEJBLGNBQXNCQTtRQUFFQSxzQkFBc0JBLEdBQXRCQSxjQUFzQkE7UUFHekdBLGlCQUFPQSxD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RUEsSUFBSUEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFMUZBLE9BQU9BLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsRUFBRUEsVUFBVUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxhQUFhQSxDQUFDQSxFQUFFQSxtQkFBbUJBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBO1FBQzNMQSxPQUFPQSxDQUFDQSxhQUFhQSxDQUFDQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxVQUFVQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtJQUN0R0EsQ0FBQ0E7SUFDRk4scUJBQUNBO0FBQURBLENBbkdBLEFBbUdDQSxFQW5HNEIsbUJBQW1CLEVBbUcvQztBQUVELEFBQXdCLGlCQUFmLGNBQWMsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvU2t5Ym94TWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5cbmltcG9ydCBUcmlhbmdsZVN1Ykdlb21ldHJ5XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvVHJpYW5nbGVTdWJHZW9tZXRyeVwiKTtcbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQ29tcGFyZU1vZGVcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMUHJvZ3JhbVR5cGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFByb2dyYW1UeXBlXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xXcmFwTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2t5Ym94UGFzc1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9Ta3lib3hQYXNzXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBTa3lib3hNYXRlcmlhbCBpcyBhIG1hdGVyaWFsIGV4Y2x1c2l2ZWx5IHVzZWQgdG8gcmVuZGVyIHNreWJveGVzXG4gKlxuICogQHNlZSBhd2F5M2QucHJpbWl0aXZlcy5Ta3lib3hcbiAqL1xuY2xhc3MgU2t5Ym94TWF0ZXJpYWwgZXh0ZW5kcyBTdGFnZUdMTWF0ZXJpYWxCYXNlXG57XG5cdHByaXZhdGUgX3ZlcnRleERhdGE6QXJyYXk8bnVtYmVyPjtcblx0cHJpdmF0ZSBfY3ViZU1hcDpDdWJlVGV4dHVyZUJhc2U7XG5cdHByaXZhdGUgX3NreWJveFBhc3M6U2t5Ym94UGFzcztcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTa3lib3hNYXRlcmlhbCBvYmplY3QuXG5cdCAqIEBwYXJhbSBjdWJlTWFwIFRoZSBDdWJlTWFwIHRvIHVzZSBhcyB0aGUgc2t5Ym94LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoY3ViZU1hcDpDdWJlVGV4dHVyZUJhc2UsIHNtb290aDpib29sZWFuID0gdHJ1ZSwgcmVwZWF0OmJvb2xlYW4gPSBmYWxzZSwgbWlwbWFwOmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2N1YmVNYXAgPSBjdWJlTWFwO1xuXHRcdHRoaXMuX3BBZGRTY3JlZW5QYXNzKHRoaXMuX3NreWJveFBhc3MgPSBuZXcgU2t5Ym94UGFzcygpKTtcblxuXHRcdHRoaXMuX3ZlcnRleERhdGEgPSBuZXcgQXJyYXk8bnVtYmVyPigwLCAwLCAwLCAwLCAxLCAxLCAxLCAxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3ViZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2t5Ym94LlxuXHQgKi9cblx0cHVibGljIGdldCBjdWJlTWFwKCk6Q3ViZVRleHR1cmVCYXNlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY3ViZU1hcDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgY3ViZU1hcCh2YWx1ZTpDdWJlVGV4dHVyZUJhc2UpXG5cdHtcblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fY3ViZU1hcCAmJiAodmFsdWUuaGFzTWlwbWFwcyAhPSB0aGlzLl9jdWJlTWFwLmhhc01pcG1hcHMgfHwgdmFsdWUuZm9ybWF0ICE9IHRoaXMuX2N1YmVNYXAuZm9ybWF0KSlcblx0XHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cblx0XHR0aGlzLl9jdWJlTWFwID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJtdWwgdnQwLCB2YTAsIHZjNVxcblwiICtcblx0XHRcdFwiYWRkIHZ0MCwgdnQwLCB2YzRcXG5cIiArXG5cdFx0XHRcIm00NCBvcCwgdnQwLCB2YzBcXG5cIiArXG5cdFx0XHRcIm1vdiB2MCwgdmEwXFxuXCI7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdC8vdmFyIGN1YmVNYXBSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0Ly90aGlzLl90ZXh0dXJlc0luZGV4ID0gY3ViZU1hcFJlZy5pbmRleDtcblxuXHRcdC8vU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0VGV4Q3ViZVNhbXBsZUNvZGUoc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCwgY3ViZU1hcFJlZywgdGhpcy5fY3ViZVRleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmcpO1xuXG5cdFx0dmFyIG1pcDpzdHJpbmcgPSBcIixtaXBub25lXCI7XG5cblx0XHRpZiAodGhpcy5fY3ViZU1hcC5oYXNNaXBtYXBzKVxuXHRcdFx0bWlwID0gXCIsbWlwbGluZWFyXCI7XG5cblx0XHRyZXR1cm4gXCJ0ZXggZnQwLCB2MCwgZnMwIDxjdWJlLFwiICsgU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSh0aGlzLl9jdWJlTWFwKSArIFwibGluZWFyLGNsYW1wXCIgKyBtaXAgKyBcIj5cXG5cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pQWN0aXZhdGVQYXNzKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpXG5cdHtcblx0XHRzdXBlci5faUFjdGl2YXRlUGFzcyhwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0Y29udGV4dC5zZXRTYW1wbGVyU3RhdGVBdCgwLCBDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVIsIHRoaXMuX2N1YmVNYXAuaGFzTWlwbWFwcz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUiA6IENvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FKTtcblx0XHRjb250ZXh0LnNldERlcHRoVGVzdChmYWxzZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTUyk7XG5cdFx0Y29udGV4dC5hY3RpdmF0ZUN1YmVUZXh0dXJlKDAsIHRoaXMuX2N1YmVNYXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lSZW5kZXJQYXNzKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgcmVuZGVyYWJsZTpSZW5kZXJhYmxlQmFzZSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEsIHZpZXdQcm9qZWN0aW9uOk1hdHJpeDNEKVxuXHR7XG5cdFx0c3VwZXIuX2lSZW5kZXJQYXNzKHBhc3MsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIHBvczpWZWN0b3IzRCA9IGNhbWVyYS5zY2VuZVBvc2l0aW9uO1xuXHRcdHRoaXMuX3ZlcnRleERhdGFbMF0gPSBwb3MueDtcblx0XHR0aGlzLl92ZXJ0ZXhEYXRhWzFdID0gcG9zLnk7XG5cdFx0dGhpcy5fdmVydGV4RGF0YVsyXSA9IHBvcy56O1xuXHRcdHRoaXMuX3ZlcnRleERhdGFbNF0gPSB0aGlzLl92ZXJ0ZXhEYXRhWzVdID0gdGhpcy5fdmVydGV4RGF0YVs2XSA9IGNhbWVyYS5wcm9qZWN0aW9uLmZhci9NYXRoLnNxcnQoMyk7XG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChDb250ZXh0R0xQcm9ncmFtVHlwZS5WRVJURVgsIDAsIHZpZXdQcm9qZWN0aW9uLCB0cnVlKTtcblx0XHRjb250ZXh0LnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkoQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYLCA0LCB0aGlzLl92ZXJ0ZXhEYXRhLCAyKTtcblxuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoY29udGV4dC5nZXRJbmRleEJ1ZmZlcihyZW5kZXJhYmxlLmdldEluZGV4RGF0YSgpKSwgMCwgcmVuZGVyYWJsZS5udW1UcmlhbmdsZXMpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNreWJveE1hdGVyaWFsOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvc2t5Ym94bWF0ZXJpYWwudHMiXSwibmFtZXMiOlsiU2t5Ym94TWF0ZXJpYWwiLCJTa3lib3hNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlNreWJveE1hdGVyaWFsLmN1YmVNYXAiLCJTa3lib3hNYXRlcmlhbC5faUdldFZlcnRleENvZGUiLCJTa3lib3hNYXRlcmlhbC5faUdldEZyYWdtZW50Q29kZSIsIlNreWJveE1hdGVyaWFsLl9pQWN0aXZhdGVQYXNzIiwiU2t5Ym94TWF0ZXJpYWwuX2lSZW5kZXJQYXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFNdEYsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8sa0JBQWtCLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUNwRixJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDeEYsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBQzNGLElBQU8saUJBQWlCLFdBQWEsMkNBQTJDLENBQUMsQ0FBQztBQUVsRixJQUFPLG1CQUFtQixXQUFhLGtEQUFrRCxDQUFDLENBQUM7QUFJM0YsSUFBTyxVQUFVLFdBQWUsZ0RBQWdELENBQUMsQ0FBQztBQUNsRixJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFLQTs7OztHQURHO0lBQ0csY0FBYztJQUFTQSxVQUF2QkEsY0FBY0EsVUFBNEJBO0lBTS9DQTs7O09BR0dBO0lBQ0hBLFNBVktBLGNBQWNBLENBVVBBLE9BQXVCQSxFQUFFQSxNQUFxQkEsRUFBRUEsTUFBc0JBLEVBQUVBLE1BQXNCQTtRQUFyRUMsc0JBQXFCQSxHQUFyQkEsYUFBcUJBO1FBQUVBLHNCQUFzQkEsR0FBdEJBLGNBQXNCQTtRQUFFQSxzQkFBc0JBLEdBQXRCQSxjQUFzQkE7UUFHekdBLGlCQUFPQSxD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RUEsSUFBSUEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFMUZBLE9BQU9BLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGFBQWFBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsRUFBRUEsVUFBVUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxhQUFhQSxDQUFDQSxFQUFFQSxtQkFBbUJBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBO1FBQzNMQSxPQUFPQSxDQUFDQSxhQUFhQSxDQUFDQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxVQUFVQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtJQUN0R0EsQ0FBQ0E7SUFDRk4scUJBQUNBO0FBQURBLENBbkdBLEFBbUdDQSxFQW5HNEIsbUJBQW1CLEVBbUcvQztBQUVELEFBQXdCLGlCQUFmLGNBQWMsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvU2t5Ym94TWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5cbmltcG9ydCBUcmlhbmdsZVN1Ykdlb21ldHJ5XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvVHJpYW5nbGVTdWJHZW9tZXRyeVwiKTtcbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xQcm9ncmFtVHlwZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFByb2dyYW1UeXBlXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2t5Ym94UGFzc1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9Ta3lib3hQYXNzXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBTa3lib3hNYXRlcmlhbCBpcyBhIG1hdGVyaWFsIGV4Y2x1c2l2ZWx5IHVzZWQgdG8gcmVuZGVyIHNreWJveGVzXG4gKlxuICogQHNlZSBhd2F5M2QucHJpbWl0aXZlcy5Ta3lib3hcbiAqL1xuY2xhc3MgU2t5Ym94TWF0ZXJpYWwgZXh0ZW5kcyBTdGFnZUdMTWF0ZXJpYWxCYXNlXG57XG5cdHByaXZhdGUgX3ZlcnRleERhdGE6QXJyYXk8bnVtYmVyPjtcblx0cHJpdmF0ZSBfY3ViZU1hcDpDdWJlVGV4dHVyZUJhc2U7XG5cdHByaXZhdGUgX3NreWJveFBhc3M6U2t5Ym94UGFzcztcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTa3lib3hNYXRlcmlhbCBvYmplY3QuXG5cdCAqIEBwYXJhbSBjdWJlTWFwIFRoZSBDdWJlTWFwIHRvIHVzZSBhcyB0aGUgc2t5Ym94LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoY3ViZU1hcDpDdWJlVGV4dHVyZUJhc2UsIHNtb290aDpib29sZWFuID0gdHJ1ZSwgcmVwZWF0OmJvb2xlYW4gPSBmYWxzZSwgbWlwbWFwOmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX2N1YmVNYXAgPSBjdWJlTWFwO1xuXHRcdHRoaXMuX3BBZGRTY3JlZW5QYXNzKHRoaXMuX3NreWJveFBhc3MgPSBuZXcgU2t5Ym94UGFzcygpKTtcblxuXHRcdHRoaXMuX3ZlcnRleERhdGEgPSBuZXcgQXJyYXk8bnVtYmVyPigwLCAwLCAwLCAwLCAxLCAxLCAxLCAxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3ViZSB0ZXh0dXJlIHRvIHVzZSBhcyB0aGUgc2t5Ym94LlxuXHQgKi9cblx0cHVibGljIGdldCBjdWJlTWFwKCk6Q3ViZVRleHR1cmVCYXNlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY3ViZU1hcDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgY3ViZU1hcCh2YWx1ZTpDdWJlVGV4dHVyZUJhc2UpXG5cdHtcblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fY3ViZU1hcCAmJiAodmFsdWUuaGFzTWlwbWFwcyAhPSB0aGlzLl9jdWJlTWFwLmhhc01pcG1hcHMgfHwgdmFsdWUuZm9ybWF0ICE9IHRoaXMuX2N1YmVNYXAuZm9ybWF0KSlcblx0XHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cblx0XHR0aGlzLl9jdWJlTWFwID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJtdWwgdnQwLCB2YTAsIHZjNVxcblwiICtcblx0XHRcdFwiYWRkIHZ0MCwgdnQwLCB2YzRcXG5cIiArXG5cdFx0XHRcIm00NCBvcCwgdnQwLCB2YzBcXG5cIiArXG5cdFx0XHRcIm1vdiB2MCwgdmEwXFxuXCI7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdC8vdmFyIGN1YmVNYXBSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0Ly90aGlzLl90ZXh0dXJlc0luZGV4ID0gY3ViZU1hcFJlZy5pbmRleDtcblxuXHRcdC8vU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0VGV4Q3ViZVNhbXBsZUNvZGUoc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCwgY3ViZU1hcFJlZywgdGhpcy5fY3ViZVRleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmcpO1xuXG5cdFx0dmFyIG1pcDpzdHJpbmcgPSBcIixtaXBub25lXCI7XG5cblx0XHRpZiAodGhpcy5fY3ViZU1hcC5oYXNNaXBtYXBzKVxuXHRcdFx0bWlwID0gXCIsbWlwbGluZWFyXCI7XG5cblx0XHRyZXR1cm4gXCJ0ZXggZnQwLCB2MCwgZnMwIDxjdWJlLFwiICsgU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSh0aGlzLl9jdWJlTWFwKSArIFwibGluZWFyLGNsYW1wXCIgKyBtaXAgKyBcIj5cXG5cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pQWN0aXZhdGVQYXNzKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpXG5cdHtcblx0XHRzdXBlci5faUFjdGl2YXRlUGFzcyhwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0Y29udGV4dC5zZXRTYW1wbGVyU3RhdGVBdCgwLCBDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVIsIHRoaXMuX2N1YmVNYXAuaGFzTWlwbWFwcz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUiA6IENvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FKTtcblx0XHRjb250ZXh0LnNldERlcHRoVGVzdChmYWxzZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTUyk7XG5cdFx0Y29udGV4dC5hY3RpdmF0ZUN1YmVUZXh0dXJlKDAsIHRoaXMuX2N1YmVNYXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lSZW5kZXJQYXNzKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgcmVuZGVyYWJsZTpSZW5kZXJhYmxlQmFzZSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEsIHZpZXdQcm9qZWN0aW9uOk1hdHJpeDNEKVxuXHR7XG5cdFx0c3VwZXIuX2lSZW5kZXJQYXNzKHBhc3MsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIHBvczpWZWN0b3IzRCA9IGNhbWVyYS5zY2VuZVBvc2l0aW9uO1xuXHRcdHRoaXMuX3ZlcnRleERhdGFbMF0gPSBwb3MueDtcblx0XHR0aGlzLl92ZXJ0ZXhEYXRhWzFdID0gcG9zLnk7XG5cdFx0dGhpcy5fdmVydGV4RGF0YVsyXSA9IHBvcy56O1xuXHRcdHRoaXMuX3ZlcnRleERhdGFbNF0gPSB0aGlzLl92ZXJ0ZXhEYXRhWzVdID0gdGhpcy5fdmVydGV4RGF0YVs2XSA9IGNhbWVyYS5wcm9qZWN0aW9uLmZhci9NYXRoLnNxcnQoMyk7XG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbU1hdHJpeChDb250ZXh0R0xQcm9ncmFtVHlwZS5WRVJURVgsIDAsIHZpZXdQcm9qZWN0aW9uLCB0cnVlKTtcblx0XHRjb250ZXh0LnNldFByb2dyYW1Db25zdGFudHNGcm9tQXJyYXkoQ29udGV4dEdMUHJvZ3JhbVR5cGUuVkVSVEVYLCA0LCB0aGlzLl92ZXJ0ZXhEYXRhLCAyKTtcblxuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoY29udGV4dC5nZXRJbmRleEJ1ZmZlcihyZW5kZXJhYmxlLmdldEluZGV4RGF0YSgpKSwgMCwgcmVuZGVyYWJsZS5udW1UcmlhbmdsZXMpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNreWJveE1hdGVyaWFsOyJdfQ== \ No newline at end of file diff --git a/lib/materials/SkyboxMaterial.ts b/lib/materials/SkyboxMaterial.ts index aae54ff1..c57c6a22 100644 --- a/lib/materials/SkyboxMaterial.ts +++ b/lib/materials/SkyboxMaterial.ts @@ -5,15 +5,15 @@ import CubeTextureBase = require("awayjs-core/lib/textures/CubeTextureBase"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/TriangleBasicMaterial.js b/lib/materials/TriangleBasicMaterial.js index ec5dea34..dca07353 100755 --- a/lib/materials/TriangleBasicMaterial.js +++ b/lib/materials/TriangleBasicMaterial.js @@ -6,7 +6,7 @@ var __extends = this.__extends || function (d, b) { }; var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); var BlendMode = require("awayjs-display/lib/base/BlendMode"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); var TriangleBasicPass = require("awayjs-stagegl/lib/materials/passes/TriangleBasicPass"); var TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); /** @@ -133,4 +133,4 @@ var TriangleBasicMaterial = (function (_super) { })(TriangleMaterialBase); module.exports = TriangleBasicMaterial; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGViYXNpY21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbCIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5kZXB0aENvbXBhcmVNb2RlIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLmFscGhhIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLmFscGhhQmxlbmRpbmciLCJUcmlhbmdsZUJhc2ljTWF0ZXJpYWwuaVVwZGF0ZU1hdGVyaWFsIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLnBVcGRhdGVTY3JlZW5QYXNzZXMiLCJUcmlhbmdsZUJhc2ljTWF0ZXJpYWwuaW5pdFBhc3NlcyIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5zZXRCbGVuZEFuZENvbXBhcmVNb2RlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxhQUFhLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQUU1RSxJQUFPLFNBQVMsV0FBZSxtQ0FBbUMsQ0FBQyxDQUFDO0FBRXBFLElBQU8sb0JBQW9CLFdBQWEsc0RBQXNELENBQUMsQ0FBQztBQUNoRyxJQUFPLGlCQUFpQixXQUFhLHVEQUF1RCxDQUFDLENBQUM7QUFDOUYsSUFBTyxvQkFBb0IsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBRTdGLEFBSUE7OztHQURHO0lBQ0cscUJBQXFCO0lBQVNBLFVBQTlCQSxxQkFBcUJBLFVBQTZCQTtJQW1CdkRBLFNBbkJLQSxxQkFBcUJBLENBbUJkQSxZQUF1QkEsRUFBRUEsV0FBc0JBLEVBQUVBLE1BQXNCQSxFQUFFQSxNQUFzQkE7UUFBL0ZDLDRCQUF1QkEsR0FBdkJBLG1CQUF1QkE7UUFBRUEsMkJBQXNCQSxHQUF0QkEsa0JBQXNCQTtRQUFFQSxzQkFBc0JBLEdBQXRCQSxjQUFzQkE7UUFBRUEsc0JBQXNCQSxHQUF0QkEsY0FBc0JBO1FBRTFHQSxpQkFB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a0JBQWtCQSxDQUFDQTtRQUN6REEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsSUFBSUEsU0FBU0EsQ0FBQ0EsTUFBTUEsSUFBSUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxHQUFFQSxTQUFTQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUNySUEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxLQUFLQSxDQUFDQTtJQUMzQ0EsQ0FBQ0E7SUFDRlIsNEJBQUNBO0FBQURBLENBdEpBLEFBc0pDQSxFQXRKbUMsb0JBQW9CLEVBc0p2RDtBQUVELEFBQStCLGlCQUF0QixxQkFBcUIsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvVHJpYW5nbGVCYXNpY01hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IEJsZW5kTW9kZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9CbGVuZE1vZGVcIik7XG5cbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQ29tcGFyZU1vZGVcIik7XG5pbXBvcnQgVHJpYW5nbGVCYXNpY1Bhc3NcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9UcmlhbmdsZUJhc2ljUGFzc1wiKTtcbmltcG9ydCBUcmlhbmdsZU1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvVHJpYW5nbGVNYXRlcmlhbEJhc2VcIik7XG5cbi8qKlxuICogVHJpYW5nbGVNYXRlcmlhbCBmb3JtcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgZGVmYXVsdCBzaGFkZWQgbWF0ZXJpYWxzIHByb3ZpZGVkIGJ5IFN0YWdlLFxuICogdXNpbmcgbWF0ZXJpYWwgbWV0aG9kcyB0byBkZWZpbmUgdGhlaXIgYXBwZWFyYW5jZS5cbiAqL1xuY2xhc3MgVHJpYW5nbGVCYXNpY01hdGVyaWFsIGV4dGVuZHMgVHJpYW5nbGVNYXRlcmlhbEJhc2Vcbntcblx0cHJpdmF0ZSBfc2NyZWVuUGFzczpUcmlhbmdsZUJhc2ljUGFzcztcblxuXHRwcml2YXRlIF9hbHBoYUJsZW5kaW5nOmJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBfYWxwaGE6bnVtYmVyID0gMTtcblxuXHRwcml2YXRlIF9kZXB0aENvbXBhcmVNb2RlOnN0cmluZyA9IENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUw7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgVHJpYW5nbGVNYXRlcmlhbCBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBtYXRlcmlhbCdzIGFsYmVkbyBjb2xvci5cblx0ICogQHBhcmFtIHNtb290aCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgZmlsdGVyZWQgd2hlbiBzYW1wbGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuXHQgKiBAcGFyYW0gcmVwZWF0IEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSB0aWxlZCB3aGVuIHNhbXBsZWQuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHQgKiBAcGFyYW0gbWlwbWFwIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbnkgdXNlZCB0ZXh0dXJlcyBzaG91bGQgdXNlIG1pcG1hcHBpbmcuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IodGV4dHVyZT86VGV4dHVyZTJEQmFzZSwgc21vb3RoPzpib29sZWFuLCByZXBlYXQ/OmJvb2xlYW4sIG1pcG1hcD86Ym9vbGVhbik7XG5cdGNvbnN0cnVjdG9yKGNvbG9yPzpudW1iZXIsIGFscGhhPzpudW1iZXIpO1xuXHRjb25zdHJ1Y3Rvcih0ZXh0dXJlQ29sb3I6YW55ID0gbnVsbCwgc21vb3RoQWxwaGE6YW55ID0gbnVsbCwgcmVwZWF0OmJvb2xlYW4gPSBmYWxzZSwgbWlwbWFwOmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9zY3JlZW5QYXNzID0gbmV3IFRyaWFuZ2xlQmFzaWNQYXNzKCk7XG5cblx0XHRpZiAodGV4dHVyZUNvbG9yIGluc3RhbmNlb2YgVGV4dHVyZTJEQmFzZSkge1xuXHRcdFx0dGhpcy50ZXh0dXJlID0gPFRleHR1cmUyREJhc2U+IHRleHR1cmVDb2xvcjtcblxuXHRcdFx0dGhpcy5zbW9vdGggPSAoc21vb3RoQWxwaGEgPT0gbnVsbCk/IHRydWUgOiBmYWxzZTtcblx0XHRcdHRoaXMucmVwZWF0ID0gcmVwZWF0O1xuXHRcdFx0dGhpcy5taXBtYXAgPSBtaXBtYXA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29sb3IgPSB0ZXh0dXJlQ29sb3I/IE51bWJlcih0ZXh0dXJlQ29sb3IpIDogMHhDQ0NDQ0M7XG5cdFx0XHR0aGlzLmFscGhhID0gKHNtb290aEFscGhhID09IG51bGwpPyAxIDogTnVtYmVyKHNtb290aEFscGhhKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRlcHRoIGNvbXBhcmUgbW9kZSB1c2VkIHRvIHJlbmRlciB0aGUgcmVuZGVyYWJsZXMgdXNpbmcgdGhpcyBtYXRlcmlhbC5cblx0ICpcblx0ICogQHNlZSBhd2F5LnN0YWdlZ2wuQ29udGV4dEdMQ29tcGFyZU1vZGVcblx0ICovXG5cblx0cHVibGljIGdldCBkZXB0aENvbXBhcmVNb2RlKCk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGVwdGhDb21wYXJlTW9kZSh2YWx1ZTpzdHJpbmcpXG5cdHtcblx0XHRpZiAodGhpcy5fZGVwdGhDb21wYXJlTW9kZSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2RlcHRoQ29tcGFyZU1vZGUgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFscGhhIG9mIHRoZSBzdXJmYWNlLlxuXHQgKi9cblx0cHVibGljIGdldCBhbHBoYSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FscGhhO1xuXHR9XG5cblx0cHVibGljIHNldCBhbHBoYSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodmFsdWUgPiAxKVxuXHRcdFx0dmFsdWUgPSAxO1xuXHRcdGVsc2UgaWYgKHZhbHVlIDwgMClcblx0XHRcdHZhbHVlID0gMDtcblxuXHRcdGlmICh0aGlzLl9hbHBoYSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2FscGhhID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0ZXJpYWwgaGFzIHRyYW5zcGFyZW5jeS4gSWYgYmluYXJ5IHRyYW5zcGFyZW5jeSBpcyBzdWZmaWNpZW50LCBmb3Jcblx0ICogZXhhbXBsZSB3aGVuIHVzaW5nIHRleHR1cmVzIG9mIGZvbGlhZ2UsIGNvbnNpZGVyIHVzaW5nIGFscGhhVGhyZXNob2xkIGluc3RlYWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFscGhhQmxlbmRpbmcoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYWxwaGFCbGVuZGluZztcblx0fVxuXG5cdHB1YmxpYyBzZXQgYWxwaGFCbGVuZGluZyh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FscGhhQmxlbmRpbmcgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbHBoYUJsZW5kaW5nID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaVVwZGF0ZU1hdGVyaWFsKClcblx0e1xuXHRcdHZhciBwYXNzZXNJbnZhbGlkOmJvb2xlYW47XG5cblx0XHRpZiAodGhpcy5fcFNjcmVlblBhc3Nlc0ludmFsaWQpIHtcblx0XHRcdHRoaXMucFVwZGF0ZVNjcmVlblBhc3NlcygpO1xuXHRcdFx0cGFzc2VzSW52YWxpZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBhc3Nlc0ludmFsaWQpIHtcblx0XHRcdHRoaXMuX3BDbGVhclNjcmVlblBhc3NlcygpO1xuXG5cdFx0XHR0aGlzLl9wQWRkU2NyZWVuUGFzcyh0aGlzLl9zY3JlZW5QYXNzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBzY3JlZW4gcGFzc2VzIHdoZW4gdGhleSB3ZXJlIGZvdW5kIHRvIGJlIGludmFsaWQuXG5cdCAqL1xuXHRwdWJsaWMgcFVwZGF0ZVNjcmVlblBhc3NlcygpXG5cdHtcblx0XHR0aGlzLmluaXRQYXNzZXMoKTtcblxuXHRcdHRoaXMuc2V0QmxlbmRBbmRDb21wYXJlTW9kZXMoKTtcblxuXHRcdHRoaXMuX3BTY3JlZW5QYXNzZXNJbnZhbGlkID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSBwYXNzZXMgYW5kIHRoZWlyIGRlcGVuZGVudCBwYXNzZXMuXG5cdCAqL1xuXHRwcml2YXRlIGluaXRQYXNzZXMoKVxuXHR7XG5cdFx0Ly9cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHVwIHRoZSB2YXJpb3VzIGJsZW5kaW5nIG1vZGVzIGZvciBhbGwgc2NyZWVuIHBhc3NlcywgYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlcmUgYXJlIHByZXZpb3VzIHBhc3Nlcy5cblx0ICovXG5cdHByaXZhdGUgc2V0QmxlbmRBbmRDb21wYXJlTW9kZXMoKVxuXHR7XG5cdFx0dGhpcy5fcFJlcXVpcmVzQmxlbmRpbmcgPSAodGhpcy5fcEJsZW5kTW9kZSAhPSBCbGVuZE1vZGUuTk9STUFMIHx8IHRoaXMuX2FscGhhQmxlbmRpbmcgfHwgdGhpcy5fYWxwaGEgPCAxKTtcblx0XHR0aGlzLl9zY3JlZW5QYXNzLmRlcHRoQ29tcGFyZU1vZGUgPSB0aGlzLl9kZXB0aENvbXBhcmVNb2RlO1xuXHRcdHRoaXMuX3NjcmVlblBhc3MucHJlc2VydmVBbHBoYSA9IHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nO1xuXHRcdHRoaXMuX3NjcmVlblBhc3Muc2V0QmxlbmRNb2RlKCh0aGlzLl9wQmxlbmRNb2RlID09IEJsZW5kTW9kZS5OT1JNQUwgJiYgdGhpcy5fcFJlcXVpcmVzQmxlbmRpbmcpPyBCbGVuZE1vZGUuTEFZRVIgOiB0aGlzLl9wQmxlbmRNb2RlKTtcblx0XHR0aGlzLl9zY3JlZW5QYXNzLmZvcmNlU2VwYXJhdGVNVlAgPSBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgPSBUcmlhbmdsZUJhc2ljTWF0ZXJpYWw7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGViYXNpY21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbCIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5kZXB0aENvbXBhcmVNb2RlIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLmFscGhhIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLmFscGhhQmxlbmRpbmciLCJUcmlhbmdsZUJhc2ljTWF0ZXJpYWwuaVVwZGF0ZU1hdGVyaWFsIiwiVHJpYW5nbGVCYXNpY01hdGVyaWFsLnBVcGRhdGVTY3JlZW5QYXNzZXMiLCJUcmlhbmdsZUJhc2ljTWF0ZXJpYWwuaW5pdFBhc3NlcyIsIlRyaWFuZ2xlQmFzaWNNYXRlcmlhbC5zZXRCbGVuZEFuZENvbXBhcmVNb2RlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxhQUFhLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQUU1RSxJQUFPLFNBQVMsV0FBZSxtQ0FBbUMsQ0FBQyxDQUFDO0FBRXBFLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLGlCQUFpQixXQUFhLHVEQUF1RCxDQUFDLENBQUM7QUFDOUYsSUFBTyxvQkFBb0IsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBRTdGLEFBSUE7OztHQURHO0lBQ0cscUJBQXFCO0lBQVNBLFVBQTlCQSxxQkFBcUJBLFVBQTZCQTtJQW1CdkRBLFNBbkJLQSxxQkFBcUJBLENBbUJkQSxZQUF1QkEsRUFBRUEsV0FBc0JBLEVBQUVBLE1BQXNCQSxFQUFFQSxNQUFzQkE7UUFBL0ZDLDRCQUF1QkEsR0FBdkJBLG1CQUF1QkE7UUFBRUEsMkJBQXNCQSxHQUF0QkEsa0JBQXNCQTtRQUFFQSxzQkFBc0JBLEdBQXRCQSxjQUFzQkE7UUFBRUEsc0JBQXNCQSxHQUF0QkEsY0FBc0JBO1FBRTFHQSxpQkFB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a0JBQWtCQSxDQUFDQTtRQUN6REEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsSUFBSUEsU0FBU0EsQ0FBQ0EsTUFBTUEsSUFBSUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxHQUFFQSxTQUFTQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQTtRQUNySUEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxLQUFLQSxDQUFDQTtJQUMzQ0EsQ0FBQ0E7SUFDRlIsNEJBQUNBO0FBQURBLENBdEpBLEFBc0pDQSxFQXRKbUMsb0JBQW9CLEVBc0p2RDtBQUVELEFBQStCLGlCQUF0QixxQkFBcUIsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvVHJpYW5nbGVCYXNpY01hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IEJsZW5kTW9kZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9CbGVuZE1vZGVcIik7XG5cbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlQmFzaWNQYXNzXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvVHJpYW5nbGVCYXNpY1Bhc3NcIik7XG5pbXBvcnQgVHJpYW5nbGVNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWF0ZXJpYWxCYXNlXCIpO1xuXG4vKipcbiAqIFRyaWFuZ2xlTWF0ZXJpYWwgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGhlIGRlZmF1bHQgc2hhZGVkIG1hdGVyaWFscyBwcm92aWRlZCBieSBTdGFnZSxcbiAqIHVzaW5nIG1hdGVyaWFsIG1ldGhvZHMgdG8gZGVmaW5lIHRoZWlyIGFwcGVhcmFuY2UuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlQmFzaWNNYXRlcmlhbCBleHRlbmRzIFRyaWFuZ2xlTWF0ZXJpYWxCYXNlXG57XG5cdHByaXZhdGUgX3NjcmVlblBhc3M6VHJpYW5nbGVCYXNpY1Bhc3M7XG5cblx0cHJpdmF0ZSBfYWxwaGFCbGVuZGluZzpib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgX2FscGhhOm51bWJlciA9IDE7XG5cblx0cHJpdmF0ZSBfZGVwdGhDb21wYXJlTW9kZTpzdHJpbmcgPSBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFRyaWFuZ2xlTWF0ZXJpYWwgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdGV4dHVyZSBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgbWF0ZXJpYWwncyBhbGJlZG8gY29sb3IuXG5cdCAqIEBwYXJhbSBzbW9vdGggSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIGZpbHRlcmVkIHdoZW4gc2FtcGxlZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cblx0ICogQHBhcmFtIHJlcGVhdCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgdGlsZWQgd2hlbiBzYW1wbGVkLiBEZWZhdWx0cyB0byBmYWxzZS5cblx0ICogQHBhcmFtIG1pcG1hcCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW55IHVzZWQgdGV4dHVyZXMgc2hvdWxkIHVzZSBtaXBtYXBwaW5nLiBEZWZhdWx0cyB0byBmYWxzZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHRleHR1cmU/OlRleHR1cmUyREJhc2UsIHNtb290aD86Ym9vbGVhbiwgcmVwZWF0Pzpib29sZWFuLCBtaXBtYXA/OmJvb2xlYW4pO1xuXHRjb25zdHJ1Y3Rvcihjb2xvcj86bnVtYmVyLCBhbHBoYT86bnVtYmVyKTtcblx0Y29uc3RydWN0b3IodGV4dHVyZUNvbG9yOmFueSA9IG51bGwsIHNtb290aEFscGhhOmFueSA9IG51bGwsIHJlcGVhdDpib29sZWFuID0gZmFsc2UsIG1pcG1hcDpib29sZWFuID0gZmFsc2UpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fc2NyZWVuUGFzcyA9IG5ldyBUcmlhbmdsZUJhc2ljUGFzcygpO1xuXG5cdFx0aWYgKHRleHR1cmVDb2xvciBpbnN0YW5jZW9mIFRleHR1cmUyREJhc2UpIHtcblx0XHRcdHRoaXMudGV4dHVyZSA9IDxUZXh0dXJlMkRCYXNlPiB0ZXh0dXJlQ29sb3I7XG5cblx0XHRcdHRoaXMuc21vb3RoID0gKHNtb290aEFscGhhID09IG51bGwpPyB0cnVlIDogZmFsc2U7XG5cdFx0XHR0aGlzLnJlcGVhdCA9IHJlcGVhdDtcblx0XHRcdHRoaXMubWlwbWFwID0gbWlwbWFwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbG9yID0gdGV4dHVyZUNvbG9yPyBOdW1iZXIodGV4dHVyZUNvbG9yKSA6IDB4Q0NDQ0NDO1xuXHRcdFx0dGhpcy5hbHBoYSA9IChzbW9vdGhBbHBoYSA9PSBudWxsKT8gMSA6IE51bWJlcihzbW9vdGhBbHBoYSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZXB0aCBjb21wYXJlIG1vZGUgdXNlZCB0byByZW5kZXIgdGhlIHJlbmRlcmFibGVzIHVzaW5nIHRoaXMgbWF0ZXJpYWwuXG5cdCAqXG5cdCAqIEBzZWUgYXdheS5zdGFnZWdsLkNvbnRleHRHTENvbXBhcmVNb2RlXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXQgZGVwdGhDb21wYXJlTW9kZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RlcHRoQ29tcGFyZU1vZGU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRlcHRoQ29tcGFyZU1vZGUodmFsdWU6c3RyaW5nKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2RlcHRoQ29tcGFyZU1vZGUgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9kZXB0aENvbXBhcmVNb2RlID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBhbHBoYSBvZiB0aGUgc3VyZmFjZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYWxwaGEoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbHBoYTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYWxwaGEodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHZhbHVlID4gMSlcblx0XHRcdHZhbHVlID0gMTtcblx0XHRlbHNlIGlmICh2YWx1ZSA8IDApXG5cdFx0XHR2YWx1ZSA9IDA7XG5cblx0XHRpZiAodGhpcy5fYWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbHBoYSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIG1hdGVyaWFsIGhhcyB0cmFuc3BhcmVuY3kuIElmIGJpbmFyeSB0cmFuc3BhcmVuY3kgaXMgc3VmZmljaWVudCwgZm9yXG5cdCAqIGV4YW1wbGUgd2hlbiB1c2luZyB0ZXh0dXJlcyBvZiBmb2xpYWdlLCBjb25zaWRlciB1c2luZyBhbHBoYVRocmVzaG9sZCBpbnN0ZWFkLlxuXHQgKi9cblx0cHVibGljIGdldCBhbHBoYUJsZW5kaW5nKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FscGhhQmxlbmRpbmc7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFscGhhQmxlbmRpbmcodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdGlmICh0aGlzLl9hbHBoYUJsZW5kaW5nID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fYWxwaGFCbGVuZGluZyA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlVcGRhdGVNYXRlcmlhbCgpXG5cdHtcblx0XHR2YXIgcGFzc2VzSW52YWxpZDpib29sZWFuO1xuXG5cdFx0aWYgKHRoaXMuX3BTY3JlZW5QYXNzZXNJbnZhbGlkKSB7XG5cdFx0XHR0aGlzLnBVcGRhdGVTY3JlZW5QYXNzZXMoKTtcblx0XHRcdHBhc3Nlc0ludmFsaWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChwYXNzZXNJbnZhbGlkKSB7XG5cdFx0XHR0aGlzLl9wQ2xlYXJTY3JlZW5QYXNzZXMoKTtcblxuXHRcdFx0dGhpcy5fcEFkZFNjcmVlblBhc3ModGhpcy5fc2NyZWVuUGFzcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgc2NyZWVuIHBhc3NlcyB3aGVuIHRoZXkgd2VyZSBmb3VuZCB0byBiZSBpbnZhbGlkLlxuXHQgKi9cblx0cHVibGljIHBVcGRhdGVTY3JlZW5QYXNzZXMoKVxuXHR7XG5cdFx0dGhpcy5pbml0UGFzc2VzKCk7XG5cblx0XHR0aGlzLnNldEJsZW5kQW5kQ29tcGFyZU1vZGVzKCk7XG5cblx0XHR0aGlzLl9wU2NyZWVuUGFzc2VzSW52YWxpZCA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGFsbCB0aGUgcGFzc2VzIGFuZCB0aGVpciBkZXBlbmRlbnQgcGFzc2VzLlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0UGFzc2VzKClcblx0e1xuXHRcdC8vXG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB1cCB0aGUgdmFyaW91cyBibGVuZGluZyBtb2RlcyBmb3IgYWxsIHNjcmVlbiBwYXNzZXMsIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBwcmV2aW91cyBwYXNzZXMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJsZW5kQW5kQ29tcGFyZU1vZGVzKClcblx0e1xuXHRcdHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nID0gKHRoaXMuX3BCbGVuZE1vZGUgIT0gQmxlbmRNb2RlLk5PUk1BTCB8fCB0aGlzLl9hbHBoYUJsZW5kaW5nIHx8IHRoaXMuX2FscGhhIDwgMSk7XG5cdFx0dGhpcy5fc2NyZWVuUGFzcy5kZXB0aENvbXBhcmVNb2RlID0gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0XHR0aGlzLl9zY3JlZW5QYXNzLnByZXNlcnZlQWxwaGEgPSB0aGlzLl9wUmVxdWlyZXNCbGVuZGluZztcblx0XHR0aGlzLl9zY3JlZW5QYXNzLnNldEJsZW5kTW9kZSgodGhpcy5fcEJsZW5kTW9kZSA9PSBCbGVuZE1vZGUuTk9STUFMICYmIHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nKT8gQmxlbmRNb2RlLkxBWUVSIDogdGhpcy5fcEJsZW5kTW9kZSk7XG5cdFx0dGhpcy5fc2NyZWVuUGFzcy5mb3JjZVNlcGFyYXRlTVZQID0gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVCYXNpY01hdGVyaWFsOyJdfQ== \ No newline at end of file diff --git a/lib/materials/TriangleBasicMaterial.ts b/lib/materials/TriangleBasicMaterial.ts index 71eba502..9cf33eed 100644 --- a/lib/materials/TriangleBasicMaterial.ts +++ b/lib/materials/TriangleBasicMaterial.ts @@ -2,7 +2,7 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import BlendMode = require("awayjs-display/lib/base/BlendMode"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); import TriangleBasicPass = require("awayjs-stagegl/lib/materials/passes/TriangleBasicPass"); import TriangleMaterialBase = require("awayjs-stagegl/lib/materials/TriangleMaterialBase"); diff --git a/lib/materials/TriangleMaterialBase.js b/lib/materials/TriangleMaterialBase.js index b62c3641..17c5f3a2 100755 --- a/lib/materials/TriangleMaterialBase.js +++ b/lib/materials/TriangleMaterialBase.js @@ -6,7 +6,7 @@ var __extends = this.__extends || function (d, b) { }; var Matrix3DUtils = require("awayjs-core/lib/geom/Matrix3DUtils"); var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); +var ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); var StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); /** * CompiledPass forms an abstract base class for the default compiled pass materials provided by Away3D, @@ -63,4 +63,4 @@ var TriangleMaterialBase = (function (_super) { })(StageGLMaterialBase); module.exports = TriangleMaterialBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGVtYXRlcmlhbGJhc2UudHMiXSwibmFtZXMiOlsiVHJpYW5nbGVNYXRlcmlhbEJhc2UiLCJUcmlhbmdsZU1hdGVyaWFsQmFzZS5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlTWF0ZXJpYWxCYXNlLl9pR2V0VmVydGV4Q29kZSIsIlRyaWFuZ2xlTWF0ZXJpYWxCYXNlLl9pUmVuZGVyUGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxhQUFhLFdBQWMsb0NBQW9DLENBQUMsQ0FBQztBQUd4RSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFPdEYsSUFBTyxvQkFBb0IsV0FBYSxzREFBc0QsQ0FBQyxDQUFDO0FBTWhHLElBQU8sbUJBQW1CLFdBQWEsa0RBQWtELENBQUMsQ0FBQztBQUUzRixBQUlBOzs7R0FERztJQUNHLG9CQUFvQjtJQUFTQSxVQUE3QkEsb0JBQW9CQSxVQUE0QkE7SUFBdERBLFNBQU1BLG9CQUFvQkE7UUFBU0MsOEJBQW1CQTtJQTBEdERBLENBQUNBO0lBeERPRCw4Q0FBZUEsR0FBdEJBLFVBQXVCQSxZQUE2QkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUxSEUsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLEFBQ0FBLGdDQURnQ0E7WUFDNUJBLFFBQVFBLEdBQXlCQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUVBLGVBQWVBLENBQUNBLG9CQUFvQkEsR0FBR0EsZUFBZUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFFcEpBLEFBQ0FBLGtEQURrREE7WUFDOUNBLGFBQWFBLEdBQXlCQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ2hGQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ3RDQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ3RD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QUFvQkEsQ0FBQ0EsUUFBUUEsRUFBRUEsQ0FBQ0EsRUFBRUEsWUFBWUEsQ0FBQ0Esb0JBQW9CQSxFQUFFQSxZQUFZQSxDQUFDQSx3QkFBd0JBLENBQUNBLENBQUNBO1FBRWpKQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxhQUFhQSxDQUFDQSxtQkFBbUJBLENBQUNBLGFBQWFBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsRUFBRUEsbUJBQW1CQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUMzTEEsT0FBT0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsVUFBVUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0E7SUFDdEdBLENBQUNBO0lBQ0ZILDJCQUFDQTtBQUFEQSxDQTFEQSxBQTBEQ0EsRUExRGtDLG1CQUFtQixFQTBEckQ7QUFFRCxBQUE4QixpQkFBckIsb0JBQW9CLENBQUMiLCJmaWxlIjoibWF0ZXJpYWxzL1RyaWFuZ2xlTWF0ZXJpYWxCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBNYXRyaXhcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXhcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IENvbnRleHRHTFByb2dyYW1UeXBlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xQcm9ncmFtVHlwZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuXG4vKipcbiAqIENvbXBpbGVkUGFzcyBmb3JtcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgZGVmYXVsdCBjb21waWxlZCBwYXNzIG1hdGVyaWFscyBwcm92aWRlZCBieSBBd2F5M0QsXG4gKiB1c2luZyBtYXRlcmlhbCBtZXRob2RzIHRvIGRlZmluZSB0aGVpciBhcHBlYXJhbmNlLlxuICovXG5jbGFzcyBUcmlhbmdsZU1hdGVyaWFsQmFzZSBleHRlbmRzIFN0YWdlR0xNYXRlcmlhbEJhc2Vcbntcblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHQvL2dldCB0aGUgcHJvamVjdGlvbiBjb29yZGluYXRlc1xuXHRcdHZhciBwb3NpdGlvbjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSAoc2hhZGVyT2JqZWN0Lmdsb2JhbFBvc0RlcGVuZGVuY2llcyA+IDApPyBzaGFyZWRSZWdpc3RlcnMuZ2xvYmFsUG9zaXRpb25WZXJ0ZXggOiBzaGFyZWRSZWdpc3RlcnMubG9jYWxQb3NpdGlvbjtcblxuXHRcdC8vcmVzZXJ2aW5nIHZlcnRleCBjb25zdGFudHMgZm9yIHByb2plY3Rpb24gbWF0cml4XG5cdFx0dmFyIHZpZXdNYXRyaXhSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdpc3RlckNhY2hlLmdldEZyZWVWZXJ0ZXhDb25zdGFudCgpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4ID0gdmlld01hdHJpeFJlZy5pbmRleCo0O1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5wcm9qZWN0aW9uRGVwZW5kZW5jaWVzID4gMCkge1xuXHRcdFx0c2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZhcnlpbmcoKTtcblx0XHRcdHZhciB0ZW1wOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleFZlY3RvclRlbXAoKTtcblx0XHRcdGNvZGUgKz0gXCJtNDQgXCIgKyB0ZW1wICsgXCIsIFwiICsgcG9zaXRpb24gKyBcIiwgXCIgKyB2aWV3TWF0cml4UmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwibW92IFwiICsgc2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCArIFwiLCBcIiArIHRlbXAgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtb3Ygb3AsIFwiICsgdGVtcCArIFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvZGUgKz0gXCJtNDQgb3AsIFwiICsgcG9zaXRpb24gKyBcIiwgXCIgKyB2aWV3TWF0cml4UmVnICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pUmVuZGVyUGFzcyhwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHN1cGVyLl9pUmVuZGVyUGFzcyhwYXNzLCByZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cblx0XHR2YXIgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UgPSBwYXNzLnNoYWRlck9iamVjdDtcblxuXHRcdGlmIChzaGFkZXJPYmplY3Quc2NlbmVNYXRyaXhJbmRleCA+PSAwKSB7XG5cdFx0XHRyZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5nZXRSZW5kZXJTY2VuZVRyYW5zZm9ybShjYW1lcmEpLmNvcHlSYXdEYXRhVG8oc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YSwgc2hhZGVyT2JqZWN0LnNjZW5lTWF0cml4SW5kZXgsIHRydWUpO1xuXHRcdFx0dmlld1Byb2plY3Rpb24uY29weVJhd0RhdGFUbyhzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4LCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG1hdHJpeDNEOk1hdHJpeDNEID0gTWF0cml4M0RVdGlscy5DQUxDVUxBVElPTl9NQVRSSVg7XG5cblx0XHRcdG1hdHJpeDNELmNvcHlGcm9tKHJlbmRlcmFibGUuc291cmNlRW50aXR5LmdldFJlbmRlclNjZW5lVHJhbnNmb3JtKGNhbWVyYSkpO1xuXHRcdFx0bWF0cml4M0QuYXBwZW5kKHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdFx0bWF0cml4M0QuY29weVJhd0RhdGFUbyhzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4LCB0cnVlKTtcblx0XHR9XG5cblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0O1xuXG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgMCwgc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YSwgc2hhZGVyT2JqZWN0Lm51bVVzZWRWZXJ0ZXhDb25zdGFudHMpO1xuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShDb250ZXh0R0xQcm9ncmFtVHlwZS5GUkFHTUVOVCwgMCwgc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3QubnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzKTtcblxuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoY29udGV4dC5nZXRJbmRleEJ1ZmZlcihyZW5kZXJhYmxlLmdldEluZGV4RGF0YSgpKSwgMCwgcmVuZGVyYWJsZS5udW1UcmlhbmdsZXMpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFRyaWFuZ2xlTWF0ZXJpYWxCYXNlOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGVtYXRlcmlhbGJhc2UudHMiXSwibmFtZXMiOlsiVHJpYW5nbGVNYXRlcmlhbEJhc2UiLCJUcmlhbmdsZU1hdGVyaWFsQmFzZS5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlTWF0ZXJpYWxCYXNlLl9pR2V0VmVydGV4Q29kZSIsIlRyaWFuZ2xlTWF0ZXJpYWxCYXNlLl9pUmVuZGVyUGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxhQUFhLFdBQWMsb0NBQW9DLENBQUMsQ0FBQztBQUd4RSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFPdEYsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBTXhGLElBQU8sbUJBQW1CLFdBQWEsa0RBQWtELENBQUMsQ0FBQztBQUUzRixBQUlBOzs7R0FERztJQUNHLG9CQUFvQjtJQUFTQSxVQUE3QkEsb0JBQW9CQSxVQUE0QkE7SUFBdERBLFNBQU1BLG9CQUFvQkE7UUFBU0MsOEJBQW1CQTtJQTBEdERBLENBQUNBO0lBeERPRCw4Q0FBZUEsR0FBdEJBLFVBQXVCQSxZQUE2QkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUxSEUsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLEFBQ0FBLGdDQURnQ0E7WUFDNUJBLFFBQVFBLEdBQXlCQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUVBLGVBQWVBLENBQUNBLG9CQUFvQkEsR0FBR0EsZUFBZUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFFcEpBLEFBQ0FBLGtEQURrREE7WUFDOUNBLGFBQWFBLEdBQXlCQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ2hGQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ3RDQSxhQUFhQSxDQUFDQSxxQkFBcUJBLEVBQUVBLENBQUNBO1FBQ3RD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QUFvQkEsQ0FBQ0EsUUFBUUEsRUFBRUEsQ0FBQ0EsRUFBRUEsWUFBWUEsQ0FBQ0Esb0JBQW9CQSxFQUFFQSxZQUFZQSxDQUFDQSx3QkFBd0JBLENBQUNBLENBQUNBO1FBRWpKQSxPQUFPQSxDQUFDQSxjQUFjQSxDQUFDQSxDQUFDQSxFQUFFQSxVQUFVQSxDQUFDQSxhQUFhQSxDQUFDQSxtQkFBbUJBLENBQUNBLGFBQWFBLENBQUNBLEVBQUVBLFVBQVVBLENBQUNBLGVBQWVBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsRUFBRUEsbUJBQW1CQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUMzTEEsT0FBT0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsVUFBVUEsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsVUFBVUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0E7SUFDdEdBLENBQUNBO0lBQ0ZILDJCQUFDQTtBQUFEQSxDQTFEQSxBQTBEQ0EsRUExRGtDLG1CQUFtQixFQTBEckQ7QUFFRCxBQUE4QixpQkFBckIsb0JBQW9CLENBQUMiLCJmaWxlIjoibWF0ZXJpYWxzL1RyaWFuZ2xlTWF0ZXJpYWxCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBNYXRyaXhcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXhcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBDb250ZXh0R0xQcm9ncmFtVHlwZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFByb2dyYW1UeXBlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuXG4vKipcbiAqIENvbXBpbGVkUGFzcyBmb3JtcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgZGVmYXVsdCBjb21waWxlZCBwYXNzIG1hdGVyaWFscyBwcm92aWRlZCBieSBBd2F5M0QsXG4gKiB1c2luZyBtYXRlcmlhbCBtZXRob2RzIHRvIGRlZmluZSB0aGVpciBhcHBlYXJhbmNlLlxuICovXG5jbGFzcyBUcmlhbmdsZU1hdGVyaWFsQmFzZSBleHRlbmRzIFN0YWdlR0xNYXRlcmlhbEJhc2Vcbntcblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHQvL2dldCB0aGUgcHJvamVjdGlvbiBjb29yZGluYXRlc1xuXHRcdHZhciBwb3NpdGlvbjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSAoc2hhZGVyT2JqZWN0Lmdsb2JhbFBvc0RlcGVuZGVuY2llcyA+IDApPyBzaGFyZWRSZWdpc3RlcnMuZ2xvYmFsUG9zaXRpb25WZXJ0ZXggOiBzaGFyZWRSZWdpc3RlcnMubG9jYWxQb3NpdGlvbjtcblxuXHRcdC8vcmVzZXJ2aW5nIHZlcnRleCBjb25zdGFudHMgZm9yIHByb2plY3Rpb24gbWF0cml4XG5cdFx0dmFyIHZpZXdNYXRyaXhSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdpc3RlckNhY2hlLmdldEZyZWVWZXJ0ZXhDb25zdGFudCgpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4ID0gdmlld01hdHJpeFJlZy5pbmRleCo0O1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5wcm9qZWN0aW9uRGVwZW5kZW5jaWVzID4gMCkge1xuXHRcdFx0c2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZhcnlpbmcoKTtcblx0XHRcdHZhciB0ZW1wOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleFZlY3RvclRlbXAoKTtcblx0XHRcdGNvZGUgKz0gXCJtNDQgXCIgKyB0ZW1wICsgXCIsIFwiICsgcG9zaXRpb24gKyBcIiwgXCIgKyB2aWV3TWF0cml4UmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwibW92IFwiICsgc2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCArIFwiLCBcIiArIHRlbXAgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtb3Ygb3AsIFwiICsgdGVtcCArIFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvZGUgKz0gXCJtNDQgb3AsIFwiICsgcG9zaXRpb24gKyBcIiwgXCIgKyB2aWV3TWF0cml4UmVnICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pUmVuZGVyUGFzcyhwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHN1cGVyLl9pUmVuZGVyUGFzcyhwYXNzLCByZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cblx0XHR2YXIgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UgPSBwYXNzLnNoYWRlck9iamVjdDtcblxuXHRcdGlmIChzaGFkZXJPYmplY3Quc2NlbmVNYXRyaXhJbmRleCA+PSAwKSB7XG5cdFx0XHRyZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5nZXRSZW5kZXJTY2VuZVRyYW5zZm9ybShjYW1lcmEpLmNvcHlSYXdEYXRhVG8oc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YSwgc2hhZGVyT2JqZWN0LnNjZW5lTWF0cml4SW5kZXgsIHRydWUpO1xuXHRcdFx0dmlld1Byb2plY3Rpb24uY29weVJhd0RhdGFUbyhzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4LCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG1hdHJpeDNEOk1hdHJpeDNEID0gTWF0cml4M0RVdGlscy5DQUxDVUxBVElPTl9NQVRSSVg7XG5cblx0XHRcdG1hdHJpeDNELmNvcHlGcm9tKHJlbmRlcmFibGUuc291cmNlRW50aXR5LmdldFJlbmRlclNjZW5lVHJhbnNmb3JtKGNhbWVyYSkpO1xuXHRcdFx0bWF0cml4M0QuYXBwZW5kKHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdFx0bWF0cml4M0QuY29weVJhd0RhdGFUbyhzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3Qudmlld01hdHJpeEluZGV4LCB0cnVlKTtcblx0XHR9XG5cblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0O1xuXG5cdFx0Y29udGV4dC5zZXRQcm9ncmFtQ29uc3RhbnRzRnJvbUFycmF5KENvbnRleHRHTFByb2dyYW1UeXBlLlZFUlRFWCwgMCwgc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YSwgc2hhZGVyT2JqZWN0Lm51bVVzZWRWZXJ0ZXhDb25zdGFudHMpO1xuXHRcdGNvbnRleHQuc2V0UHJvZ3JhbUNvbnN0YW50c0Zyb21BcnJheShDb250ZXh0R0xQcm9ncmFtVHlwZS5GUkFHTUVOVCwgMCwgc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhLCBzaGFkZXJPYmplY3QubnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzKTtcblxuXHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIoMCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fRk9STUFUKTtcblx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoY29udGV4dC5nZXRJbmRleEJ1ZmZlcihyZW5kZXJhYmxlLmdldEluZGV4RGF0YSgpKSwgMCwgcmVuZGVyYWJsZS5udW1UcmlhbmdsZXMpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFRyaWFuZ2xlTWF0ZXJpYWxCYXNlOyJdfQ== \ No newline at end of file diff --git a/lib/materials/TriangleMaterialBase.ts b/lib/materials/TriangleMaterialBase.ts index 5eed0ca0..735ad5b5 100644 --- a/lib/materials/TriangleMaterialBase.ts +++ b/lib/materials/TriangleMaterialBase.ts @@ -6,12 +6,12 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); diff --git a/lib/materials/TriangleMethodMaterial.js b/lib/materials/TriangleMethodMaterial.js index 59a6a149..53393610 100755 --- a/lib/materials/TriangleMethodMaterial.js +++ b/lib/materials/TriangleMethodMaterial.js @@ -8,7 +8,7 @@ var ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); var Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); var BlendMode = require("awayjs-display/lib/base/BlendMode"); var StaticLightPicker = require("awayjs-display/lib/materials/lightpickers/StaticLightPicker"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); var AmbientBasicMethod = require("awayjs-stagegl/lib/materials/methods/AmbientBasicMethod"); var DiffuseBasicMethod = require("awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod"); var NormalBasicMethod = require("awayjs-stagegl/lib/materials/methods/NormalBasicMethod"); @@ -606,4 +606,4 @@ var TriangleMethodMaterial = (function (_super) { })(TriangleMaterialBase); module.exports = TriangleMethodMaterial; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGVtZXRob2RtYXRlcmlhbC50cyJdLCJuYW1lcyI6WyJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubWF0ZXJpYWxNb2RlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5kZXB0aENvbXBhcmVNb2RlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbHBoYSIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuY29sb3JUcmFuc2Zvcm0iLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VUZXh0dXJlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbWJpZW50TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5zaGFkb3dNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnNwZWN1bGFyTWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5ub3JtYWxNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmFkZEVmZmVjdE1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubnVtRWZmZWN0TWV0aG9kcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaGFzRWZmZWN0TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5nZXRFZmZlY3RNZXRob2RBdCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuYWRkRWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnJlbW92ZUVmZmVjdE1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubm9ybWFsTWFwIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5zcGVjdWxhck1hcCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuZ2xvc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmFtYmllbnQiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnNwZWN1bGFyIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbWJpZW50Q29sb3IiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuc3BlY3VsYXJDb2xvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuYWxwaGFCbGVuZGluZyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuX2lVcGRhdGVNYXRlcmlhbCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdFBhc3NlcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuc2V0QmxlbmRBbmRDb21wYXJlTW9kZXMiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmluaXRDYXN0ZXJMaWdodFBhc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnJlbW92ZUNhc3RlckxpZ2h0UGFzcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdE5vbkNhc3RlckxpZ2h0UGFzc2VzIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5yZW1vdmVOb25DYXN0ZXJMaWdodFBhc3NlcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwucmVtb3ZlRWZmZWN0UGFzcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdEVmZmVjdFBhc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLm51bUxpZ2h0cyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubnVtTm9uQ2FzdGVycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxjQUFjLFdBQWMscUNBQXFDLENBQUMsQ0FBQztBQUMxRSxJQUFPLGFBQWEsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTVFLElBQU8sU0FBUyxXQUFlLG1DQUFtQyxDQUFDLENBQUM7QUFFcEUsSUFBTyxpQkFBaUIsV0FBYSw2REFBNkQsQ0FBQyxDQUFDO0FBR3BHLElBQU8sb0JBQW9CLFdBQWEsc0RBQXNELENBQUMs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QUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQTtZQUNyREEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDakVBLENBQUNBO1FBRURBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLGtCQUFrQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7WUFFbENBLEFBRUFBLHFGQUZxRkE7WUFDckZBLGlDQUFpQ0E7WUFDakNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzVCQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGdCQUFnQkEsR0FBR0EsZ0JBQWdCQSxDQUFDQTtnQkFDbEVBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7Z0JBQzdEQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtnQkFDeEVBLGtCQUFrQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDeEJBLENBQUNBO1lBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLGtCQUFrQkEsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxNQUFNQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQTtnQkFDcEZBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxnQkFBZ0JBLENBQUNBO2dCQUNsRUEsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxDQUFDQSxDQUFD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QUdBLENBQUNBLENBQUNBO1FBQzVPQSxDQUFDQTs7O09BQUFwQztJQUtEQSxzQkFBWUEsaURBQWFBO1FBSHpCQTs7V0FFR0E7YUFDSEE7WUFFQ3FDLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLEdBQUVBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLGNBQWNBLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDaEpBLENBQUNBOzs7T0FBQXJDO0lBQ0ZBLDZCQUFDQTtBQUFEQSxDQTdxQkEsQUE2cUJDQSxFQTdxQm9DLG9CQUFvQixFQTZxQnhEO0FBRUQsQUFBZ0MsaUJBQXZCLHNCQUFzQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBDb2xvclRyYW5zZm9ybVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vQ29sb3JUcmFuc2Zvcm1cIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBCbGVuZE1vZGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvQmxlbmRNb2RlXCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgU3RhdGljTGlnaHRQaWNrZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL2xpZ2h0cGlja2Vycy9TdGF0aWNMaWdodFBpY2tlclwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQ29tcGFyZU1vZGVcIik7XG5pbXBvcnQgQW1iaWVudEJhc2ljTWV0aG9kXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0FtYmllbnRCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBEaWZmdXNlQmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRGlmZnVzZUJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IEVmZmVjdE1ldGhvZEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9FZmZlY3RNZXRob2RCYXNlXCIpO1xuaW1wb3J0IE5vcm1hbEJhc2ljTWV0aG9kXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL05vcm1hbEJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IFNoYWRvd01hcE1ldGhvZEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvU2hhZG93TWFwTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBTcGVjdWxhckJhc2ljTWV0aG9kXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NwZWN1bGFyQmFzaWNNZXRob2RcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzTW9kZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzTW9kZVwiKTtcbmltcG9ydCBUcmlhbmdsZU1ldGhvZFBhc3NcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9UcmlhbmdsZU1ldGhvZFBhc3NcIik7XG5pbXBvcnQgVHJpYW5nbGVNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9UcmlhbmdsZU1hdGVyaWFsTW9kZVwiKTtcblxuLyoqXG4gKiBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsIGZvcm1zIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHRoZSBkZWZhdWx0IHNoYWRlZCBtYXRlcmlhbHMgcHJvdmlkZWQgYnkgU3RhZ2UsXG4gKiB1c2luZyBtYXRlcmlhbCBtZXRob2RzIHRvIGRlZmluZSB0aGVpciBhcHBlYXJhbmNlLlxuICovXG5jbGFzcyBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsIGV4dGVuZHMgVHJpYW5nbGVNYXRlcmlhbEJhc2Vcbntcblx0cHJpdmF0ZSBfYWxwaGFCbGVuZGluZzpib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgX2FscGhhOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2NvbG9yVHJhbnNmb3JtOkNvbG9yVHJhbnNmb3JtO1xuXHRwcml2YXRlIF9tYXRlcmlhbE1vZGU6c3RyaW5nO1xuXHRwcml2YXRlIF9jYXN0ZXJMaWdodFBhc3M6VHJpYW5nbGVNZXRob2RQYXNzO1xuXHRwcml2YXRlIF9ub25DYXN0ZXJMaWdodFBhc3NlczpBcnJheTxUcmlhbmdsZU1ldGhvZFBhc3M+O1xuXHRwcml2YXRlIF9zY3JlZW5QYXNzOlRyaWFuZ2xlTWV0aG9kUGFzcztcblxuXHRwcml2YXRlIF9hbWJpZW50TWV0aG9kOkFtYmllbnRCYXNpY01ldGhvZCA9IG5ldyBBbWJpZW50QmFzaWNNZXRob2QoKTtcblx0cHJpdmF0ZSBfc2hhZG93TWV0aG9kOlNoYWRvd01hcE1ldGhvZEJhc2U7XG5cdHByaXZhdGUgX2RpZmZ1c2VNZXRob2Q6RGlmZnVzZUJhc2ljTWV0aG9kID0gbmV3IERpZmZ1c2VCYXNpY01ldGhvZCgpO1xuXHRwcml2YXRlIF9ub3JtYWxNZXRob2Q6Tm9ybWFsQmFzaWNNZXRob2QgPSBuZXcgTm9ybWFsQmFzaWNNZXRob2QoKTtcblx0cHJpdmF0ZSBfc3BlY3VsYXJNZXRob2Q6U3BlY3VsYXJCYXNpY01ldGhvZCA9IG5ldyBTcGVjdWxhckJhc2ljTWV0aG9kKCk7XG5cblxuXHRwcml2YXRlIF9kZXB0aENvbXBhcmVNb2RlOnN0cmluZyA9IENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUw7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgVHJpYW5nbGVNZXRob2RNYXRlcmlhbCBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBtYXRlcmlhbCdzIGFsYmVkbyBjb2xvci5cblx0ICogQHBhcmFtIHNtb290aCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgZmlsdGVyZWQgd2hlbiBzYW1wbGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuXHQgKiBAcGFyYW0gcmVwZWF0IEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSB0aWxlZCB3aGVuIHNhbXBsZWQuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHQgKiBAcGFyYW0gbWlwbWFwIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbnkgdXNlZCB0ZXh0dXJlcyBzaG91bGQgdXNlIG1pcG1hcHBpbmcuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IodGV4dHVyZT86VGV4dHVyZTJEQmFzZSwgc21vb3RoPzpib29sZWFuLCByZXBlYXQ/OmJvb2xlYW4sIG1pcG1hcD86Ym9vbGVhbik7XG5cdGNvbnN0cnVjdG9yKGNvbG9yPzpudW1iZXIsIGFscGhhPzpudW1iZXIpO1xuXHRjb25zdHJ1Y3Rvcih0ZXh0dXJlQ29sb3I6YW55ID0gbnVsbCwgc21vb3RoQWxwaGE6YW55ID0gbnVsbCwgcmVwZWF0OmJvb2xlYW4gPSBmYWxzZSwgbWlwbWFwOmJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9tYXRlcmlhbE1vZGUgPSBUcmlhbmdsZU1hdGVyaWFsTW9kZS5TSU5HTEVfUEFTUztcblxuXHRcdGlmICh0ZXh0dXJlQ29sb3IgaW5zdGFuY2VvZiBUZXh0dXJlMkRCYXNlKSB7XG5cdFx0XHR0aGlzLnRleHR1cmUgPSA8VGV4dHVyZTJEQmFzZT4gdGV4dHVyZUNvbG9yO1xuXG5cdFx0XHR0aGlzLnNtb290aCA9IChzbW9vdGhBbHBoYSA9PSBudWxsKT8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXBlYXQgPSByZXBlYXQ7XG5cdFx0XHR0aGlzLm1pcG1hcCA9IG1pcG1hcDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb2xvciA9ICh0ZXh0dXJlQ29sb3IgPT0gbnVsbCk/IDB4RkZGRkZGIDogTnVtYmVyKHRleHR1cmVDb2xvcik7XG5cdFx0XHR0aGlzLmFscGhhID0gKHNtb290aEFscGhhID09IG51bGwpPyAxIDogTnVtYmVyKHNtb290aEFscGhhKTtcblx0XHR9XG5cdH1cblxuXG5cdHB1YmxpYyBnZXQgbWF0ZXJpYWxNb2RlKCk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbWF0ZXJpYWxNb2RlO1xuXHR9XG5cblx0cHVibGljIHNldCBtYXRlcmlhbE1vZGUodmFsdWU6c3RyaW5nKVxuXHR7XG5cdFx0aWYgKHRoaXMuX21hdGVyaWFsTW9kZSA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX21hdGVyaWFsTW9kZSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVwdGggY29tcGFyZSBtb2RlIHVzZWQgdG8gcmVuZGVyIHRoZSByZW5kZXJhYmxlcyB1c2luZyB0aGlzIG1hdGVyaWFsLlxuXHQgKlxuXHQgKiBAc2VlIGF3YXkuc3RhZ2VnbC5Db250ZXh0R0xDb21wYXJlTW9kZVxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0IGRlcHRoQ29tcGFyZU1vZGUoKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiB0aGlzLl9kZXB0aENvbXBhcmVNb2RlO1xuXHR9XG5cblx0cHVibGljIHNldCBkZXB0aENvbXBhcmVNb2RlKHZhbHVlOnN0cmluZylcblx0e1xuXHRcdGlmICh0aGlzLl9kZXB0aENvbXBhcmVNb2RlID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZGVwdGhDb21wYXJlTW9kZSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYWxwaGEgb2YgdGhlIHN1cmZhY2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFscGhhKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYWxwaGE7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFscGhhKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh2YWx1ZSA+IDEpXG5cdFx0XHR2YWx1ZSA9IDE7XG5cdFx0ZWxzZSBpZiAodmFsdWUgPCAwKVxuXHRcdFx0dmFsdWUgPSAwO1xuXG5cdFx0aWYgKHRoaXMuX2FscGhhID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fYWxwaGEgPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PSBudWxsKVxuXHRcdFx0dGhpcy5fY29sb3JUcmFuc2Zvcm0gPSBuZXcgQ29sb3JUcmFuc2Zvcm0oKTtcblxuXHRcdHRoaXMuX2NvbG9yVHJhbnNmb3JtLmFscGhhTXVsdGlwbGllciA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ29sb3JUcmFuc2Zvcm0gb2JqZWN0IHRvIHRyYW5zZm9ybSB0aGUgY29sb3VyIG9mIHRoZSBtYXRlcmlhbCB3aXRoLiBEZWZhdWx0cyB0byBudWxsLlxuXHQgKi9cblx0cHVibGljIGdldCBjb2xvclRyYW5zZm9ybSgpOkNvbG9yVHJhbnNmb3JtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc2NyZWVuUGFzcy5jb2xvclRyYW5zZm9ybTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgY29sb3JUcmFuc2Zvcm0odmFsdWU6Q29sb3JUcmFuc2Zvcm0pXG5cdHtcblx0XHR0aGlzLl9zY3JlZW5QYXNzLmNvbG9yVHJhbnNmb3JtID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHRleHR1cmUgb2JqZWN0IHRvIHVzZSBmb3IgdGhlIGFtYmllbnQgY29sb3VyLlxuXHQgKi9cblx0cHVibGljIGdldCBkaWZmdXNlVGV4dHVyZSgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlTWV0aG9kLnRleHR1cmU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VUZXh0dXJlKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlTWV0aG9kLnRleHR1cmUgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGFtYmllbnQgbGlnaHRpbmcgY29udHJpYnV0aW9uLiBEZWZhdWx0cyB0byBBbWJpZW50QmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFtYmllbnRNZXRob2QoKTpBbWJpZW50QmFzaWNNZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbWJpZW50TWV0aG9kO1xuXHR9XG5cblx0cHVibGljIHNldCBhbWJpZW50TWV0aG9kKHZhbHVlOkFtYmllbnRCYXNpY01ldGhvZClcblx0e1xuXHRcdGlmICh0aGlzLl9hbWJpZW50TWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHZhbHVlICYmIHRoaXMuX2FtYmllbnRNZXRob2QpXG5cdFx0XHR2YWx1ZS5jb3B5RnJvbSh0aGlzLl9hbWJpZW50TWV0aG9kKTtcblxuXHRcdHRoaXMuX2FtYmllbnRNZXRob2QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlU2NyZWVuUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB1c2VkIHRvIHJlbmRlciBzaGFkb3dzIGNhc3Qgb24gdGhpcyBzdXJmYWNlLCBvciBudWxsIGlmIG5vIHNoYWRvd3MgYXJlIHRvIGJlIHJlbmRlcmVkLiBEZWZhdWx0cyB0byBudWxsLlxuXHQgKi9cblx0cHVibGljIGdldCBzaGFkb3dNZXRob2QoKTpTaGFkb3dNYXBNZXRob2RCYXNlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93TWV0aG9kO1xuXHR9XG5cblx0cHVibGljIHNldCBzaGFkb3dNZXRob2QodmFsdWU6U2hhZG93TWFwTWV0aG9kQmFzZSlcblx0e1xuXHRcdGlmICh0aGlzLl9zaGFkb3dNZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fc2hhZG93TWV0aG9kKVxuXHRcdFx0dmFsdWUuY29weUZyb20odGhpcy5fc2hhZG93TWV0aG9kKTtcblxuXHRcdHRoaXMuX3NoYWRvd01ldGhvZCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGRpZmZ1c2UgbGlnaHRpbmcgY29udHJpYnV0aW9uLiBEZWZhdWx0cyB0byBEaWZmdXNlQmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VNZXRob2QoKTpEaWZmdXNlQmFzaWNNZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlTWV0aG9kO1xuXHR9XG5cblx0cHVibGljIHNldCBkaWZmdXNlTWV0aG9kKHZhbHVlOkRpZmZ1c2VCYXNpY01ldGhvZClcblx0e1xuXHRcdGlmICh0aGlzLl9kaWZmdXNlTWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHZhbHVlICYmIHRoaXMuX2RpZmZ1c2VNZXRob2QpXG5cdFx0XHR2YWx1ZS5jb3B5RnJvbSh0aGlzLl9kaWZmdXNlTWV0aG9kKTtcblxuXHRcdHRoaXMuX2RpZmZ1c2VNZXRob2QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlU2NyZWVuUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHByb3ZpZGVzIHRoZSBzcGVjdWxhciBsaWdodGluZyBjb250cmlidXRpb24uIERlZmF1bHRzIHRvIFNwZWN1bGFyQmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNwZWN1bGFyTWV0aG9kKCk6U3BlY3VsYXJCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyTWV0aG9kO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhck1ldGhvZCh2YWx1ZTpTcGVjdWxhckJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NwZWN1bGFyTWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHZhbHVlICYmIHRoaXMuX3NwZWN1bGFyTWV0aG9kKVxuXHRcdFx0dmFsdWUuY29weUZyb20odGhpcy5fc3BlY3VsYXJNZXRob2QpO1xuXG5cdFx0dGhpcy5fc3BlY3VsYXJNZXRob2QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlU2NyZWVuUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwZXItcGl4ZWwgbm9ybWFscy4gRGVmYXVsdHMgdG8gTm9ybWFsQmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG5vcm1hbE1ldGhvZCgpOk5vcm1hbEJhc2ljTWV0aG9kXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbm9ybWFsTWV0aG9kO1xuXHR9XG5cblx0cHVibGljIHNldCBub3JtYWxNZXRob2QodmFsdWU6Tm9ybWFsQmFzaWNNZXRob2QpXG5cdHtcblx0XHRpZiAodGhpcy5fbm9ybWFsTWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHZhbHVlICYmIHRoaXMuX25vcm1hbE1ldGhvZClcblx0XHRcdHZhbHVlLmNvcHlGcm9tKHRoaXMuX25vcm1hbE1ldGhvZCk7XG5cblx0XHR0aGlzLl9ub3JtYWxNZXRob2QgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlU2NyZWVuUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBhbiBcImVmZmVjdFwiIHNoYWRpbmcgbWV0aG9kIHRvIHRoZSBzaGFkZXIuIEVmZmVjdCBtZXRob2RzIGFyZSB0aG9zZSB0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhlIGxpZ2h0aW5nXG5cdCAqIGJ1dCBtb2R1bGF0ZSB0aGUgc2hhZGVkIGNvbG91ciwgdXNlZCBmb3IgZm9nLCBvdXRsaW5lcywgZXRjLiBUaGUgbWV0aG9kIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVzdWx0IG9mIHRoZVxuXHQgKiBtZXRob2RzIGFkZGVkIHByaW9yLlxuXHQgKi9cblx0cHVibGljIGFkZEVmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSlcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzID09IG51bGwpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzID0gbmV3IFRyaWFuZ2xlTWV0aG9kUGFzcygpO1xuXG5cdFx0dGhpcy5fc2NyZWVuUGFzcy5hZGRFZmZlY3RNZXRob2QobWV0aG9kKTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlU2NyZWVuUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBcImVmZmVjdFwiIG1ldGhvZHMgYWRkZWQgdG8gdGhlIG1hdGVyaWFsLlxuXHQgKi9cblx0cHVibGljIGdldCBudW1FZmZlY3RNZXRob2RzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc2NyZWVuUGFzcz8gdGhpcy5fc2NyZWVuUGFzcy5udW1FZmZlY3RNZXRob2RzIDogMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBRdWVyaWVzIHdoZXRoZXIgYSBnaXZlbiBlZmZlY3QgbWV0aG9kIHdhcyBhZGRlZCB0byB0aGUgbWF0ZXJpYWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBiZSBxdWVyaWVkLlxuXHQgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIG1hdGVyaWFsLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaGFzRWZmZWN0TWV0aG9kKG1ldGhvZDpFZmZlY3RNZXRob2RCYXNlKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc2NyZWVuUGFzcz8gdGhpcy5fc2NyZWVuUGFzcy5oYXNFZmZlY3RNZXRob2QobWV0aG9kKSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGhvZCBhZGRlZCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdCAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIG1ldGhvZCB0byByZXRyaWV2ZS5cblx0ICogQHJldHVybiBUaGUgbWV0aG9kIGF0IHRoZSBnaXZlbiBpbmRleC5cblx0ICovXG5cdHB1YmxpYyBnZXRFZmZlY3RNZXRob2RBdChpbmRleDpudW1iZXIpOkVmZmVjdE1ldGhvZEJhc2Vcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzID09IG51bGwpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLl9zY3JlZW5QYXNzLmdldEVmZmVjdE1ldGhvZEF0KGluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGVmZmVjdCBtZXRob2QgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBhbW9uZ3N0IHRoZSBtZXRob2RzIGFscmVhZHkgYWRkZWQgdG8gdGhlIG1hdGVyaWFsLiBFZmZlY3Rcblx0ICogbWV0aG9kcyBhcmUgdGhvc2UgdGhhdCBkbyBub3QgaW5mbHVlbmNlIHRoZSBsaWdodGluZyBidXQgbW9kdWxhdGUgdGhlIHNoYWRlZCBjb2xvdXIsIHVzZWQgZm9yIGZvZywgb3V0bGluZXMsXG5cdCAqIGV0Yy4gVGhlIG1ldGhvZCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgbWV0aG9kcyB3aXRoIGEgbG93ZXIgaW5kZXguXG5cdCAqL1xuXHRwdWJsaWMgYWRkRWZmZWN0TWV0aG9kQXQobWV0aG9kOkVmZmVjdE1ldGhvZEJhc2UsIGluZGV4Om51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzID09IG51bGwpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzID0gbmV3IFRyaWFuZ2xlTWV0aG9kUGFzcygpO1xuXG5cdFx0dGhpcy5fc2NyZWVuUGFzcy5hZGRFZmZlY3RNZXRob2RBdChtZXRob2QsIGluZGV4KTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBlZmZlY3QgbWV0aG9kIGZyb20gdGhlIG1hdGVyaWFsLlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcmVtb3ZlZC5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVFZmZlY3RNZXRob2QobWV0aG9kOkVmZmVjdE1ldGhvZEJhc2UpXG5cdHtcblx0XHRpZiAodGhpcy5fc2NyZWVuUGFzcyA9PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fc2NyZWVuUGFzcy5yZW1vdmVFZmZlY3RNZXRob2QobWV0aG9kKTtcblxuXHRcdC8vIHJlY29uc2lkZXJcblx0XHRpZiAodGhpcy5fc2NyZWVuUGFzcy5udW1FZmZlY3RNZXRob2RzID09IDApXG5cdFx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBub3JtYWwgbWFwIHRvIG1vZHVsYXRlIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHN1cmZhY2UgZm9yIGVhY2ggdGV4ZWwuIFRoZSBkZWZhdWx0IG5vcm1hbCBtZXRob2QgZXhwZWN0c1xuXHQgKiB0YW5nZW50LXNwYWNlIG5vcm1hbCBtYXBzLCBidXQgb3RoZXJzIGNvdWxkIGV4cGVjdCBvYmplY3Qtc3BhY2UgbWFwcy5cblx0ICovXG5cdHB1YmxpYyBnZXQgbm9ybWFsTWFwKCk6VGV4dHVyZTJEQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX25vcm1hbE1ldGhvZC5ub3JtYWxNYXA7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG5vcm1hbE1hcCh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHR7XG5cdFx0dGhpcy5fbm9ybWFsTWV0aG9kLm5vcm1hbE1hcCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgc3BlY3VsYXIgbWFwIHRoYXQgZGVmaW5lcyB0aGUgc3RyZW5ndGggb2Ygc3BlY3VsYXIgcmVmbGVjdGlvbnMgZm9yIGVhY2ggdGV4ZWwgaW4gdGhlIHJlZCBjaGFubmVsLFxuXHQgKiBhbmQgdGhlIGdsb3NzIGZhY3RvciBpbiB0aGUgZ3JlZW4gY2hhbm5lbC4gWW91IGNhbiB1c2UgU3BlY3VsYXJCaXRtYXBUZXh0dXJlIGlmIHlvdSB3YW50IHRvIGVhc2lseSBzZXRcblx0ICogc3BlY3VsYXIgYW5kIGdsb3NzIG1hcHMgZnJvbSBncmF5c2NhbGUgaW1hZ2VzLCBidXQgY29ycmVjdGx5IGF1dGhvcmVkIGltYWdlcyBhcmUgcHJlZmVycmVkLlxuXHQgKi9cblx0cHVibGljIGdldCBzcGVjdWxhck1hcCgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zcGVjdWxhck1ldGhvZC50ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhck1hcCh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHR7XG5cdFx0dGhpcy5fc3BlY3VsYXJNZXRob2QudGV4dHVyZSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBnbG9zc2luZXNzIG9mIHRoZSBtYXRlcmlhbCAoc2hhcnBuZXNzIG9mIHRoZSBzcGVjdWxhciBoaWdobGlnaHQpLlxuXHQgKi9cblx0cHVibGljIGdldCBnbG9zcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyTWV0aG9kLmdsb3NzO1xuXHR9XG5cblx0cHVibGljIHNldCBnbG9zcyh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9zcGVjdWxhck1ldGhvZC5nbG9zcyA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYW1iaWVudCByZWZsZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBhbWJpZW50KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYW1iaWVudE1ldGhvZC5hbWJpZW50O1xuXHR9XG5cblx0cHVibGljIHNldCBhbWJpZW50KHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2FtYmllbnRNZXRob2QuYW1iaWVudCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBvdmVyYWxsIHN0cmVuZ3RoIG9mIHRoZSBzcGVjdWxhciByZWZsZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBzcGVjdWxhcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyTWV0aG9kLnNwZWN1bGFyO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhcih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9zcGVjdWxhck1ldGhvZC5zcGVjdWxhciA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvdXIgb2YgdGhlIGFtYmllbnQgcmVmbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW1iaWVudENvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZU1ldGhvZC5hbWJpZW50Q29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFtYmllbnRDb2xvcih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlTWV0aG9kLmFtYmllbnRDb2xvciA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvdXIgb2YgdGhlIGRpZmZ1c2UgcmVmbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZUNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZU1ldGhvZC5kaWZmdXNlQ29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VDb2xvcih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlTWV0aG9kLmRpZmZ1c2VDb2xvciA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvdXIgb2YgdGhlIHNwZWN1bGFyIHJlZmxlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNwZWN1bGFyQ29sb3IoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zcGVjdWxhck1ldGhvZC5zcGVjdWxhckNvbG9yO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhckNvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX3NwZWN1bGFyTWV0aG9kLnNwZWN1bGFyQ29sb3IgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIG1hdGVyaWFsIGhhcyB0cmFuc3BhcmVuY3kuIElmIGJpbmFyeSB0cmFuc3BhcmVuY3kgaXMgc3VmZmljaWVudCwgZm9yXG5cdCAqIGV4YW1wbGUgd2hlbiB1c2luZyB0ZXh0dXJlcyBvZiBmb2xpYWdlLCBjb25zaWRlciB1c2luZyBhbHBoYVRocmVzaG9sZCBpbnN0ZWFkLlxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0IGFscGhhQmxlbmRpbmcoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYWxwaGFCbGVuZGluZztcblx0fVxuXG5cdHB1YmxpYyBzZXQgYWxwaGFCbGVuZGluZyh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FscGhhQmxlbmRpbmcgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbHBoYUJsZW5kaW5nID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lVcGRhdGVNYXRlcmlhbCgpXG5cdHtcblx0XHRpZiAodGhpcy5fcFNjcmVlblBhc3Nlc0ludmFsaWQpIHtcblx0XHRcdC8vVXBkYXRlcyBzY3JlZW4gcGFzc2VzIHdoZW4gdGhleSB3ZXJlIGZvdW5kIHRvIGJlIGludmFsaWQuXG5cdFx0XHR0aGlzLl9wU2NyZWVuUGFzc2VzSW52YWxpZCA9IGZhbHNlO1xuXG5cdFx0XHR0aGlzLmluaXRQYXNzZXMoKTtcblxuXHRcdFx0dGhpcy5zZXRCbGVuZEFuZENvbXBhcmVNb2RlcygpO1xuXG5cdFx0XHR0aGlzLl9wQ2xlYXJTY3JlZW5QYXNzZXMoKTtcblxuXHRcdFx0aWYgKHRoaXMuX21hdGVyaWFsTW9kZSA9PSBUcmlhbmdsZU1hdGVyaWFsTW9kZS5NVUxUSV9QQVNTKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9jYXN0ZXJMaWdodFBhc3MpXG5cdFx0XHRcdFx0dGhpcy5fcEFkZFNjcmVlblBhc3ModGhpcy5fY2FzdGVyTGlnaHRQYXNzKTtcblxuXHRcdFx0XHRpZiAodGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMpXG5cdFx0XHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdFx0XHR0aGlzLl9wQWRkU2NyZWVuUGFzcyh0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlc1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzKVxuXHRcdFx0XHR0aGlzLl9wQWRkU2NyZWVuUGFzcyh0aGlzLl9zY3JlZW5QYXNzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYWxsIHRoZSBwYXNzZXMgYW5kIHRoZWlyIGRlcGVuZGVudCBwYXNzZXMuXG5cdCAqL1xuXHRwcml2YXRlIGluaXRQYXNzZXMoKVxuXHR7XG5cdFx0Ly8gbGV0IHRoZSBlZmZlY3RzIHBhc3MgaGFuZGxlIGV2ZXJ5dGhpbmcgaWYgdGhlcmUgYXJlIG5vIGxpZ2h0cywgd2hlbiB0aGVyZSBhcmUgZWZmZWN0IG1ldGhvZHMgYXBwbGllZFxuXHRcdC8vIGFmdGVyIHNoYWRpbmcsIG9yIHdoZW4gdGhlIG1hdGVyaWFsIG1vZGUgaXMgc2luZ2xlIHBhc3MuXG5cdFx0aWYgKHRoaXMubnVtTGlnaHRzID09IDAgfHwgdGhpcy5udW1FZmZlY3RNZXRob2RzID4gMCB8fCB0aGlzLl9tYXRlcmlhbE1vZGUgPT0gVHJpYW5nbGVNYXRlcmlhbE1vZGUuU0lOR0xFX1BBU1MpXG5cdFx0XHR0aGlzLmluaXRFZmZlY3RQYXNzKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5fc2NyZWVuUGFzcylcblx0XHRcdHRoaXMucmVtb3ZlRWZmZWN0UGFzcygpO1xuXG5cdFx0Ly8gb25seSB1c2UgYSBjYXN0ZXIgbGlnaHQgcGFzcyBpZiBzaGFkb3dzIG5lZWQgdG8gYmUgcmVuZGVyZWRcblx0XHRpZiAodGhpcy5fc2hhZG93TWV0aG9kICYmIHRoaXMuX21hdGVyaWFsTW9kZSA9PSBUcmlhbmdsZU1hdGVyaWFsTW9kZS5NVUxUSV9QQVNTKVxuXHRcdFx0dGhpcy5pbml0Q2FzdGVyTGlnaHRQYXNzKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5fY2FzdGVyTGlnaHRQYXNzKVxuXHRcdFx0dGhpcy5yZW1vdmVDYXN0ZXJMaWdodFBhc3MoKTtcblxuXHRcdC8vIG9ubHkgdXNlIG5vbiBjYXN0ZXIgbGlnaHQgcGFzc2VzIGlmIHRoZXJlIGFyZSBsaWdodHMgdGhhdCBkb24ndCBjYXN0XG5cdFx0aWYgKHRoaXMubnVtTm9uQ2FzdGVycyA+IDAgJiYgdGhpcy5fbWF0ZXJpYWxNb2RlID09IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLk1VTFRJX1BBU1MpXG5cdFx0XHR0aGlzLmluaXROb25DYXN0ZXJMaWdodFBhc3NlcygpO1xuXHRcdGVsc2UgaWYgKHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzKVxuXHRcdFx0dGhpcy5yZW1vdmVOb25DYXN0ZXJMaWdodFBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdXAgdGhlIHZhcmlvdXMgYmxlbmRpbmcgbW9kZXMgZm9yIGFsbCBzY3JlZW4gcGFzc2VzLCBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgcHJldmlvdXMgcGFzc2VzLlxuXHQgKi9cblx0cHJpdmF0ZSBzZXRCbGVuZEFuZENvbXBhcmVNb2RlcygpXG5cdHtcblx0XHR2YXIgZm9yY2VTZXBhcmF0ZU1WUDpib29sZWFuID0gQm9vbGVhbih0aGlzLl9jYXN0ZXJMaWdodFBhc3MgfHwgdGhpcy5fc2NyZWVuUGFzcyk7XG5cblx0XHQvLyBjYXN0ZXIgbGlnaHQgcGFzcyBpcyBhbHdheXMgZmlyc3QgaWYgaXQgZXhpc3RzLCBoZW5jZSBpdCB1c2VzIG5vcm1hbCBibGVuZGluZ1xuXHRcdGlmICh0aGlzLl9jYXN0ZXJMaWdodFBhc3MpIHtcblx0XHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5mb3JjZVNlcGFyYXRlTVZQID0gZm9yY2VTZXBhcmF0ZU1WUDtcblx0XHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5zZXRCbGVuZE1vZGUoQmxlbmRNb2RlLk5PUk1BTCk7XG5cdFx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3MuZGVwdGhDb21wYXJlTW9kZSA9IHRoaXMuX2RlcHRoQ29tcGFyZU1vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzKSB7XG5cdFx0XHR2YXIgZmlyc3RBZGRpdGl2ZUluZGV4Om51bWJlciA9IDA7XG5cblx0XHRcdC8vIGlmIHRoZXJlJ3Mgbm8gY2FzdGVyIGxpZ2h0IHBhc3MsIHRoZSBmaXJzdCBub24gY2FzdGVyIGxpZ2h0IHBhc3Mgd2lsbCBiZSB0aGUgZmlyc3Rcblx0XHRcdC8vIGFuZCBzaG91bGQgdXNlIG5vcm1hbCBibGVuZGluZ1xuXHRcdFx0aWYgKCF0aGlzLl9jYXN0ZXJMaWdodFBhc3MpIHtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbMF0uZm9yY2VTZXBhcmF0ZU1WUCA9IGZvcmNlU2VwYXJhdGVNVlA7XG5cdFx0XHRcdHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzWzBdLnNldEJsZW5kTW9kZShCbGVuZE1vZGUuTk9STUFMKTtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbMF0uZGVwdGhDb21wYXJlTW9kZSA9IHRoaXMuX2RlcHRoQ29tcGFyZU1vZGU7XG5cdFx0XHRcdGZpcnN0QWRkaXRpdmVJbmRleCA9IDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGFsbCBsaWdodGluZyBwYXNzZXMgZm9sbG93aW5nIHRoZSBmaXJzdCBsaWdodCBwYXNzIHNob3VsZCB1c2UgYWRkaXRpdmUgYmxlbmRpbmdcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gZmlyc3RBZGRpdGl2ZUluZGV4OyBpIDwgdGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbaV0uZm9yY2VTZXBhcmF0ZU1WUCA9IGZvcmNlU2VwYXJhdGVNVlA7XG5cdFx0XHRcdHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzW2ldLnNldEJsZW5kTW9kZShCbGVuZE1vZGUuQUREKTtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbaV0uZGVwdGhDb21wYXJlTW9kZSA9IENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2Nhc3RlckxpZ2h0UGFzcyB8fCB0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcykge1xuXHRcdFx0Ly9jYW5ub3QgYmUgYmxlbmRlZCBieSBibGVuZG1vZGUgcHJvcGVydHkgaWYgbXVsdGlwYXNzIGVuYWJsZWRcblx0XHRcdHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIHRoZXJlIGFyZSBsaWdodCBwYXNzZXMsIHNvIHRoaXMgc2hvdWxkIGJlIGJsZW5kZWQgaW5cblx0XHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzKSB7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3MucGFzc01vZGUgPSBNYXRlcmlhbFBhc3NNb2RlLkVGRkVDVFM7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3MuZGVwdGhDb21wYXJlTW9kZSA9IENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUw7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3Muc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5MQVlFUik7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3MuZm9yY2VTZXBhcmF0ZU1WUCA9IGZvcmNlU2VwYXJhdGVNVlA7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuX3NjcmVlblBhc3MpIHtcblx0XHRcdHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nID0gKHRoaXMuX3BCbGVuZE1vZGUgIT0gQmxlbmRNb2RlLk5PUk1BTCB8fCB0aGlzLl9hbHBoYUJsZW5kaW5nIHx8ICh0aGlzLl9jb2xvclRyYW5zZm9ybSAmJiB0aGlzLl9jb2xvclRyYW5zZm9ybS5hbHBoYU11bHRpcGxpZXIgPCAxKSk7XG5cdFx0XHQvLyBlZmZlY3RzIHBhc3MgaXMgdGhlIG9ubHkgcGFzcywgc28gaXQgc2hvdWxkIGp1c3QgYmxlbmQgbm9ybWFsbHlcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MucGFzc01vZGUgPSBNYXRlcmlhbFBhc3NNb2RlLlNVUEVSX1NIQURFUjtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MuZGVwdGhDb21wYXJlTW9kZSA9IHRoaXMuX2RlcHRoQ29tcGFyZU1vZGU7XG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLnByZXNlcnZlQWxwaGEgPSB0aGlzLl9wUmVxdWlyZXNCbGVuZGluZztcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MuY29sb3JUcmFuc2Zvcm0gPSB0aGlzLl9jb2xvclRyYW5zZm9ybTtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3Muc2V0QmxlbmRNb2RlKCh0aGlzLl9wQmxlbmRNb2RlID09IEJsZW5kTW9kZS5OT1JNQUwgJiYgdGhpcy5fcFJlcXVpcmVzQmxlbmRpbmcpPyBCbGVuZE1vZGUuTEFZRVIgOiB0aGlzLl9wQmxlbmRNb2RlKTtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MuZm9yY2VTZXBhcmF0ZU1WUCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaW5pdENhc3RlckxpZ2h0UGFzcygpXG5cdHtcblxuXHRcdGlmICh0aGlzLl9jYXN0ZXJMaWdodFBhc3MgPT0gbnVsbClcblx0XHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcyA9IG5ldyBUcmlhbmdsZU1ldGhvZFBhc3MoTWF0ZXJpYWxQYXNzTW9kZS5MSUdIVElORyk7XG5cblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3MubGlnaHRQaWNrZXIgPSBuZXcgU3RhdGljTGlnaHRQaWNrZXIoW3RoaXMuX3NoYWRvd01ldGhvZC5jYXN0aW5nTGlnaHRdKTtcblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3Muc2hhZG93TWV0aG9kID0gdGhpcy5fc2hhZG93TWV0aG9kO1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5kaWZmdXNlTWV0aG9kID0gdGhpcy5fZGlmZnVzZU1ldGhvZDtcblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3MuYW1iaWVudE1ldGhvZCA9IHRoaXMuX2FtYmllbnRNZXRob2Q7XG5cdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzLm5vcm1hbE1ldGhvZCA9IHRoaXMuX25vcm1hbE1ldGhvZDtcblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3Muc3BlY3VsYXJNZXRob2QgPSB0aGlzLl9zcGVjdWxhck1ldGhvZDtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlQ2FzdGVyTGlnaHRQYXNzKClcblx0e1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5kaXNwb3NlKCk7XG5cdFx0dGhpcy5fcFJlbW92ZVNjcmVlblBhc3ModGhpcy5fY2FzdGVyTGlnaHRQYXNzKTtcblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3MgPSBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0Tm9uQ2FzdGVyTGlnaHRQYXNzZXMoKVxuXHR7XG5cdFx0dGhpcy5yZW1vdmVOb25DYXN0ZXJMaWdodFBhc3NlcygpO1xuXHRcdHZhciBwYXNzOlRyaWFuZ2xlTWV0aG9kUGFzcztcblx0XHR2YXIgbnVtRGlyTGlnaHRzOm51bWJlciA9IHRoaXMuX3BMaWdodFBpY2tlci5udW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHR2YXIgbnVtUG9pbnRMaWdodHM6bnVtYmVyID0gdGhpcy5fcExpZ2h0UGlja2VyLm51bVBvaW50TGlnaHRzO1xuXHRcdHZhciBudW1MaWdodFByb2JlczpudW1iZXIgPSB0aGlzLl9wTGlnaHRQaWNrZXIubnVtTGlnaHRQcm9iZXM7XG5cdFx0dmFyIGRpckxpZ2h0T2Zmc2V0Om51bWJlciA9IDA7XG5cdFx0dmFyIHBvaW50TGlnaHRPZmZzZXQ6bnVtYmVyID0gMDtcblx0XHR2YXIgcHJvYmVPZmZzZXQ6bnVtYmVyID0gMDtcblxuXHRcdGlmICghdGhpcy5fY2FzdGVyTGlnaHRQYXNzKSB7XG5cdFx0XHRudW1EaXJMaWdodHMgKz0gdGhpcy5fcExpZ2h0UGlja2VyLm51bUNhc3RpbmdEaXJlY3Rpb25hbExpZ2h0cztcblx0XHRcdG51bVBvaW50TGlnaHRzICs9IHRoaXMuX3BMaWdodFBpY2tlci5udW1DYXN0aW5nUG9pbnRMaWdodHM7XG5cdFx0fVxuXG5cdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMgPSBuZXcgQXJyYXk8VHJpYW5nbGVNZXRob2RQYXNzPigpO1xuXG5cdFx0d2hpbGUgKGRpckxpZ2h0T2Zmc2V0IDwgbnVtRGlyTGlnaHRzIHx8IHBvaW50TGlnaHRPZmZzZXQgPCBudW1Qb2ludExpZ2h0cyB8fCBwcm9iZU9mZnNldCA8IG51bUxpZ2h0UHJvYmVzKSB7XG5cdFx0XHRwYXNzID0gbmV3IFRyaWFuZ2xlTWV0aG9kUGFzcyhNYXRlcmlhbFBhc3NNb2RlLkxJR0hUSU5HKTtcblx0XHRcdHBhc3MuaW5jbHVkZUNhc3RlcnMgPSB0aGlzLl9zaGFkb3dNZXRob2QgPT0gbnVsbDtcblx0XHRcdHBhc3MuZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQgPSBkaXJMaWdodE9mZnNldDtcblx0XHRcdHBhc3MucG9pbnRMaWdodHNPZmZzZXQgPSBwb2ludExpZ2h0T2Zmc2V0O1xuXHRcdFx0cGFzcy5saWdodFByb2Jlc09mZnNldCA9IHByb2JlT2Zmc2V0O1xuXHRcdFx0cGFzcy5saWdodFBpY2tlciA9IHRoaXMuX3BMaWdodFBpY2tlcjtcblx0XHRcdHBhc3MuZGlmZnVzZU1ldGhvZCA9IHRoaXMuX2RpZmZ1c2VNZXRob2Q7XG5cdFx0XHRwYXNzLmFtYmllbnRNZXRob2QgPSB0aGlzLl9hbWJpZW50TWV0aG9kO1xuXHRcdFx0cGFzcy5ub3JtYWxNZXRob2QgPSB0aGlzLl9ub3JtYWxNZXRob2Q7XG5cdFx0XHRwYXNzLnNwZWN1bGFyTWV0aG9kID0gdGhpcy5fc3BlY3VsYXJNZXRob2Q7XG5cdFx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcy5wdXNoKHBhc3MpO1xuXG5cdFx0XHRkaXJMaWdodE9mZnNldCArPSBwYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHRcdHBvaW50TGlnaHRPZmZzZXQgKz0gcGFzcy5pTnVtUG9pbnRMaWdodHM7XG5cdFx0XHRwcm9iZU9mZnNldCArPSBwYXNzLmlOdW1MaWdodFByb2Jlcztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZU5vbkNhc3RlckxpZ2h0UGFzc2VzKClcblx0e1xuXHRcdGlmICghdGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcy5sZW5ndGg7ICsraSlcblx0XHRcdHRoaXMuX3BSZW1vdmVTY3JlZW5QYXNzKHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzW2ldKTtcblxuXHRcdHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzID0gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlRWZmZWN0UGFzcygpXG5cdHtcblx0XHRpZiAodGhpcy5fc2NyZWVuUGFzcy5hbWJpZW50TWV0aG9kICE9IHRoaXMuX2FtYmllbnRNZXRob2QpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLmFtYmllbnRNZXRob2QuZGlzcG9zZSgpO1xuXG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MuZGlmZnVzZU1ldGhvZCAhPSB0aGlzLl9kaWZmdXNlTWV0aG9kKVxuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5kaWZmdXNlTWV0aG9kLmRpc3Bvc2UoKTtcblxuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzLnNwZWN1bGFyTWV0aG9kICE9IHRoaXMuX3NwZWN1bGFyTWV0aG9kKVxuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5zcGVjdWxhck1ldGhvZC5kaXNwb3NlKCk7XG5cblx0XHRpZiAodGhpcy5fc2NyZWVuUGFzcy5ub3JtYWxNZXRob2QgIT0gdGhpcy5fbm9ybWFsTWV0aG9kKVxuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5ub3JtYWxNZXRob2QuZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fcFJlbW92ZVNjcmVlblBhc3ModGhpcy5fc2NyZWVuUGFzcyk7XG5cdFx0dGhpcy5fc2NyZWVuUGFzcyA9IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGluaXRFZmZlY3RQYXNzKClcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzID09IG51bGwpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzID0gbmV3IFRyaWFuZ2xlTWV0aG9kUGFzcygpO1xuXG5cdFx0aWYgKHRoaXMuX21hdGVyaWFsTW9kZSA9PSBUcmlhbmdsZU1hdGVyaWFsTW9kZS5TSU5HTEVfUEFTUykge1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5hbWJpZW50TWV0aG9kID0gdGhpcy5fYW1iaWVudE1ldGhvZDtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MuZGlmZnVzZU1ldGhvZCA9IHRoaXMuX2RpZmZ1c2VNZXRob2Q7XG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLnNwZWN1bGFyTWV0aG9kID0gdGhpcy5fc3BlY3VsYXJNZXRob2Q7XG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLm5vcm1hbE1ldGhvZCA9IHRoaXMuX25vcm1hbE1ldGhvZDtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3Muc2hhZG93TWV0aG9kID0gdGhpcy5fc2hhZG93TWV0aG9kO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5fbWF0ZXJpYWxNb2RlID09IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLk1VTFRJX1BBU1MpIHtcblx0XHRcdGlmICh0aGlzLm51bUxpZ2h0cyA9PSAwKSB7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3MuYW1iaWVudE1ldGhvZCA9IHRoaXMuX2FtYmllbnRNZXRob2Q7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9zY3JlZW5QYXNzLmFtYmllbnRNZXRob2QgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLnByZXNlcnZlQWxwaGEgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3Mubm9ybWFsTWV0aG9kID0gdGhpcy5fbm9ybWFsTWV0aG9kO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWF4aW11bSB0b3RhbCBudW1iZXIgb2YgbGlnaHRzIHByb3ZpZGVkIGJ5IHRoZSBsaWdodCBwaWNrZXIuXG5cdCAqL1xuXHRwcml2YXRlIGdldCBudW1MaWdodHMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wTGlnaHRQaWNrZXI/IHRoaXMuX3BMaWdodFBpY2tlci5udW1MaWdodFByb2JlcyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1EaXJlY3Rpb25hbExpZ2h0cyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1Qb2ludExpZ2h0cyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1DYXN0aW5nRGlyZWN0aW9uYWxMaWdodHMgKyB0aGlzLl9wTGlnaHRQaWNrZXIubnVtQ2FzdGluZ1BvaW50TGlnaHRzIDogMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGxpZ2h0cyB0aGF0IGRvbid0IGNhc3Qgc2hhZG93cy5cblx0ICovXG5cdHByaXZhdGUgZ2V0IG51bU5vbkNhc3RlcnMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wTGlnaHRQaWNrZXI/IHRoaXMuX3BMaWdodFBpY2tlci5udW1MaWdodFByb2JlcyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1EaXJlY3Rpb25hbExpZ2h0cyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1Qb2ludExpZ2h0cyA6IDA7XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVNZXRob2RNYXRlcmlhbDsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdHJpYW5nbGVtZXRob2RtYXRlcmlhbC50cyJdLCJuYW1lcyI6WyJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5jb25zdHJ1Y3RvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubWF0ZXJpYWxNb2RlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5kZXB0aENvbXBhcmVNb2RlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbHBoYSIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuY29sb3JUcmFuc2Zvcm0iLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VUZXh0dXJlIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbWJpZW50TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5zaGFkb3dNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnNwZWN1bGFyTWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5ub3JtYWxNZXRob2QiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmFkZEVmZmVjdE1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubnVtRWZmZWN0TWV0aG9kcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaGFzRWZmZWN0TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5nZXRFZmZlY3RNZXRob2RBdCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuYWRkRWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnJlbW92ZUVmZmVjdE1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubm9ybWFsTWFwIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5zcGVjdWxhck1hcCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuZ2xvc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmFtYmllbnQiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnNwZWN1bGFyIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5hbWJpZW50Q29sb3IiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmRpZmZ1c2VDb2xvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuc3BlY3VsYXJDb2xvciIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuYWxwaGFCbGVuZGluZyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuX2lVcGRhdGVNYXRlcmlhbCIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdFBhc3NlcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuc2V0QmxlbmRBbmRDb21wYXJlTW9kZXMiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmluaXRDYXN0ZXJMaWdodFBhc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLnJlbW92ZUNhc3RlckxpZ2h0UGFzcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdE5vbkNhc3RlckxpZ2h0UGFzc2VzIiwiVHJpYW5nbGVNZXRob2RNYXRlcmlhbC5yZW1vdmVOb25DYXN0ZXJMaWdodFBhc3NlcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwucmVtb3ZlRWZmZWN0UGFzcyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwuaW5pdEVmZmVjdFBhc3MiLCJUcmlhbmdsZU1ldGhvZE1hdGVyaWFsLm51bUxpZ2h0cyIsIlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwubnVtTm9uQ2FzdGVycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTyxjQUFjLFdBQWMscUNBQXFDLENBQUMsQ0FBQztBQUMxRSxJQUFPLGFBQWEsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTVFLElBQU8sU0FBUyxXQUFlLG1DQUFtQyxDQUFDLENBQUM7QUFFcEUsSUFBTyxpQkFBaUIsV0FBYSw2REFBNkQsQ0FBQyxDQUFDO0FBR3BHLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMs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QUFDQSxTQUFTQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQTtZQUNyREEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDakVBLENBQUNBO1FBRURBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLGtCQUFrQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7WUFFbENBLEFBRUFBLHFGQUZxRkE7WUFDckZBLGlDQUFpQ0E7WUFDakNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzVCQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGdCQUFnQkEsR0FBR0EsZ0JBQWdCQSxDQUFDQTtnQkFDbEVBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7Z0JBQzdEQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtnQkFDeEVBLGtCQUFrQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDeEJBLENBQUNBO1lBR0RBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLGtCQUFrQkEsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxNQUFNQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQTtnQkFDcEZBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxnQkFBZ0JBLENBQUNBO2dCQUNsRUEsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxDQUFDQSxDQUFD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QUdBLENBQUNBLENBQUNBO1FBQzVPQSxDQUFDQTs7O09BQUFwQztJQUtEQSxzQkFBWUEsaURBQWFBO1FBSHpCQTs7V0FFR0E7YUFDSEE7WUFFQ3FDLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLEdBQUVBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLGNBQWNBLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDaEpBLENBQUNBOzs7T0FBQXJDO0lBQ0ZBLDZCQUFDQTtBQUFEQSxDQTdxQkEsQUE2cUJDQSxFQTdxQm9DLG9CQUFvQixFQTZxQnhEO0FBRUQsQUFBZ0MsaUJBQXZCLHNCQUFzQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBDb2xvclRyYW5zZm9ybVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vQ29sb3JUcmFuc2Zvcm1cIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBCbGVuZE1vZGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvQmxlbmRNb2RlXCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgU3RhdGljTGlnaHRQaWNrZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL2xpZ2h0cGlja2Vycy9TdGF0aWNMaWdodFBpY2tlclwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBBbWJpZW50QmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvQW1iaWVudEJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IERpZmZ1c2VCYXNpY01ldGhvZFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9EaWZmdXNlQmFzaWNNZXRob2RcIik7XG5pbXBvcnQgRWZmZWN0TWV0aG9kQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0VmZmVjdE1ldGhvZEJhc2VcIik7XG5pbXBvcnQgTm9ybWFsQmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvTm9ybWFsQmFzaWNNZXRob2RcIik7XG5pbXBvcnQgU2hhZG93TWFwTWV0aG9kQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TaGFkb3dNYXBNZXRob2RCYXNlXCIpO1xuaW1wb3J0IFNwZWN1bGFyQmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvU3BlY3VsYXJCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NNb2RlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWV0aG9kUGFzc1x0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL1RyaWFuZ2xlTWV0aG9kUGFzc1wiKTtcbmltcG9ydCBUcmlhbmdsZU1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvVHJpYW5nbGVNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgVHJpYW5nbGVNYXRlcmlhbE1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWF0ZXJpYWxNb2RlXCIpO1xuXG4vKipcbiAqIFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGhlIGRlZmF1bHQgc2hhZGVkIG1hdGVyaWFscyBwcm92aWRlZCBieSBTdGFnZSxcbiAqIHVzaW5nIG1hdGVyaWFsIG1ldGhvZHMgdG8gZGVmaW5lIHRoZWlyIGFwcGVhcmFuY2UuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwgZXh0ZW5kcyBUcmlhbmdsZU1hdGVyaWFsQmFzZVxue1xuXHRwcml2YXRlIF9hbHBoYUJsZW5kaW5nOmJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBfYWxwaGE6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfY29sb3JUcmFuc2Zvcm06Q29sb3JUcmFuc2Zvcm07XG5cdHByaXZhdGUgX21hdGVyaWFsTW9kZTpzdHJpbmc7XG5cdHByaXZhdGUgX2Nhc3RlckxpZ2h0UGFzczpUcmlhbmdsZU1ldGhvZFBhc3M7XG5cdHByaXZhdGUgX25vbkNhc3RlckxpZ2h0UGFzc2VzOkFycmF5PFRyaWFuZ2xlTWV0aG9kUGFzcz47XG5cdHByaXZhdGUgX3NjcmVlblBhc3M6VHJpYW5nbGVNZXRob2RQYXNzO1xuXG5cdHByaXZhdGUgX2FtYmllbnRNZXRob2Q6QW1iaWVudEJhc2ljTWV0aG9kID0gbmV3IEFtYmllbnRCYXNpY01ldGhvZCgpO1xuXHRwcml2YXRlIF9zaGFkb3dNZXRob2Q6U2hhZG93TWFwTWV0aG9kQmFzZTtcblx0cHJpdmF0ZSBfZGlmZnVzZU1ldGhvZDpEaWZmdXNlQmFzaWNNZXRob2QgPSBuZXcgRGlmZnVzZUJhc2ljTWV0aG9kKCk7XG5cdHByaXZhdGUgX25vcm1hbE1ldGhvZDpOb3JtYWxCYXNpY01ldGhvZCA9IG5ldyBOb3JtYWxCYXNpY01ldGhvZCgpO1xuXHRwcml2YXRlIF9zcGVjdWxhck1ldGhvZDpTcGVjdWxhckJhc2ljTWV0aG9kID0gbmV3IFNwZWN1bGFyQmFzaWNNZXRob2QoKTtcblxuXG5cdHByaXZhdGUgX2RlcHRoQ29tcGFyZU1vZGU6c3RyaW5nID0gQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTDtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIG1hdGVyaWFsJ3MgYWxiZWRvIGNvbG9yLlxuXHQgKiBAcGFyYW0gc21vb3RoIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSBmaWx0ZXJlZCB3aGVuIHNhbXBsZWQuIERlZmF1bHRzIHRvIHRydWUuXG5cdCAqIEBwYXJhbSByZXBlYXQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHRpbGVkIHdoZW4gc2FtcGxlZC4gRGVmYXVsdHMgdG8gZmFsc2UuXG5cdCAqIEBwYXJhbSBtaXBtYXAgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGFueSB1c2VkIHRleHR1cmVzIHNob3VsZCB1c2UgbWlwbWFwcGluZy4gRGVmYXVsdHMgdG8gZmFsc2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih0ZXh0dXJlPzpUZXh0dXJlMkRCYXNlLCBzbW9vdGg/OmJvb2xlYW4sIHJlcGVhdD86Ym9vbGVhbiwgbWlwbWFwPzpib29sZWFuKTtcblx0Y29uc3RydWN0b3IoY29sb3I/Om51bWJlciwgYWxwaGE/Om51bWJlcik7XG5cdGNvbnN0cnVjdG9yKHRleHR1cmVDb2xvcjphbnkgPSBudWxsLCBzbW9vdGhBbHBoYTphbnkgPSBudWxsLCByZXBlYXQ6Ym9vbGVhbiA9IGZhbHNlLCBtaXBtYXA6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX21hdGVyaWFsTW9kZSA9IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLlNJTkdMRV9QQVNTO1xuXG5cdFx0aWYgKHRleHR1cmVDb2xvciBpbnN0YW5jZW9mIFRleHR1cmUyREJhc2UpIHtcblx0XHRcdHRoaXMudGV4dHVyZSA9IDxUZXh0dXJlMkRCYXNlPiB0ZXh0dXJlQ29sb3I7XG5cblx0XHRcdHRoaXMuc21vb3RoID0gKHNtb290aEFscGhhID09IG51bGwpPyB0cnVlIDogZmFsc2U7XG5cdFx0XHR0aGlzLnJlcGVhdCA9IHJlcGVhdDtcblx0XHRcdHRoaXMubWlwbWFwID0gbWlwbWFwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbG9yID0gKHRleHR1cmVDb2xvciA9PSBudWxsKT8gMHhGRkZGRkYgOiBOdW1iZXIodGV4dHVyZUNvbG9yKTtcblx0XHRcdHRoaXMuYWxwaGEgPSAoc21vb3RoQWxwaGEgPT0gbnVsbCk/IDEgOiBOdW1iZXIoc21vb3RoQWxwaGEpO1xuXHRcdH1cblx0fVxuXG5cblx0cHVibGljIGdldCBtYXRlcmlhbE1vZGUoKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiB0aGlzLl9tYXRlcmlhbE1vZGU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG1hdGVyaWFsTW9kZSh2YWx1ZTpzdHJpbmcpXG5cdHtcblx0XHRpZiAodGhpcy5fbWF0ZXJpYWxNb2RlID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fbWF0ZXJpYWxNb2RlID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVNjcmVlblBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZXB0aCBjb21wYXJlIG1vZGUgdXNlZCB0byByZW5kZXIgdGhlIHJlbmRlcmFibGVzIHVzaW5nIHRoaXMgbWF0ZXJpYWwuXG5cdCAqXG5cdCAqIEBzZWUgYXdheS5zdGFnZWdsLkNvbnRleHRHTENvbXBhcmVNb2RlXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXQgZGVwdGhDb21wYXJlTW9kZSgpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RlcHRoQ29tcGFyZU1vZGU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRlcHRoQ29tcGFyZU1vZGUodmFsdWU6c3RyaW5nKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2RlcHRoQ29tcGFyZU1vZGUgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9kZXB0aENvbXBhcmVNb2RlID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVNjcmVlblBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBhbHBoYSBvZiB0aGUgc3VyZmFjZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYWxwaGEoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbHBoYTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYWxwaGEodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHZhbHVlID4gMSlcblx0XHRcdHZhbHVlID0gMTtcblx0XHRlbHNlIGlmICh2YWx1ZSA8IDApXG5cdFx0XHR2YWx1ZSA9IDA7XG5cblx0XHRpZiAodGhpcy5fYWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbHBoYSA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09IG51bGwpXG5cdFx0XHR0aGlzLl9jb2xvclRyYW5zZm9ybSA9IG5ldyBDb2xvclRyYW5zZm9ybSgpO1xuXG5cdFx0dGhpcy5fY29sb3JUcmFuc2Zvcm0uYWxwaGFNdWx0aXBsaWVyID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDb2xvclRyYW5zZm9ybSBvYmplY3QgdG8gdHJhbnNmb3JtIHRoZSBjb2xvdXIgb2YgdGhlIG1hdGVyaWFsIHdpdGguIERlZmF1bHRzIHRvIG51bGwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbG9yVHJhbnNmb3JtKCk6Q29sb3JUcmFuc2Zvcm1cblx0e1xuXHRcdHJldHVybiB0aGlzLl9zY3JlZW5QYXNzLmNvbG9yVHJhbnNmb3JtO1xuXHR9XG5cblx0cHVibGljIHNldCBjb2xvclRyYW5zZm9ybSh2YWx1ZTpDb2xvclRyYW5zZm9ybSlcblx0e1xuXHRcdHRoaXMuX3NjcmVlblBhc3MuY29sb3JUcmFuc2Zvcm0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dHVyZSBvYmplY3QgdG8gdXNlIGZvciB0aGUgYW1iaWVudCBjb2xvdXIuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VUZXh0dXJlKCk6VGV4dHVyZTJEQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpZmZ1c2VNZXRob2QudGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlmZnVzZVRleHR1cmUodmFsdWU6VGV4dHVyZTJEQmFzZSlcblx0e1xuXHRcdHRoaXMuX2RpZmZ1c2VNZXRob2QudGV4dHVyZSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgYW1iaWVudCBsaWdodGluZyBjb250cmlidXRpb24uIERlZmF1bHRzIHRvIEFtYmllbnRCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW1iaWVudE1ldGhvZCgpOkFtYmllbnRCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FtYmllbnRNZXRob2Q7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFtYmllbnRNZXRob2QodmFsdWU6QW1iaWVudEJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FtYmllbnRNZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fYW1iaWVudE1ldGhvZClcblx0XHRcdHZhbHVlLmNvcHlGcm9tKHRoaXMuX2FtYmllbnRNZXRob2QpO1xuXG5cdFx0dGhpcy5fYW1iaWVudE1ldGhvZCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHVzZWQgdG8gcmVuZGVyIHNoYWRvd3MgY2FzdCBvbiB0aGlzIHN1cmZhY2UsIG9yIG51bGwgaWYgbm8gc2hhZG93cyBhcmUgdG8gYmUgcmVuZGVyZWQuIERlZmF1bHRzIHRvIG51bGwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNoYWRvd01ldGhvZCgpOlNoYWRvd01hcE1ldGhvZEJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zaGFkb3dNZXRob2Q7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNoYWRvd01ldGhvZCh2YWx1ZTpTaGFkb3dNYXBNZXRob2RCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NoYWRvd01ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh2YWx1ZSAmJiB0aGlzLl9zaGFkb3dNZXRob2QpXG5cdFx0XHR2YWx1ZS5jb3B5RnJvbSh0aGlzLl9zaGFkb3dNZXRob2QpO1xuXG5cdFx0dGhpcy5fc2hhZG93TWV0aG9kID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVNjcmVlblBhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgZGlmZnVzZSBsaWdodGluZyBjb250cmlidXRpb24uIERlZmF1bHRzIHRvIERpZmZ1c2VCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZU1ldGhvZCgpOkRpZmZ1c2VCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpZmZ1c2VNZXRob2Q7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VNZXRob2QodmFsdWU6RGlmZnVzZUJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2RpZmZ1c2VNZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fZGlmZnVzZU1ldGhvZClcblx0XHRcdHZhbHVlLmNvcHlGcm9tKHRoaXMuX2RpZmZ1c2VNZXRob2QpO1xuXG5cdFx0dGhpcy5fZGlmZnVzZU1ldGhvZCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIHNwZWN1bGFyIGxpZ2h0aW5nIGNvbnRyaWJ1dGlvbi4gRGVmYXVsdHMgdG8gU3BlY3VsYXJCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXJNZXRob2QoKTpTcGVjdWxhckJhc2ljTWV0aG9kXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc3BlY3VsYXJNZXRob2Q7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNwZWN1bGFyTWV0aG9kKHZhbHVlOlNwZWN1bGFyQmFzaWNNZXRob2QpXG5cdHtcblx0XHRpZiAodGhpcy5fc3BlY3VsYXJNZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fc3BlY3VsYXJNZXRob2QpXG5cdFx0XHR2YWx1ZS5jb3B5RnJvbSh0aGlzLl9zcGVjdWxhck1ldGhvZCk7XG5cblx0XHR0aGlzLl9zcGVjdWxhck1ldGhvZCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBlci1waXhlbCBub3JtYWxzLiBEZWZhdWx0cyB0byBOb3JtYWxCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbm9ybWFsTWV0aG9kKCk6Tm9ybWFsQmFzaWNNZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9ub3JtYWxNZXRob2Q7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG5vcm1hbE1ldGhvZCh2YWx1ZTpOb3JtYWxCYXNpY01ldGhvZClcblx0e1xuXHRcdGlmICh0aGlzLl9ub3JtYWxNZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5fbm9ybWFsTWV0aG9kKVxuXHRcdFx0dmFsdWUuY29weUZyb20odGhpcy5fbm9ybWFsTWV0aG9kKTtcblxuXHRcdHRoaXMuX25vcm1hbE1ldGhvZCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBlbmRzIGFuIFwiZWZmZWN0XCIgc2hhZGluZyBtZXRob2QgdG8gdGhlIHNoYWRlci4gRWZmZWN0IG1ldGhvZHMgYXJlIHRob3NlIHRoYXQgZG8gbm90IGluZmx1ZW5jZSB0aGUgbGlnaHRpbmdcblx0ICogYnV0IG1vZHVsYXRlIHRoZSBzaGFkZWQgY29sb3VyLCB1c2VkIGZvciBmb2csIG91dGxpbmVzLCBldGMuIFRoZSBtZXRob2Qgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHQgb2YgdGhlXG5cdCAqIG1ldGhvZHMgYWRkZWQgcHJpb3IuXG5cdCAqL1xuXHRwdWJsaWMgYWRkRWZmZWN0TWV0aG9kKG1ldGhvZDpFZmZlY3RNZXRob2RCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MgPT0gbnVsbClcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MgPSBuZXcgVHJpYW5nbGVNZXRob2RQYXNzKCk7XG5cblx0XHR0aGlzLl9zY3JlZW5QYXNzLmFkZEVmZmVjdE1ldGhvZChtZXRob2QpO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVTY3JlZW5QYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIFwiZWZmZWN0XCIgbWV0aG9kcyBhZGRlZCB0byB0aGUgbWF0ZXJpYWwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bUVmZmVjdE1ldGhvZHMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zY3JlZW5QYXNzPyB0aGlzLl9zY3JlZW5QYXNzLm51bUVmZmVjdE1ldGhvZHMgOiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFF1ZXJpZXMgd2hldGhlciBhIGdpdmVuIGVmZmVjdCBtZXRob2Qgd2FzIGFkZGVkIHRvIHRoZSBtYXRlcmlhbC5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGJlIHF1ZXJpZWQuXG5cdCAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWV0aG9kIHdhcyBhZGRlZCB0byB0aGUgbWF0ZXJpYWwsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBoYXNFZmZlY3RNZXRob2QobWV0aG9kOkVmZmVjdE1ldGhvZEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9zY3JlZW5QYXNzPyB0aGlzLl9zY3JlZW5QYXNzLmhhc0VmZmVjdE1ldGhvZChtZXRob2QpIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0aG9kIGFkZGVkIGF0IHRoZSBnaXZlbiBpbmRleC5cblx0ICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbWV0aG9kIHRvIHJldHJpZXZlLlxuXHQgKiBAcmV0dXJuIFRoZSBtZXRob2QgYXQgdGhlIGdpdmVuIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGdldEVmZmVjdE1ldGhvZEF0KGluZGV4Om51bWJlcik6RWZmZWN0TWV0aG9kQmFzZVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MgPT0gbnVsbClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3NjcmVlblBhc3MuZ2V0RWZmZWN0TWV0aG9kQXQoaW5kZXgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gZWZmZWN0IG1ldGhvZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGFtb25nc3QgdGhlIG1ldGhvZHMgYWxyZWFkeSBhZGRlZCB0byB0aGUgbWF0ZXJpYWwuIEVmZmVjdFxuXHQgKiBtZXRob2RzIGFyZSB0aG9zZSB0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhlIGxpZ2h0aW5nIGJ1dCBtb2R1bGF0ZSB0aGUgc2hhZGVkIGNvbG91ciwgdXNlZCBmb3IgZm9nLCBvdXRsaW5lcyxcblx0ICogZXRjLiBUaGUgbWV0aG9kIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVzdWx0IG9mIHRoZSBtZXRob2RzIHdpdGggYSBsb3dlciBpbmRleC5cblx0ICovXG5cdHB1YmxpYyBhZGRFZmZlY3RNZXRob2RBdChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSwgaW5kZXg6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MgPT0gbnVsbClcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MgPSBuZXcgVHJpYW5nbGVNZXRob2RQYXNzKCk7XG5cblx0XHR0aGlzLl9zY3JlZW5QYXNzLmFkZEVmZmVjdE1ldGhvZEF0KG1ldGhvZCwgaW5kZXgpO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFuIGVmZmVjdCBtZXRob2QgZnJvbSB0aGUgbWF0ZXJpYWwuXG5cdCAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBiZSByZW1vdmVkLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZUVmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSlcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzID09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9zY3JlZW5QYXNzLnJlbW92ZUVmZmVjdE1ldGhvZChtZXRob2QpO1xuXG5cdFx0Ly8gcmVjb25zaWRlclxuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzLm51bUVmZmVjdE1ldGhvZHMgPT0gMClcblx0XHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG5vcm1hbCBtYXAgdG8gbW9kdWxhdGUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc3VyZmFjZSBmb3IgZWFjaCB0ZXhlbC4gVGhlIGRlZmF1bHQgbm9ybWFsIG1ldGhvZCBleHBlY3RzXG5cdCAqIHRhbmdlbnQtc3BhY2Ugbm9ybWFsIG1hcHMsIGJ1dCBvdGhlcnMgY291bGQgZXhwZWN0IG9iamVjdC1zcGFjZSBtYXBzLlxuXHQgKi9cblx0cHVibGljIGdldCBub3JtYWxNYXAoKTpUZXh0dXJlMkRCYXNlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbm9ybWFsTWV0aG9kLm5vcm1hbE1hcDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbm9ybWFsTWFwKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR0aGlzLl9ub3JtYWxNZXRob2Qubm9ybWFsTWFwID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQSBzcGVjdWxhciBtYXAgdGhhdCBkZWZpbmVzIHRoZSBzdHJlbmd0aCBvZiBzcGVjdWxhciByZWZsZWN0aW9ucyBmb3IgZWFjaCB0ZXhlbCBpbiB0aGUgcmVkIGNoYW5uZWwsXG5cdCAqIGFuZCB0aGUgZ2xvc3MgZmFjdG9yIGluIHRoZSBncmVlbiBjaGFubmVsLiBZb3UgY2FuIHVzZSBTcGVjdWxhckJpdG1hcFRleHR1cmUgaWYgeW91IHdhbnQgdG8gZWFzaWx5IHNldFxuXHQgKiBzcGVjdWxhciBhbmQgZ2xvc3MgbWFwcyBmcm9tIGdyYXlzY2FsZSBpbWFnZXMsIGJ1dCBjb3JyZWN0bHkgYXV0aG9yZWQgaW1hZ2VzIGFyZSBwcmVmZXJyZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNwZWN1bGFyTWFwKCk6VGV4dHVyZTJEQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyTWV0aG9kLnRleHR1cmU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNwZWN1bGFyTWFwKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR0aGlzLl9zcGVjdWxhck1ldGhvZC50ZXh0dXJlID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGdsb3NzaW5lc3Mgb2YgdGhlIG1hdGVyaWFsIChzaGFycG5lc3Mgb2YgdGhlIHNwZWN1bGFyIGhpZ2hsaWdodCkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGdsb3NzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc3BlY3VsYXJNZXRob2QuZ2xvc3M7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGdsb3NzKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX3NwZWN1bGFyTWV0aG9kLmdsb3NzID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBhbWJpZW50IHJlZmxlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFtYmllbnQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbWJpZW50TWV0aG9kLmFtYmllbnQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFtYmllbnQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fYW1iaWVudE1ldGhvZC5hbWJpZW50ID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG92ZXJhbGwgc3RyZW5ndGggb2YgdGhlIHNwZWN1bGFyIHJlZmxlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNwZWN1bGFyKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc3BlY3VsYXJNZXRob2Quc3BlY3VsYXI7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNwZWN1bGFyKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX3NwZWN1bGFyTWV0aG9kLnNwZWN1bGFyID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNvbG91ciBvZiB0aGUgYW1iaWVudCByZWZsZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBhbWJpZW50Q29sb3IoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlTWV0aG9kLmFtYmllbnRDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudENvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2RpZmZ1c2VNZXRob2QuYW1iaWVudENvbG9yID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNvbG91ciBvZiB0aGUgZGlmZnVzZSByZWZsZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBkaWZmdXNlQ29sb3IoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlTWV0aG9kLmRpZmZ1c2VDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlmZnVzZUNvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2RpZmZ1c2VNZXRob2QuZGlmZnVzZUNvbG9yID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNvbG91ciBvZiB0aGUgc3BlY3VsYXIgcmVmbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXJDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyTWV0aG9kLnNwZWN1bGFyQ29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNwZWN1bGFyQ29sb3IodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fc3BlY3VsYXJNZXRob2Quc3BlY3VsYXJDb2xvciA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0ZXJpYWwgaGFzIHRyYW5zcGFyZW5jeS4gSWYgYmluYXJ5IHRyYW5zcGFyZW5jeSBpcyBzdWZmaWNpZW50LCBmb3Jcblx0ICogZXhhbXBsZSB3aGVuIHVzaW5nIHRleHR1cmVzIG9mIGZvbGlhZ2UsIGNvbnNpZGVyIHVzaW5nIGFscGhhVGhyZXNob2xkIGluc3RlYWQuXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXQgYWxwaGFCbGVuZGluZygpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbHBoYUJsZW5kaW5nO1xuXHR9XG5cblx0cHVibGljIHNldCBhbHBoYUJsZW5kaW5nKHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHRpZiAodGhpcy5fYWxwaGFCbGVuZGluZyA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2FscGhhQmxlbmRpbmcgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaVVwZGF0ZU1hdGVyaWFsKClcblx0e1xuXHRcdGlmICh0aGlzLl9wU2NyZWVuUGFzc2VzSW52YWxpZCkge1xuXHRcdFx0Ly9VcGRhdGVzIHNjcmVlbiBwYXNzZXMgd2hlbiB0aGV5IHdlcmUgZm91bmQgdG8gYmUgaW52YWxpZC5cblx0XHRcdHRoaXMuX3BTY3JlZW5QYXNzZXNJbnZhbGlkID0gZmFsc2U7XG5cblx0XHRcdHRoaXMuaW5pdFBhc3NlcygpO1xuXG5cdFx0XHR0aGlzLnNldEJsZW5kQW5kQ29tcGFyZU1vZGVzKCk7XG5cblx0XHRcdHRoaXMuX3BDbGVhclNjcmVlblBhc3NlcygpO1xuXG5cdFx0XHRpZiAodGhpcy5fbWF0ZXJpYWxNb2RlID09IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLk1VTFRJX1BBU1MpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2Nhc3RlckxpZ2h0UGFzcylcblx0XHRcdFx0XHR0aGlzLl9wQWRkU2NyZWVuUGFzcyh0aGlzLl9jYXN0ZXJMaWdodFBhc3MpO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcylcblx0XHRcdFx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcy5sZW5ndGg7ICsraSlcblx0XHRcdFx0XHRcdHRoaXMuX3BBZGRTY3JlZW5QYXNzKHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MpXG5cdFx0XHRcdHRoaXMuX3BBZGRTY3JlZW5QYXNzKHRoaXMuX3NjcmVlblBhc3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhbGwgdGhlIHBhc3NlcyBhbmQgdGhlaXIgZGVwZW5kZW50IHBhc3Nlcy5cblx0ICovXG5cdHByaXZhdGUgaW5pdFBhc3NlcygpXG5cdHtcblx0XHQvLyBsZXQgdGhlIGVmZmVjdHMgcGFzcyBoYW5kbGUgZXZlcnl0aGluZyBpZiB0aGVyZSBhcmUgbm8gbGlnaHRzLCB3aGVuIHRoZXJlIGFyZSBlZmZlY3QgbWV0aG9kcyBhcHBsaWVkXG5cdFx0Ly8gYWZ0ZXIgc2hhZGluZywgb3Igd2hlbiB0aGUgbWF0ZXJpYWwgbW9kZSBpcyBzaW5nbGUgcGFzcy5cblx0XHRpZiAodGhpcy5udW1MaWdodHMgPT0gMCB8fCB0aGlzLm51bUVmZmVjdE1ldGhvZHMgPiAwIHx8IHRoaXMuX21hdGVyaWFsTW9kZSA9PSBUcmlhbmdsZU1hdGVyaWFsTW9kZS5TSU5HTEVfUEFTUylcblx0XHRcdHRoaXMuaW5pdEVmZmVjdFBhc3MoKTtcblx0XHRlbHNlIGlmICh0aGlzLl9zY3JlZW5QYXNzKVxuXHRcdFx0dGhpcy5yZW1vdmVFZmZlY3RQYXNzKCk7XG5cblx0XHQvLyBvbmx5IHVzZSBhIGNhc3RlciBsaWdodCBwYXNzIGlmIHNoYWRvd3MgbmVlZCB0byBiZSByZW5kZXJlZFxuXHRcdGlmICh0aGlzLl9zaGFkb3dNZXRob2QgJiYgdGhpcy5fbWF0ZXJpYWxNb2RlID09IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLk1VTFRJX1BBU1MpXG5cdFx0XHR0aGlzLmluaXRDYXN0ZXJMaWdodFBhc3MoKTtcblx0XHRlbHNlIGlmICh0aGlzLl9jYXN0ZXJMaWdodFBhc3MpXG5cdFx0XHR0aGlzLnJlbW92ZUNhc3RlckxpZ2h0UGFzcygpO1xuXG5cdFx0Ly8gb25seSB1c2Ugbm9uIGNhc3RlciBsaWdodCBwYXNzZXMgaWYgdGhlcmUgYXJlIGxpZ2h0cyB0aGF0IGRvbid0IGNhc3Rcblx0XHRpZiAodGhpcy5udW1Ob25DYXN0ZXJzID4gMCAmJiB0aGlzLl9tYXRlcmlhbE1vZGUgPT0gVHJpYW5nbGVNYXRlcmlhbE1vZGUuTVVMVElfUEFTUylcblx0XHRcdHRoaXMuaW5pdE5vbkNhc3RlckxpZ2h0UGFzc2VzKCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMpXG5cdFx0XHR0aGlzLnJlbW92ZU5vbkNhc3RlckxpZ2h0UGFzc2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB1cCB0aGUgdmFyaW91cyBibGVuZGluZyBtb2RlcyBmb3IgYWxsIHNjcmVlbiBwYXNzZXMsIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBwcmV2aW91cyBwYXNzZXMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJsZW5kQW5kQ29tcGFyZU1vZGVzKClcblx0e1xuXHRcdHZhciBmb3JjZVNlcGFyYXRlTVZQOmJvb2xlYW4gPSBCb29sZWFuKHRoaXMuX2Nhc3RlckxpZ2h0UGFzcyB8fCB0aGlzLl9zY3JlZW5QYXNzKTtcblxuXHRcdC8vIGNhc3RlciBsaWdodCBwYXNzIGlzIGFsd2F5cyBmaXJzdCBpZiBpdCBleGlzdHMsIGhlbmNlIGl0IHVzZXMgbm9ybWFsIGJsZW5kaW5nXG5cdFx0aWYgKHRoaXMuX2Nhc3RlckxpZ2h0UGFzcykge1xuXHRcdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzLmZvcmNlU2VwYXJhdGVNVlAgPSBmb3JjZVNlcGFyYXRlTVZQO1xuXHRcdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzLnNldEJsZW5kTW9kZShCbGVuZE1vZGUuTk9STUFMKTtcblx0XHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5kZXB0aENvbXBhcmVNb2RlID0gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMpIHtcblx0XHRcdHZhciBmaXJzdEFkZGl0aXZlSW5kZXg6bnVtYmVyID0gMDtcblxuXHRcdFx0Ly8gaWYgdGhlcmUncyBubyBjYXN0ZXIgbGlnaHQgcGFzcywgdGhlIGZpcnN0IG5vbiBjYXN0ZXIgbGlnaHQgcGFzcyB3aWxsIGJlIHRoZSBmaXJzdFxuXHRcdFx0Ly8gYW5kIHNob3VsZCB1c2Ugbm9ybWFsIGJsZW5kaW5nXG5cdFx0XHRpZiAoIXRoaXMuX2Nhc3RlckxpZ2h0UGFzcykge1xuXHRcdFx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlc1swXS5mb3JjZVNlcGFyYXRlTVZQID0gZm9yY2VTZXBhcmF0ZU1WUDtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbMF0uc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5OT1JNQUwpO1xuXHRcdFx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlc1swXS5kZXB0aENvbXBhcmVNb2RlID0gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0XHRcdFx0Zmlyc3RBZGRpdGl2ZUluZGV4ID0gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYWxsIGxpZ2h0aW5nIHBhc3NlcyBmb2xsb3dpbmcgdGhlIGZpcnN0IGxpZ2h0IHBhc3Mgc2hvdWxkIHVzZSBhZGRpdGl2ZSBibGVuZGluZ1xuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSBmaXJzdEFkZGl0aXZlSW5kZXg7IGkgPCB0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlc1tpXS5mb3JjZVNlcGFyYXRlTVZQID0gZm9yY2VTZXBhcmF0ZU1WUDtcblx0XHRcdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbaV0uc2V0QmxlbmRNb2RlKEJsZW5kTW9kZS5BREQpO1xuXHRcdFx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlc1tpXS5kZXB0aENvbXBhcmVNb2RlID0gQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fY2FzdGVyTGlnaHRQYXNzIHx8IHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzKSB7XG5cdFx0XHQvL2Nhbm5vdCBiZSBibGVuZGVkIGJ5IGJsZW5kbW9kZSBwcm9wZXJ0eSBpZiBtdWx0aXBhc3MgZW5hYmxlZFxuXHRcdFx0dGhpcy5fcFJlcXVpcmVzQmxlbmRpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gdGhlcmUgYXJlIGxpZ2h0IHBhc3Nlcywgc28gdGhpcyBzaG91bGQgYmUgYmxlbmRlZCBpblxuXHRcdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MpIHtcblx0XHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5wYXNzTW9kZSA9IE1hdGVyaWFsUGFzc01vZGUuRUZGRUNUUztcblx0XHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5kZXB0aENvbXBhcmVNb2RlID0gQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTDtcblx0XHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5zZXRCbGVuZE1vZGUoQmxlbmRNb2RlLkxBWUVSKTtcblx0XHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5mb3JjZVNlcGFyYXRlTVZQID0gZm9yY2VTZXBhcmF0ZU1WUDtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAodGhpcy5fc2NyZWVuUGFzcykge1xuXHRcdFx0dGhpcy5fcFJlcXVpcmVzQmxlbmRpbmcgPSAodGhpcy5fcEJsZW5kTW9kZSAhPSBCbGVuZE1vZGUuTk9STUFMIHx8IHRoaXMuX2FscGhhQmxlbmRpbmcgfHwgKHRoaXMuX2NvbG9yVHJhbnNmb3JtICYmIHRoaXMuX2NvbG9yVHJhbnNmb3JtLmFscGhhTXVsdGlwbGllciA8IDEpKTtcblx0XHRcdC8vIGVmZmVjdHMgcGFzcyBpcyB0aGUgb25seSBwYXNzLCBzbyBpdCBzaG91bGQganVzdCBibGVuZCBub3JtYWxseVxuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5wYXNzTW9kZSA9IE1hdGVyaWFsUGFzc01vZGUuU1VQRVJfU0hBREVSO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5kZXB0aENvbXBhcmVNb2RlID0gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MucHJlc2VydmVBbHBoYSA9IHRoaXMuX3BSZXF1aXJlc0JsZW5kaW5nO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5jb2xvclRyYW5zZm9ybSA9IHRoaXMuX2NvbG9yVHJhbnNmb3JtO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5zZXRCbGVuZE1vZGUoKHRoaXMuX3BCbGVuZE1vZGUgPT0gQmxlbmRNb2RlLk5PUk1BTCAmJiB0aGlzLl9wUmVxdWlyZXNCbGVuZGluZyk/IEJsZW5kTW9kZS5MQVlFUiA6IHRoaXMuX3BCbGVuZE1vZGUpO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5mb3JjZVNlcGFyYXRlTVZQID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbml0Q2FzdGVyTGlnaHRQYXNzKClcblx0e1xuXG5cdFx0aWYgKHRoaXMuX2Nhc3RlckxpZ2h0UGFzcyA9PSBudWxsKVxuXHRcdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzID0gbmV3IFRyaWFuZ2xlTWV0aG9kUGFzcyhNYXRlcmlhbFBhc3NNb2RlLkxJR0hUSU5HKTtcblxuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5saWdodFBpY2tlciA9IG5ldyBTdGF0aWNMaWdodFBpY2tlcihbdGhpcy5fc2hhZG93TWV0aG9kLmNhc3RpbmdMaWdodF0pO1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5zaGFkb3dNZXRob2QgPSB0aGlzLl9zaGFkb3dNZXRob2Q7XG5cdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzLmRpZmZ1c2VNZXRob2QgPSB0aGlzLl9kaWZmdXNlTWV0aG9kO1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5hbWJpZW50TWV0aG9kID0gdGhpcy5fYW1iaWVudE1ldGhvZDtcblx0XHR0aGlzLl9jYXN0ZXJMaWdodFBhc3Mubm9ybWFsTWV0aG9kID0gdGhpcy5fbm9ybWFsTWV0aG9kO1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcy5zcGVjdWxhck1ldGhvZCA9IHRoaXMuX3NwZWN1bGFyTWV0aG9kO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVDYXN0ZXJMaWdodFBhc3MoKVxuXHR7XG5cdFx0dGhpcy5fY2FzdGVyTGlnaHRQYXNzLmRpc3Bvc2UoKTtcblx0XHR0aGlzLl9wUmVtb3ZlU2NyZWVuUGFzcyh0aGlzLl9jYXN0ZXJMaWdodFBhc3MpO1xuXHRcdHRoaXMuX2Nhc3RlckxpZ2h0UGFzcyA9IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGluaXROb25DYXN0ZXJMaWdodFBhc3NlcygpXG5cdHtcblx0XHR0aGlzLnJlbW92ZU5vbkNhc3RlckxpZ2h0UGFzc2VzKCk7XG5cdFx0dmFyIHBhc3M6VHJpYW5nbGVNZXRob2RQYXNzO1xuXHRcdHZhciBudW1EaXJMaWdodHM6bnVtYmVyID0gdGhpcy5fcExpZ2h0UGlja2VyLm51bURpcmVjdGlvbmFsTGlnaHRzO1xuXHRcdHZhciBudW1Qb2ludExpZ2h0czpudW1iZXIgPSB0aGlzLl9wTGlnaHRQaWNrZXIubnVtUG9pbnRMaWdodHM7XG5cdFx0dmFyIG51bUxpZ2h0UHJvYmVzOm51bWJlciA9IHRoaXMuX3BMaWdodFBpY2tlci5udW1MaWdodFByb2Jlcztcblx0XHR2YXIgZGlyTGlnaHRPZmZzZXQ6bnVtYmVyID0gMDtcblx0XHR2YXIgcG9pbnRMaWdodE9mZnNldDpudW1iZXIgPSAwO1xuXHRcdHZhciBwcm9iZU9mZnNldDpudW1iZXIgPSAwO1xuXG5cdFx0aWYgKCF0aGlzLl9jYXN0ZXJMaWdodFBhc3MpIHtcblx0XHRcdG51bURpckxpZ2h0cyArPSB0aGlzLl9wTGlnaHRQaWNrZXIubnVtQ2FzdGluZ0RpcmVjdGlvbmFsTGlnaHRzO1xuXHRcdFx0bnVtUG9pbnRMaWdodHMgKz0gdGhpcy5fcExpZ2h0UGlja2VyLm51bUNhc3RpbmdQb2ludExpZ2h0cztcblx0XHR9XG5cblx0XHR0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3NlcyA9IG5ldyBBcnJheTxUcmlhbmdsZU1ldGhvZFBhc3M+KCk7XG5cblx0XHR3aGlsZSAoZGlyTGlnaHRPZmZzZXQgPCBudW1EaXJMaWdodHMgfHwgcG9pbnRMaWdodE9mZnNldCA8IG51bVBvaW50TGlnaHRzIHx8IHByb2JlT2Zmc2V0IDwgbnVtTGlnaHRQcm9iZXMpIHtcblx0XHRcdHBhc3MgPSBuZXcgVHJpYW5nbGVNZXRob2RQYXNzKE1hdGVyaWFsUGFzc01vZGUuTElHSFRJTkcpO1xuXHRcdFx0cGFzcy5pbmNsdWRlQ2FzdGVycyA9IHRoaXMuX3NoYWRvd01ldGhvZCA9PSBudWxsO1xuXHRcdFx0cGFzcy5kaXJlY3Rpb25hbExpZ2h0c09mZnNldCA9IGRpckxpZ2h0T2Zmc2V0O1xuXHRcdFx0cGFzcy5wb2ludExpZ2h0c09mZnNldCA9IHBvaW50TGlnaHRPZmZzZXQ7XG5cdFx0XHRwYXNzLmxpZ2h0UHJvYmVzT2Zmc2V0ID0gcHJvYmVPZmZzZXQ7XG5cdFx0XHRwYXNzLmxpZ2h0UGlja2VyID0gdGhpcy5fcExpZ2h0UGlja2VyO1xuXHRcdFx0cGFzcy5kaWZmdXNlTWV0aG9kID0gdGhpcy5fZGlmZnVzZU1ldGhvZDtcblx0XHRcdHBhc3MuYW1iaWVudE1ldGhvZCA9IHRoaXMuX2FtYmllbnRNZXRob2Q7XG5cdFx0XHRwYXNzLm5vcm1hbE1ldGhvZCA9IHRoaXMuX25vcm1hbE1ldGhvZDtcblx0XHRcdHBhc3Muc3BlY3VsYXJNZXRob2QgPSB0aGlzLl9zcGVjdWxhck1ldGhvZDtcblx0XHRcdHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzLnB1c2gocGFzcyk7XG5cblx0XHRcdGRpckxpZ2h0T2Zmc2V0ICs9IHBhc3MuaU51bURpcmVjdGlvbmFsTGlnaHRzO1xuXHRcdFx0cG9pbnRMaWdodE9mZnNldCArPSBwYXNzLmlOdW1Qb2ludExpZ2h0cztcblx0XHRcdHByb2JlT2Zmc2V0ICs9IHBhc3MuaU51bUxpZ2h0UHJvYmVzO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlTm9uQ2FzdGVyTGlnaHRQYXNzZXMoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLl9ub25DYXN0ZXJMaWdodFBhc3Nlcylcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IHRoaXMuX25vbkNhc3RlckxpZ2h0UGFzc2VzLmxlbmd0aDsgKytpKVxuXHRcdFx0dGhpcy5fcFJlbW92ZVNjcmVlblBhc3ModGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXNbaV0pO1xuXG5cdFx0dGhpcy5fbm9uQ2FzdGVyTGlnaHRQYXNzZXMgPSBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVFZmZlY3RQYXNzKClcblx0e1xuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzLmFtYmllbnRNZXRob2QgIT0gdGhpcy5fYW1iaWVudE1ldGhvZClcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MuYW1iaWVudE1ldGhvZC5kaXNwb3NlKCk7XG5cblx0XHRpZiAodGhpcy5fc2NyZWVuUGFzcy5kaWZmdXNlTWV0aG9kICE9IHRoaXMuX2RpZmZ1c2VNZXRob2QpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLmRpZmZ1c2VNZXRob2QuZGlzcG9zZSgpO1xuXG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3Muc3BlY3VsYXJNZXRob2QgIT0gdGhpcy5fc3BlY3VsYXJNZXRob2QpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLnNwZWN1bGFyTWV0aG9kLmRpc3Bvc2UoKTtcblxuXHRcdGlmICh0aGlzLl9zY3JlZW5QYXNzLm5vcm1hbE1ldGhvZCAhPSB0aGlzLl9ub3JtYWxNZXRob2QpXG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLm5vcm1hbE1ldGhvZC5kaXNwb3NlKCk7XG5cblx0XHR0aGlzLl9wUmVtb3ZlU2NyZWVuUGFzcyh0aGlzLl9zY3JlZW5QYXNzKTtcblx0XHR0aGlzLl9zY3JlZW5QYXNzID0gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgaW5pdEVmZmVjdFBhc3MoKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NjcmVlblBhc3MgPT0gbnVsbClcblx0XHRcdHRoaXMuX3NjcmVlblBhc3MgPSBuZXcgVHJpYW5nbGVNZXRob2RQYXNzKCk7XG5cblx0XHRpZiAodGhpcy5fbWF0ZXJpYWxNb2RlID09IFRyaWFuZ2xlTWF0ZXJpYWxNb2RlLlNJTkdMRV9QQVNTKSB7XG5cdFx0XHR0aGlzLl9zY3JlZW5QYXNzLmFtYmllbnRNZXRob2QgPSB0aGlzLl9hbWJpZW50TWV0aG9kO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5kaWZmdXNlTWV0aG9kID0gdGhpcy5fZGlmZnVzZU1ldGhvZDtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3Muc3BlY3VsYXJNZXRob2QgPSB0aGlzLl9zcGVjdWxhck1ldGhvZDtcblx0XHRcdHRoaXMuX3NjcmVlblBhc3Mubm9ybWFsTWV0aG9kID0gdGhpcy5fbm9ybWFsTWV0aG9kO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5zaGFkb3dNZXRob2QgPSB0aGlzLl9zaGFkb3dNZXRob2Q7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9tYXRlcmlhbE1vZGUgPT0gVHJpYW5nbGVNYXRlcmlhbE1vZGUuTVVMVElfUEFTUykge1xuXHRcdFx0aWYgKHRoaXMubnVtTGlnaHRzID09IDApIHtcblx0XHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5hbWJpZW50TWV0aG9kID0gdGhpcy5fYW1iaWVudE1ldGhvZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX3NjcmVlblBhc3MuYW1iaWVudE1ldGhvZCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3NjcmVlblBhc3MucHJlc2VydmVBbHBoYSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fc2NyZWVuUGFzcy5ub3JtYWxNZXRob2QgPSB0aGlzLl9ub3JtYWxNZXRob2Q7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtYXhpbXVtIHRvdGFsIG51bWJlciBvZiBsaWdodHMgcHJvdmlkZWQgYnkgdGhlIGxpZ2h0IHBpY2tlci5cblx0ICovXG5cdHByaXZhdGUgZ2V0IG51bUxpZ2h0cygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BMaWdodFBpY2tlcj8gdGhpcy5fcExpZ2h0UGlja2VyLm51bUxpZ2h0UHJvYmVzICsgdGhpcy5fcExpZ2h0UGlja2VyLm51bURpcmVjdGlvbmFsTGlnaHRzICsgdGhpcy5fcExpZ2h0UGlja2VyLm51bVBvaW50TGlnaHRzICsgdGhpcy5fcExpZ2h0UGlja2VyLm51bUNhc3RpbmdEaXJlY3Rpb25hbExpZ2h0cyArIHRoaXMuX3BMaWdodFBpY2tlci5udW1DYXN0aW5nUG9pbnRMaWdodHMgOiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgbGlnaHRzIHRoYXQgZG9uJ3QgY2FzdCBzaGFkb3dzLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXQgbnVtTm9uQ2FzdGVycygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BMaWdodFBpY2tlcj8gdGhpcy5fcExpZ2h0UGlja2VyLm51bUxpZ2h0UHJvYmVzICsgdGhpcy5fcExpZ2h0UGlja2VyLm51bURpcmVjdGlvbmFsTGlnaHRzICsgdGhpcy5fcExpZ2h0UGlja2VyLm51bVBvaW50TGlnaHRzIDogMDtcblx0fVxufVxuXG5leHBvcnQgPSBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsOyJdfQ== \ No newline at end of file diff --git a/lib/materials/TriangleMethodMaterial.ts b/lib/materials/TriangleMethodMaterial.ts index cf91aee0..a232c8e4 100644 --- a/lib/materials/TriangleMethodMaterial.ts +++ b/lib/materials/TriangleMethodMaterial.ts @@ -5,8 +5,8 @@ import BlendMode = require("awayjs-display/lib/base/BlendMode"); import Camera = require("awayjs-display/lib/entities/Camera"); import StaticLightPicker = require("awayjs-display/lib/materials/lightpickers/StaticLightPicker"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); import AmbientBasicMethod = require("awayjs-stagegl/lib/materials/methods/AmbientBasicMethod"); import DiffuseBasicMethod = require("awayjs-stagegl/lib/materials/methods/DiffuseBasicMethod"); import EffectMethodBase = require("awayjs-stagegl/lib/materials/methods/EffectMethodBase"); diff --git a/lib/materials/compilation/ShaderLightingCompiler.js b/lib/materials/compilation/ShaderLightingCompiler.js index bf5af047..80a57711 100755 --- a/lib/materials/compilation/ShaderLightingCompiler.js +++ b/lib/materials/compilation/ShaderLightingCompiler.js @@ -5,7 +5,7 @@ var __extends = this.__extends || function (d, b) { d.prototype = new __(); }; var LightSources = require("awayjs-display/lib/materials/LightSources"); -var ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); +var ContextGLProfile = require("awayjs-stagegl/lib/base/ContextGLProfile"); var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); /** * ShaderCompilerBase is an abstract base class for shader compilers that use modular shader methods to assemble a @@ -252,4 +252,4 @@ var ShaderLightingCompiler = (function (_super) { })(ShaderCompilerBase); module.exports = ShaderLightingCompiler; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVybGlnaHRpbmdjb21waWxlci50cyJdLCJuYW1lcyI6WyJTaGFkZXJMaWdodGluZ0NvbXBpbGVyIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb25zdHJ1Y3RvciIsIlNoYWRlckxpZ2h0aW5nQ29tcGlsZXIucENvbXBpbGVEZXBlbmRlbmNpZXMiLCJTaGFkZXJMaWdodGluZ0NvbXBpbGVyLnBDb21waWxlU2hhZG93Q29kZSIsIlNoYWRlckxpZ2h0aW5nQ29tcGlsZXIuaW5pdExpZ2h0UmVnaXN0ZXJzIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb21waWxlTGlnaHRDb2RlIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb21waWxlTGlnaHRQcm9iZUNvZGUiLCJTaGFkZXJMaWdodGluZ0NvbXBpbGVyLnBJbml0UmVnaXN0ZXJJbmRpY2VzIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5wQ2FsY3VsYXRlRGVwZW5kZW5jaWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFlBQVksV0FBZSwyQ0FBMkMsQ0FBQyxDQUFDO0FBRS9FLElBQU8sZ0JBQWdCLFdBQWMsa0RBQWtELENBQUMsQ0FBQztBQUV6RixJQUFPLGtCQUFrQixXQUFhLDZEQUE2RCxDQUFDLENBQUM7QUFLckcsQUFNQTs7Ozs7R0FERztJQUNHLHNCQUFzQjtJQUFTQSxVQUEvQkEsc0JBQXNCQSxVQUEyQkE7SUFXdERBOzs7T0FHR0E7SUFDSEEsU0FmS0Esc0JBQXNCQSxDQWVmQSxRQUE0QkEsRUFBRUEsWUFBaUNBLEVBQUVBLFlBQWlDQTtRQUU3R0Msa0JBQU1BLFFBQVFBLEVBQUVBLFlBQVlBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBO1FBRTVDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLFlBQVlBLENBQUNBO1FBQzFDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLFlBQVlBLENBQUNBO0lB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QUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxHQUFDQSxDQUFDQSxDQUFDQTtZQUNqR0EsQ0FBQ0E7UUFDRkEsQ0FBQ0E7UUFFREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyQ0EsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUM3Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7Z0JBQzFCQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLHFCQUFxQkEsRUFBRUEsQ0FBQ0E7Z0JBRWxGQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLHdCQUF3QkEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzdEQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLHdCQUF3QkEsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxHQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsQ0FBQ0E7UUFDRkEsQ0FBQ0E7UUFFREEsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUM3Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7WUFDMUJBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsdUJBQXVCQSxFQUFFQSxDQUFDQTtZQUVwRkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EscUJBQXFC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Z0NvbXBpbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWdodFNvdXJjZXNcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9MaWdodFNvdXJjZXNcIik7XG5cbmltcG9ydCBDb250ZXh0R0xQcm9maWxlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFByb2ZpbGVcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJDb21waWxlckJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckNvbXBpbGVyQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJMaWdodGluZ09iamVjdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdPYmplY3RcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IElMaWdodGluZ1Bhc3NTdGFnZUdMXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvSUxpZ2h0aW5nUGFzc1N0YWdlR0xcIik7XG5cbi8qKlxuICogU2hhZGVyQ29tcGlsZXJCYXNlIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHNoYWRlciBjb21waWxlcnMgdGhhdCB1c2UgbW9kdWxhciBzaGFkZXIgbWV0aG9kcyB0byBhc3NlbWJsZSBhXG4gKiBtYXRlcmlhbC4gQ29uY3JldGUgc3ViY2xhc3NlcyBhcmUgdXNlZCBieSB0aGUgZGVmYXVsdCBtYXRlcmlhbHMuXG4gKlxuICogQHNlZSBhd2F5Lm1hdGVyaWFscy5TaGFkaW5nTWV0aG9kQmFzZVxuICovXG5jbGFzcyBTaGFkZXJMaWdodGluZ0NvbXBpbGVyIGV4dGVuZHMgU2hhZGVyQ29tcGlsZXJCYXNlXG57XG5cdHByaXZhdGUgX21hdGVyaWFsTGlnaHRpbmdQYXNzOklMaWdodGluZ1Bhc3NTdGFnZUdMO1xuXHRwcml2YXRlIF9zaGFkZXJMaWdodGluZ09iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdDtcblx0cHVibGljIF9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHM6QXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50Pjtcblx0cHVibGljIF9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzOkFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD47XG5cdHB1YmxpYyBfZGlyTGlnaHRGcmFnbWVudENvbnN0YW50czpBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+O1xuXHRwdWJsaWMgX2RpckxpZ2h0VmVydGV4Q29uc3RhbnRzOkFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD47XG5cblx0cHVibGljIF9wTnVtUHJvYmVSZWdpc3RlcnM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNoYWRlckNvbXBpbGVyQmFzZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBwcm9maWxlIFRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGUgb2YgdGhlIHJlbmRlcmVyLlxuXHQgKi9cblx0Y29uc3RydWN0b3IobWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSwgbWF0ZXJpYWxQYXNzOklMaWdodGluZ1Bhc3NTdGFnZUdMLCBzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QpXG5cdHtcblx0XHRzdXBlcihtYXRlcmlhbCwgbWF0ZXJpYWxQYXNzLCBzaGFkZXJPYmplY3QpO1xuXG5cdFx0dGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MgPSBtYXRlcmlhbFBhc3M7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QgPSBzaGFkZXJPYmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGlsZSB0aGUgY29kZSBmb3IgdGhlIG1ldGhvZHMuXG5cdCAqL1xuXHRwdWJsaWMgcENvbXBpbGVEZXBlbmRlbmNpZXMoKVxuXHR7XG5cdFx0c3VwZXIucENvbXBpbGVEZXBlbmRlbmNpZXMoKTtcblxuXHRcdC8vY29tcGlsZSB0aGUgbGlnaHRpbmcgY29kZVxuXHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzU2hhZG93cylcblx0XHRcdHRoaXMucENvbXBpbGVTaGFkb3dDb2RlKCk7XG5cblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0cykge1xuXHRcdFx0dGhpcy5pbml0TGlnaHRSZWdpc3RlcnMoKTtcblx0XHRcdHRoaXMuY29tcGlsZUxpZ2h0Q29kZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzUHJvYmVzKVxuXHRcdFx0dGhpcy5jb21waWxlTGlnaHRQcm9iZUNvZGUoKTtcblxuXHRcdHRoaXMuX3BWZXJ0ZXhDb2RlICs9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pR2V0UG9zdExpZ2h0aW5nVmVydGV4Q29kZSh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdCwgdGhpcy5fcFJlZ2lzdGVyQ2FjaGUsIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMpO1xuXHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQb3N0TGlnaHRpbmdGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgY29kZSB0byBwcm92aWRlIHNoYWRvdyBtYXBwaW5nLlxuXHQgKi9cblx0cHVibGljIHBDb21waWxlU2hhZG93Q29kZSgpXG5cdHtcblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3Qubm9ybWFsRGVwZW5kZW5jaWVzID4gMCkge1xuXHRcdFx0dGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQgPSB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLnNoYWRvd1RhcmdldCA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdHRoaXMuX3BSZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLnNoYWRvd1RhcmdldCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGNvbnN0YW50IHJlZ2lzdGVycyB0byBjb250YWluIGxpZ2h0IGRhdGEuXG5cdCAqL1xuXHRwcml2YXRlIGluaXRMaWdodFJlZ2lzdGVycygpXG5cdHtcblx0XHQvLyBpbml0IHRoZXNlIGZpcnN0IHNvIHdlJ3JlIHN1cmUgdGhleSdyZSBpbiBzZXF1ZW5jZVxuXHRcdHZhciBpOm51bWJlciwgbGVuOm51bWJlcjtcblxuXHRcdGlmICh0aGlzLl9kaXJMaWdodFZlcnRleENvbnN0YW50cykge1xuXHRcdFx0bGVuID0gdGhpcy5fZGlyTGlnaHRWZXJ0ZXhDb25zdGFudHMubGVuZ3RoO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdHRoaXMuX2RpckxpZ2h0VmVydGV4Q29uc3RhbnRzW2ldID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0VmVydGV4Q29uc3RhbnRJbmRleCA9PSAtMSlcblx0XHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFZlcnRleENvbnN0YW50SW5kZXggPSB0aGlzLl9kaXJMaWdodFZlcnRleENvbnN0YW50c1tpXS5pbmRleCo0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzKSB7XG5cdFx0XHRsZW4gPSB0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzLmxlbmd0aDtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0XHR0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzW2ldID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0VmVydGV4Q29uc3RhbnRJbmRleCA9PSAtMSlcblx0XHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFZlcnRleENvbnN0YW50SW5kZXggPSB0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzW2ldLmluZGV4KjQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGVuID0gdGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50cy5sZW5ndGg7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHR0aGlzLl9kaXJMaWdodEZyYWdtZW50Q29uc3RhbnRzW2ldID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0RnJhZ21lbnRDb25zdGFudEluZGV4ID09IC0xKVxuXHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9IHRoaXMuX2RpckxpZ2h0RnJhZ21lbnRDb25zdGFudHNbaV0uaW5kZXgqNDtcblx0XHR9XG5cblx0XHRsZW4gPSB0aGlzLl9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHMubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0dGhpcy5fcG9pbnRMaWdodEZyYWdtZW50Q29uc3RhbnRzW2ldID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0RnJhZ21lbnRDb25zdGFudEluZGV4ID09IC0xKVxuXHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9IHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50c1tpXS5pbmRleCo0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDb21waWxlcyB0aGUgc2hhZGluZyBjb2RlIGZvciBkaXJlY3Rpb25hbCBhbmQgcG9pbnQgbGlnaHRzLlxuXHQgKi9cblx0cHJpdmF0ZSBjb21waWxlTGlnaHRDb2RlKClcblx0e1xuXHRcdHZhciBkaWZmdXNlQ29sb3JSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRcdHZhciBzcGVjdWxhckNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgbGlnaHRQb3NSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRcdHZhciBsaWdodERpclJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cdFx0dmFyIHZlcnRleFJlZ0luZGV4Om51bWJlciA9IDA7XG5cdFx0dmFyIGZyYWdtZW50UmVnSW5kZXg6bnVtYmVyID0gMDtcblx0XHR2YXIgYWRkU3BlYzpib29sZWFuID0gdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0c0ZvclNwZWN1bGFyO1xuXHRcdHZhciBhZGREaWZmOmJvb2xlYW4gPSB0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzTGlnaHRzRm9yRGlmZnVzZTtcblxuXHRcdC8vY29tcGlsZSB0aGUgc2hhZGluZyBjb2RlIGZvciBkaXJlY3Rpb25hbCBsaWdodHMuXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bURpcmVjdGlvbmFsTGlnaHRzOyArK2kpIHtcblx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzVGFuZ2VudFNwYWNlKSB7XG5cdFx0XHRcdGxpZ2h0RGlyUmVnID0gdGhpcy5fZGlyTGlnaHRWZXJ0ZXhDb25zdGFudHNbdmVydGV4UmVnSW5kZXgrK107XG5cblx0XHRcdFx0dmFyIGxpZ2h0VmFyeWluZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmFyeWluZygpO1xuXG5cdFx0XHRcdHRoaXMuX3BWZXJ0ZXhDb2RlICs9IFwibTMzIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIueHl6LCBcIiArIGxpZ2h0RGlyUmVnICsgXCIsIFwiICsgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5hbmltYXRlZFRhbmdlbnQgKyBcIlxcblwiICtcblx0XHRcdFx0XHRcIm1vdiBcIiArIGxpZ2h0VmFyeWluZyArIFwiLncsIFwiICsgbGlnaHREaXJSZWcgKyBcIi53XFxuXCI7XG5cblx0XHRcdFx0bGlnaHREaXJSZWcgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRcdHRoaXMuX3BSZWdpc3RlckNhY2hlLmFkZFZlcnRleFRlbXBVc2FnZXMobGlnaHREaXJSZWcsIDEpO1xuXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gXCJucm0gXCIgKyBsaWdodERpclJlZyArIFwiLnh5eiwgXCIgKyBsaWdodFZhcnlpbmcgKyBcIlxcblwiICtcblx0XHRcdFx0XHRcIm1vdiBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyBsaWdodFZhcnlpbmcgKyBcIi53XFxuXCI7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxpZ2h0RGlyUmVnID0gdGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXHRcdFx0fVxuXG5cdFx0XHRkaWZmdXNlQ29sb3JSZWcgPSB0aGlzLl9kaXJMaWdodEZyYWdtZW50Q29uc3RhbnRzW2ZyYWdtZW50UmVnSW5kZXgrK107XG5cdFx0XHRzcGVjdWxhckNvbG9yUmVnID0gdGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXG5cdFx0XHRpZiAoYWRkRGlmZilcblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faUdldFBlckxpZ2h0RGlmZnVzZUZyYWdtZW50Q29kZSh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdCwgbGlnaHREaXJSZWcsIGRpZmZ1c2VDb2xvclJlZywgdGhpcy5fcFJlZ2lzdGVyQ2FjaGUsIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHRpZiAoYWRkU3BlYylcblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faUdldFBlckxpZ2h0U3BlY3VsYXJGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIGxpZ2h0RGlyUmVnLCBzcGVjdWxhckNvbG9yUmVnLCB0aGlzLl9wUmVnaXN0ZXJDYWNoZSwgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzVGFuZ2VudFNwYWNlKVxuXHRcdFx0XHR0aGlzLl9wUmVnaXN0ZXJDYWNoZS5yZW1vdmVWZXJ0ZXhUZW1wVXNhZ2UobGlnaHREaXJSZWcpO1xuXHRcdH1cblxuXHRcdHZlcnRleFJlZ0luZGV4ID0gMDtcblx0XHRmcmFnbWVudFJlZ0luZGV4ID0gMDtcblxuXHRcdC8vY29tcGlsZSB0aGUgc2hhZGluZyBjb2RlIGZvciBwb2ludCBsaWdodHNcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtUG9pbnRMaWdodHM7ICsraSkge1xuXG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSB8fCAhdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0dsb2JhbFBvc0ZyYWdtZW50KVxuXHRcdFx0XHRsaWdodFBvc1JlZyA9IHRoaXMuX3BvaW50TGlnaHRWZXJ0ZXhDb25zdGFudHNbdmVydGV4UmVnSW5kZXgrK107XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGxpZ2h0UG9zUmVnID0gdGhpcy5fcG9pbnRMaWdodEZyYWdtZW50Q29uc3RhbnRzW2ZyYWdtZW50UmVnSW5kZXgrK107XG5cblx0XHRcdGRpZmZ1c2VDb2xvclJlZyA9IHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXHRcdFx0c3BlY3VsYXJDb2xvclJlZyA9IHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXG5cdFx0XHRsaWdodERpclJlZyA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdHRoaXMuX3BSZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyhsaWdodERpclJlZywgMSk7XG5cblx0XHRcdHZhciBsaWdodFZhcnlpbmc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSkge1xuXHRcdFx0XHRsaWdodFZhcnlpbmcgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmFyeWluZygpO1xuXHRcdFx0XHR2YXIgdGVtcDpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlVmVydGV4VmVjdG9yVGVtcCgpO1xuXHRcdFx0XHR0aGlzLl9wVmVydGV4Q29kZSArPSBcInN1YiBcIiArIHRlbXAgKyBcIiwgXCIgKyBsaWdodFBvc1JlZyArIFwiLCBcIiArIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMubG9jYWxQb3NpdGlvbiArIFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwibTMzIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIueHl6LCBcIiArIHRlbXAgKyBcIiwgXCIgKyB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLmFuaW1hdGVkVGFuZ2VudCArIFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwibW92IFwiICsgbGlnaHRWYXJ5aW5nICsgXCIudywgXCIgKyB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLmxvY2FsUG9zaXRpb24gKyBcIi53XFxuXCI7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzR2xvYmFsUG9zRnJhZ21lbnQpIHtcblx0XHRcdFx0bGlnaHRWYXJ5aW5nID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZhcnlpbmcoKTtcblx0XHRcdFx0dGhpcy5fcFZlcnRleENvZGUgKz0gXCJzdWIgXCIgKyBsaWdodFZhcnlpbmcgKyBcIiwgXCIgKyBsaWdodFBvc1JlZyArIFwiLCBcIiArIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMuZ2xvYmFsUG9zaXRpb25WZXJ0ZXggKyBcIlxcblwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGlnaHRWYXJ5aW5nID0gbGlnaHREaXJSZWc7XG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gXCJzdWIgXCIgKyBsaWdodERpclJlZyArIFwiLCBcIiArIGxpZ2h0UG9zUmVnICsgXCIsIFwiICsgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZhcnlpbmcgKyBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0RmFsbE9mZikge1xuXHRcdFx0XHQvLyBjYWxjdWxhdGUgYXR0ZW51YXRpb25cblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSAvLyBhdHRlbnVhdGVcblx0XHRcdFx0XHRcImRwMyBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyBsaWdodFZhcnlpbmcgKyBcIiwgXCIgKyBsaWdodFZhcnlpbmcgKyBcIlxcblwiICsgLy8gdyA9IGQgLSByYWRpdXNcblx0XHRcdFx0XHRcInN1YiBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgZGlmZnVzZUNvbG9yUmVnICsgXCIud1xcblwiICsgLy8gdyA9IChkIC0gcmFkaXVzKS8obWF4LW1pbilcblx0XHRcdFx0XHRcIm11bCBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgc3BlY3VsYXJDb2xvclJlZyArIFwiLndcXG5cIiArIC8vIHcgPSBjbGFtcCh3LCAwLCAxKVxuXHRcdFx0XHRcdFwic2F0IFwiICsgbGlnaHREaXJSZWcgKyBcIi53LCBcIiArIGxpZ2h0RGlyUmVnICsgXCIud1xcblwiICsgLy8gdyA9IDEtd1xuXHRcdFx0XHRcdFwic3ViIFwiICsgbGlnaHREaXJSZWcgKyBcIi53LCBcIiArIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLncsIFwiICsgbGlnaHREaXJSZWcgKyBcIi53XFxuXCIgKyAvLyBub3JtYWxpemVcblx0XHRcdFx0XHRcIm5ybSBcIiArIGxpZ2h0RGlyUmVnICsgXCIueHl6LCBcIiArIGxpZ2h0VmFyeWluZyArIFwiXFxuXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IFwibnJtIFwiICsgbGlnaHREaXJSZWcgKyBcIi54eXosIFwiICsgbGlnaHRWYXJ5aW5nICsgXCJcXG5cIiArXG5cdFx0XHRcdFx0XCJtb3YgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIud1xcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRGcmFnbWVudENvbnN0YW50SW5kZXggPT0gLTEpXG5cdFx0XHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0RnJhZ21lbnRDb25zdGFudEluZGV4ID0gbGlnaHRQb3NSZWcuaW5kZXgqNDtcblxuXHRcdFx0aWYgKGFkZERpZmYpXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJMaWdodERpZmZ1c2VGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIGxpZ2h0RGlyUmVnLCBkaWZmdXNlQ29sb3JSZWcsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdFx0aWYgKGFkZFNwZWMpXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LCBsaWdodERpclJlZywgc3BlY3VsYXJDb2xvclJlZywgdGhpcy5fcFJlZ2lzdGVyQ2FjaGUsIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHR0aGlzLl9wUmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZShsaWdodERpclJlZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBpbGVzIHNoYWRpbmcgY29kZSBmb3IgbGlnaHQgcHJvYmVzLlxuXHQgKi9cblx0cHJpdmF0ZSBjb21waWxlTGlnaHRQcm9iZUNvZGUoKVxuXHR7XG5cdFx0dmFyIHdlaWdodFJlZzpzdHJpbmc7XG5cdFx0dmFyIHdlaWdodENvbXBvbmVudHMgPSBbIFwiLnhcIiwgXCIueVwiLCBcIi56XCIsIFwiLndcIiBdO1xuXHRcdHZhciB3ZWlnaHRSZWdpc3RlcnM6QXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50PiA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KCk7XG5cdFx0dmFyIGk6bnVtYmVyO1xuXHRcdHZhciB0ZXhSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRcdHZhciBhZGRTcGVjOmJvb2xlYW4gPSB0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzUHJvYmVzRm9yU3BlY3VsYXI7XG5cdFx0dmFyIGFkZERpZmY6Ym9vbGVhbiA9IHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNQcm9iZXNGb3JEaWZmdXNlO1xuXG5cdFx0aWYgKGFkZERpZmYpXG5cdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFByb2JlRGlmZnVzZUluZGljZXMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG5cdFx0aWYgKGFkZFNwZWMpXG5cdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFByb2JlU3BlY3VsYXJJbmRpY2VzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9wTnVtUHJvYmVSZWdpc3RlcnM7ICsraSkge1xuXHRcdFx0d2VpZ2h0UmVnaXN0ZXJzW2ldID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0aWYgKGkgPT0gMClcblx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QucHJvYmVXZWlnaHRzSW5kZXggPSB3ZWlnaHRSZWdpc3RlcnNbaV0uaW5kZXgqNDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bUxpZ2h0UHJvYmVzOyArK2kpIHtcblx0XHRcdHdlaWdodFJlZyA9IHdlaWdodFJlZ2lzdGVyc1tNYXRoLmZsb29yKGkvNCldLnRvU3RyaW5nKCkgKyB3ZWlnaHRDb21wb25lbnRzW2klNF07XG5cblx0XHRcdGlmIChhZGREaWZmKSB7XG5cdFx0XHRcdHRleFJlZyA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0XHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0UHJvYmVEaWZmdXNlSW5kaWNlc1tpXSA9IHRleFJlZy5pbmRleDtcblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faUdldFBlclByb2JlRGlmZnVzZUZyYWdtZW50Q29kZSh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdCwgdGV4UmVnLCB3ZWlnaHRSZWcsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFkZFNwZWMpIHtcblx0XHRcdFx0dGV4UmVnID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRQcm9iZVNwZWN1bGFySW5kaWNlc1tpXSA9IHRleFJlZy5pbmRleDtcblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faUdldFBlclByb2JlU3BlY3VsYXJGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIHRleFJlZywgd2VpZ2h0UmVnLCB0aGlzLl9wUmVnaXN0ZXJDYWNoZSwgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IGFsbCB0aGUgaW5kaWNlcyB0byBcInVudXNlZFwiLlxuXHQgKi9cblx0cHVibGljIHBJbml0UmVnaXN0ZXJJbmRpY2VzKClcblx0e1xuXHRcdHN1cGVyLnBJbml0UmVnaXN0ZXJJbmRpY2VzKCk7XG5cblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFZlcnRleENvbnN0YW50SW5kZXggPSAtMTtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9IC0xO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnByb2JlV2VpZ2h0c0luZGV4ID0gLTE7XG5cblx0XHR0aGlzLl9wTnVtUHJvYmVSZWdpc3RlcnMgPSBNYXRoLmNlaWwodGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bUxpZ2h0UHJvYmVzLzQpO1xuXG5cdFx0Ly9pbml0IGxpZ2h0IGRhdGFcblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSB8fCAhdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0dsb2JhbFBvc0ZyYWdtZW50KSB7XG5cdFx0XHR0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzID0gbmV3IEFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD4odGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bVBvaW50TGlnaHRzKTtcblx0XHRcdHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1Qb2ludExpZ2h0cyoyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcG9pbnRMaWdodEZyYWdtZW50Q29uc3RhbnRzID0gbmV3IEFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD4odGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bVBvaW50TGlnaHRzKjMpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzVGFuZ2VudFNwYWNlKSB7XG5cdFx0XHR0aGlzLl9kaXJMaWdodFZlcnRleENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9kaXJMaWdodEZyYWdtZW50Q29uc3RhbnRzID0gbmV3IEFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD4odGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bURpcmVjdGlvbmFsTGlnaHRzKjIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9kaXJMaWdodEZyYWdtZW50Q29uc3RhbnRzID0gbmV3IEFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD4odGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bURpcmVjdGlvbmFsTGlnaHRzKjMpO1xuXHRcdH1cblx0fVxuXG5cblx0LyoqXG5cdCAqIEZpZ3VyZSBvdXQgd2hpY2ggbmFtZWQgcmVnaXN0ZXJzIGFyZSByZXF1aXJlZCwgYW5kIGhvdyBvZnRlbi5cblx0ICovXG5cdHB1YmxpYyBwQ2FsY3VsYXRlRGVwZW5kZW5jaWVzKClcblx0e1xuXHRcdHZhciBudW1BbGxMaWdodHM6bnVtYmVyID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bVBvaW50TGlnaHRzICsgdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bURpcmVjdGlvbmFsTGlnaHRzO1xuXHRcdHZhciBudW1MaWdodFByb2JlczpudW1iZXIgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtTGlnaHRQcm9iZXM7XG5cdFx0dmFyIGRpZmZ1c2VMaWdodFNvdXJjZXM6bnVtYmVyID0gdGhpcy5fcE1hdGVyaWFsLmRpZmZ1c2VMaWdodFNvdXJjZXM7XG5cdFx0dmFyIHNwZWN1bGFyTGlnaHRTb3VyY2VzOm51bWJlciA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pVXNlc1NwZWN1bGFyKCk/IHRoaXMuX3BNYXRlcmlhbC5zcGVjdWxhckxpZ2h0U291cmNlcyA6IDB4MDA7XG5cdFx0dmFyIGNvbWJpbmVkTGlnaHRTb3VyY2VzOm51bWJlciA9IGRpZmZ1c2VMaWdodFNvdXJjZXMgfCBzcGVjdWxhckxpZ2h0U291cmNlcztcblxuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodEZhbGxPZmYgPSB0aGlzLl9wTWF0ZXJpYWwuZW5hYmxlTGlnaHRGYWxsT2ZmICYmIHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnByb2ZpbGUgIT0gQ29udGV4dEdMUHJvZmlsZS5CQVNFTElORV9DT05TVFJBSU5FRDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5udW1MaWdodHMgPSBudW1BbGxMaWdodHMgKyBudW1MaWdodFByb2Jlcztcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5udW1Qb2ludExpZ2h0cyA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1Qb2ludExpZ2h0cztcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5udW1EaXJlY3Rpb25hbExpZ2h0cyA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5udW1MaWdodFByb2JlcyA9IG51bUxpZ2h0UHJvYmVzO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnBvaW50TGlnaHRzT2Zmc2V0ID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MucG9pbnRMaWdodHNPZmZzZXQ7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QuZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5kaXJlY3Rpb25hbExpZ2h0c09mZnNldDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFByb2Jlc09mZnNldCA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmxpZ2h0UHJvYmVzT2Zmc2V0O1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0UGlja2VyID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MubGlnaHRQaWNrZXI7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0cyA9IG51bUFsbExpZ2h0cyA+IDAgJiYgKGNvbWJpbmVkTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLkxJR0hUUykgIT0gMDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzUHJvYmVzID0gbnVtTGlnaHRQcm9iZXMgPiAwICYmIChjb21iaW5lZExpZ2h0U291cmNlcyAmIExpZ2h0U291cmNlcy5QUk9CRVMpICE9IDA7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0c0ZvclNwZWN1bGFyID0gbnVtQWxsTGlnaHRzID4gMCAmJiAoc3BlY3VsYXJMaWdodFNvdXJjZXMgJiBMaWdodFNvdXJjZXMuTElHSFRTKSAhPSAwO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNQcm9iZXNGb3JTcGVjdWxhciA9IG51bUxpZ2h0UHJvYmVzID4gMCAmJiAoc3BlY3VsYXJMaWdodFNvdXJjZXMgJiBMaWdodFNvdXJjZXMuUFJPQkVTKSAhPSAwO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodHNGb3JEaWZmdXNlID0gbnVtQWxsTGlnaHRzID4gMCAmJiAoZGlmZnVzZUxpZ2h0U291cmNlcyAmIExpZ2h0U291cmNlcy5MSUdIVFMpICE9IDA7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1Byb2Jlc0ZvckRpZmZ1c2UgPSBudW1MaWdodFByb2JlcyA+IDAgJiYgKGRpZmZ1c2VMaWdodFNvdXJjZXMgJiBMaWdodFNvdXJjZXMuUFJPQkVTKSAhPSAwO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNTaGFkb3dzID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lVc2VzU2hhZG93cygpO1xuXG5cdFx0c3VwZXIucENhbGN1bGF0ZURlcGVuZGVuY2llcygpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRlckxpZ2h0aW5nQ29tcGlsZXI7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVybGlnaHRpbmdjb21waWxlci50cyJdLCJuYW1lcyI6WyJTaGFkZXJMaWdodGluZ0NvbXBpbGVyIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb25zdHJ1Y3RvciIsIlNoYWRlckxpZ2h0aW5nQ29tcGlsZXIucENvbXBpbGVEZXBlbmRlbmNpZXMiLCJTaGFkZXJMaWdodGluZ0NvbXBpbGVyLnBDb21waWxlU2hhZG93Q29kZSIsIlNoYWRlckxpZ2h0aW5nQ29tcGlsZXIuaW5pdExpZ2h0UmVnaXN0ZXJzIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb21waWxlTGlnaHRDb2RlIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5jb21waWxlTGlnaHRQcm9iZUNvZGUiLCJTaGFkZXJMaWdodGluZ0NvbXBpbGVyLnBJbml0UmVnaXN0ZXJJbmRpY2VzIiwiU2hhZGVyTGlnaHRpbmdDb21waWxlci5wQ2FsY3VsYXRlRGVwZW5kZW5jaWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFlBQVksV0FBZSwyQ0FBMkMsQ0FBQyxDQUFDO0FBRS9FLElBQU8sZ0JBQWdCLFdBQWMsMENBQTBDLENBQUMsQ0FBQztBQUVqRixJQUFPLGtCQUFrQixXQUFhLDZEQUE2RCxDQUFDLENBQUM7QUFLckcsQUFNQTs7Ozs7R0FERztJQUNHLHNCQUFzQjtJQUFTQSxVQUEvQkEsc0JBQXNCQSxVQUEyQkE7SUFXdERBOzs7T0FHR0E7SUFDSEEsU0FmS0Esc0JBQXNCQSxDQWVmQSxRQUE0QkEsRUFBRUEsWUFBaUNBLEVBQUVBLFlBQWlDQTtRQUU3R0Msa0JBQU1BLFFBQVFBLEVBQUVBLFlBQVlBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBO1FBRTVDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLFlBQVlBLENBQUNBO1FBQzFDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLFlBQVlBLENBQUNBO0lB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QUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxHQUFDQSxDQUFDQSxDQUFDQTtZQUNqR0EsQ0FBQ0E7UUFDRkEsQ0FBQ0E7UUFFREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyQ0EsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUM3Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7Z0JBQzFCQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLHFCQUFxQkEsRUFBRUEsQ0FBQ0E7Z0JBRWxGQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLHdCQUF3QkEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzdEQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLHdCQUF3QkEsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxHQUFDQSxDQUFDQSxDQUFDQTtZQUNuR0EsQ0FBQ0E7UUFDRkEsQ0FBQ0E7UUFFREEsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUM3Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7WUFDMUJBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsdUJBQXVCQSxFQUFFQSxDQUFDQTtZQUVwRkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EscUJBQXFC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Z0NvbXBpbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWdodFNvdXJjZXNcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9MaWdodFNvdXJjZXNcIik7XG5cbmltcG9ydCBDb250ZXh0R0xQcm9maWxlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xQcm9maWxlXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJDb21waWxlckJhc2VcIik7XG5pbXBvcnQgU2hhZGVyTGlnaHRpbmdPYmplY3RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckxpZ2h0aW5nT2JqZWN0XCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBJTGlnaHRpbmdQYXNzU3RhZ2VHTFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL0lMaWdodGluZ1Bhc3NTdGFnZUdMXCIpO1xuXG4vKipcbiAqIFNoYWRlckNvbXBpbGVyQmFzZSBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBzaGFkZXIgY29tcGlsZXJzIHRoYXQgdXNlIG1vZHVsYXIgc2hhZGVyIG1ldGhvZHMgdG8gYXNzZW1ibGUgYVxuICogbWF0ZXJpYWwuIENvbmNyZXRlIHN1YmNsYXNzZXMgYXJlIHVzZWQgYnkgdGhlIGRlZmF1bHQgbWF0ZXJpYWxzLlxuICpcbiAqIEBzZWUgYXdheS5tYXRlcmlhbHMuU2hhZGluZ01ldGhvZEJhc2VcbiAqL1xuY2xhc3MgU2hhZGVyTGlnaHRpbmdDb21waWxlciBleHRlbmRzIFNoYWRlckNvbXBpbGVyQmFzZVxue1xuXHRwcml2YXRlIF9tYXRlcmlhbExpZ2h0aW5nUGFzczpJTGlnaHRpbmdQYXNzU3RhZ2VHTDtcblx0cHJpdmF0ZSBfc2hhZGVyTGlnaHRpbmdPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3Q7XG5cdHB1YmxpYyBfcG9pbnRMaWdodEZyYWdtZW50Q29uc3RhbnRzOkFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD47XG5cdHB1YmxpYyBfcG9pbnRMaWdodFZlcnRleENvbnN0YW50czpBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+O1xuXHRwdWJsaWMgX2RpckxpZ2h0RnJhZ21lbnRDb25zdGFudHM6QXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50Pjtcblx0cHVibGljIF9kaXJMaWdodFZlcnRleENvbnN0YW50czpBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+O1xuXG5cdHB1YmxpYyBfcE51bVByb2JlUmVnaXN0ZXJzOm51bWJlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTaGFkZXJDb21waWxlckJhc2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gcHJvZmlsZSBUaGUgY29tcGF0aWJpbGl0eSBwcm9maWxlIG9mIHRoZSByZW5kZXJlci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzczpJTGlnaHRpbmdQYXNzU3RhZ2VHTCwgc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0KVxuXHR7XG5cdFx0c3VwZXIobWF0ZXJpYWwsIG1hdGVyaWFsUGFzcywgc2hhZGVyT2JqZWN0KTtcblxuXHRcdHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzID0gbWF0ZXJpYWxQYXNzO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0ID0gc2hhZGVyT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBpbGUgdGhlIGNvZGUgZm9yIHRoZSBtZXRob2RzLlxuXHQgKi9cblx0cHVibGljIHBDb21waWxlRGVwZW5kZW5jaWVzKClcblx0e1xuXHRcdHN1cGVyLnBDb21waWxlRGVwZW5kZW5jaWVzKCk7XG5cblx0XHQvL2NvbXBpbGUgdGhlIGxpZ2h0aW5nIGNvZGVcblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1NoYWRvd3MpXG5cdFx0XHR0aGlzLnBDb21waWxlU2hhZG93Q29kZSgpO1xuXG5cdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodHMpIHtcblx0XHRcdHRoaXMuaW5pdExpZ2h0UmVnaXN0ZXJzKCk7XG5cdFx0XHR0aGlzLmNvbXBpbGVMaWdodENvZGUoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1Byb2Jlcylcblx0XHRcdHRoaXMuY29tcGlsZUxpZ2h0UHJvYmVDb2RlKCk7XG5cblx0XHR0aGlzLl9wVmVydGV4Q29kZSArPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faUdldFBvc3RMaWdodGluZ1ZlcnRleENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pR2V0UG9zdExpZ2h0aW5nRnJhZ21lbnRDb2RlKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LCB0aGlzLl9wUmVnaXN0ZXJDYWNoZSwgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGNvZGUgdG8gcHJvdmlkZSBzaGFkb3cgbWFwcGluZy5cblx0ICovXG5cdHB1YmxpYyBwQ29tcGlsZVNoYWRvd0NvZGUoKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0Lm5vcm1hbERlcGVuZGVuY2llcyA+IDApIHtcblx0XHRcdHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0ID0gdGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHR0aGlzLl9wUmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQsIDEpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBjb25zdGFudCByZWdpc3RlcnMgdG8gY29udGFpbiBsaWdodCBkYXRhLlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0TGlnaHRSZWdpc3RlcnMoKVxuXHR7XG5cdFx0Ly8gaW5pdCB0aGVzZSBmaXJzdCBzbyB3ZSdyZSBzdXJlIHRoZXkncmUgaW4gc2VxdWVuY2Vcblx0XHR2YXIgaTpudW1iZXIsIGxlbjpudW1iZXI7XG5cblx0XHRpZiAodGhpcy5fZGlyTGlnaHRWZXJ0ZXhDb25zdGFudHMpIHtcblx0XHRcdGxlbiA9IHRoaXMuX2RpckxpZ2h0VmVydGV4Q29uc3RhbnRzLmxlbmd0aDtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0XHR0aGlzLl9kaXJMaWdodFZlcnRleENvbnN0YW50c1tpXSA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVWZXJ0ZXhDb25zdGFudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFZlcnRleENvbnN0YW50SW5kZXggPT0gLTEpXG5cdFx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRWZXJ0ZXhDb25zdGFudEluZGV4ID0gdGhpcy5fZGlyTGlnaHRWZXJ0ZXhDb25zdGFudHNbaV0uaW5kZXgqNDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcG9pbnRMaWdodFZlcnRleENvbnN0YW50cykge1xuXHRcdFx0bGVuID0gdGhpcy5fcG9pbnRMaWdodFZlcnRleENvbnN0YW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdFx0dGhpcy5fcG9pbnRMaWdodFZlcnRleENvbnN0YW50c1tpXSA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVWZXJ0ZXhDb25zdGFudCgpO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFZlcnRleENvbnN0YW50SW5kZXggPT0gLTEpXG5cdFx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRWZXJ0ZXhDb25zdGFudEluZGV4ID0gdGhpcy5fcG9pbnRMaWdodFZlcnRleENvbnN0YW50c1tpXS5pbmRleCo0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxlbiA9IHRoaXMuX2RpckxpZ2h0RnJhZ21lbnRDb25zdGFudHMubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0dGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50c1tpXSA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9PSAtMSlcblx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRGcmFnbWVudENvbnN0YW50SW5kZXggPSB0aGlzLl9kaXJMaWdodEZyYWdtZW50Q29uc3RhbnRzW2ldLmluZGV4KjQ7XG5cdFx0fVxuXG5cdFx0bGVuID0gdGhpcy5fcG9pbnRMaWdodEZyYWdtZW50Q29uc3RhbnRzLmxlbmd0aDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50c1tpXSA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGlmICh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9PSAtMSlcblx0XHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRGcmFnbWVudENvbnN0YW50SW5kZXggPSB0aGlzLl9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHNbaV0uaW5kZXgqNDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGlsZXMgdGhlIHNoYWRpbmcgY29kZSBmb3IgZGlyZWN0aW9uYWwgYW5kIHBvaW50IGxpZ2h0cy5cblx0ICovXG5cdHByaXZhdGUgY29tcGlsZUxpZ2h0Q29kZSgpXG5cdHtcblx0XHR2YXIgZGlmZnVzZUNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgc3BlY3VsYXJDb2xvclJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cdFx0dmFyIGxpZ2h0UG9zUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgbGlnaHREaXJSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRcdHZhciB2ZXJ0ZXhSZWdJbmRleDpudW1iZXIgPSAwO1xuXHRcdHZhciBmcmFnbWVudFJlZ0luZGV4Om51bWJlciA9IDA7XG5cdFx0dmFyIGFkZFNwZWM6Ym9vbGVhbiA9IHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodHNGb3JTcGVjdWxhcjtcblx0XHR2YXIgYWRkRGlmZjpib29sZWFuID0gdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0xpZ2h0c0ZvckRpZmZ1c2U7XG5cblx0XHQvL2NvbXBpbGUgdGhlIHNoYWRpbmcgY29kZSBmb3IgZGlyZWN0aW9uYWwgbGlnaHRzLlxuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0czsgKytpKSB7XG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSkge1xuXHRcdFx0XHRsaWdodERpclJlZyA9IHRoaXMuX2RpckxpZ2h0VmVydGV4Q29uc3RhbnRzW3ZlcnRleFJlZ0luZGV4KytdO1xuXG5cdFx0XHRcdHZhciBsaWdodFZhcnlpbmc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZhcnlpbmcoKTtcblxuXHRcdFx0XHR0aGlzLl9wVmVydGV4Q29kZSArPSBcIm0zMyBcIiArIGxpZ2h0VmFyeWluZyArIFwiLnh5eiwgXCIgKyBsaWdodERpclJlZyArIFwiLCBcIiArIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMuYW5pbWF0ZWRUYW5nZW50ICsgXCJcXG5cIiArXG5cdFx0XHRcdFx0XCJtb3YgXCIgKyBsaWdodFZhcnlpbmcgKyBcIi53LCBcIiArIGxpZ2h0RGlyUmVnICsgXCIud1xcblwiO1xuXG5cdFx0XHRcdGxpZ2h0RGlyUmVnID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdFx0XHR0aGlzLl9wUmVnaXN0ZXJDYWNoZS5hZGRWZXJ0ZXhUZW1wVXNhZ2VzKGxpZ2h0RGlyUmVnLCAxKTtcblxuXHRcdFx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IFwibnJtIFwiICsgbGlnaHREaXJSZWcgKyBcIi54eXosIFwiICsgbGlnaHRWYXJ5aW5nICsgXCJcXG5cIiArXG5cdFx0XHRcdFx0XCJtb3YgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIud1xcblwiO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsaWdodERpclJlZyA9IHRoaXMuX2RpckxpZ2h0RnJhZ21lbnRDb25zdGFudHNbZnJhZ21lbnRSZWdJbmRleCsrXTtcblx0XHRcdH1cblxuXHRcdFx0ZGlmZnVzZUNvbG9yUmVnID0gdGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXHRcdFx0c3BlY3VsYXJDb2xvclJlZyA9IHRoaXMuX2RpckxpZ2h0RnJhZ21lbnRDb25zdGFudHNbZnJhZ21lbnRSZWdJbmRleCsrXTtcblxuXHRcdFx0aWYgKGFkZERpZmYpXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJMaWdodERpZmZ1c2VGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIGxpZ2h0RGlyUmVnLCBkaWZmdXNlQ29sb3JSZWcsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdFx0aWYgKGFkZFNwZWMpXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LCBsaWdodERpclJlZywgc3BlY3VsYXJDb2xvclJlZywgdGhpcy5fcFJlZ2lzdGVyQ2FjaGUsIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSlcblx0XHRcdFx0dGhpcy5fcFJlZ2lzdGVyQ2FjaGUucmVtb3ZlVmVydGV4VGVtcFVzYWdlKGxpZ2h0RGlyUmVnKTtcblx0XHR9XG5cblx0XHR2ZXJ0ZXhSZWdJbmRleCA9IDA7XG5cdFx0ZnJhZ21lbnRSZWdJbmRleCA9IDA7XG5cblx0XHQvL2NvbXBpbGUgdGhlIHNoYWRpbmcgY29kZSBmb3IgcG9pbnQgbGlnaHRzXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bVBvaW50TGlnaHRzOyArK2kpIHtcblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNUYW5nZW50U3BhY2UgfHwgIXRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNHbG9iYWxQb3NGcmFnbWVudClcblx0XHRcdFx0bGlnaHRQb3NSZWcgPSB0aGlzLl9wb2ludExpZ2h0VmVydGV4Q29uc3RhbnRzW3ZlcnRleFJlZ0luZGV4KytdO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRsaWdodFBvc1JlZyA9IHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50c1tmcmFnbWVudFJlZ0luZGV4KytdO1xuXG5cdFx0XHRkaWZmdXNlQ29sb3JSZWcgPSB0aGlzLl9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHNbZnJhZ21lbnRSZWdJbmRleCsrXTtcblx0XHRcdHNwZWN1bGFyQ29sb3JSZWcgPSB0aGlzLl9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHNbZnJhZ21lbnRSZWdJbmRleCsrXTtcblxuXHRcdFx0bGlnaHREaXJSZWcgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHR0aGlzLl9wUmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXMobGlnaHREaXJSZWcsIDEpO1xuXG5cdFx0XHR2YXIgbGlnaHRWYXJ5aW5nOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNUYW5nZW50U3BhY2UpIHtcblx0XHRcdFx0bGlnaHRWYXJ5aW5nID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZhcnlpbmcoKTtcblx0XHRcdFx0dmFyIHRlbXA6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gdGhpcy5fcFJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVZlcnRleFZlY3RvclRlbXAoKTtcblx0XHRcdFx0dGhpcy5fcFZlcnRleENvZGUgKz0gXCJzdWIgXCIgKyB0ZW1wICsgXCIsIFwiICsgbGlnaHRQb3NSZWcgKyBcIiwgXCIgKyB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLmxvY2FsUG9zaXRpb24gKyBcIlxcblwiICtcblx0XHRcdFx0XHRcIm0zMyBcIiArIGxpZ2h0VmFyeWluZyArIFwiLnh5eiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5hbmltYXRlZFRhbmdlbnQgKyBcIlxcblwiICtcblx0XHRcdFx0XHRcIm1vdiBcIiArIGxpZ2h0VmFyeWluZyArIFwiLncsIFwiICsgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycy5sb2NhbFBvc2l0aW9uICsgXCIud1xcblwiO1xuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc0dsb2JhbFBvc0ZyYWdtZW50KSB7XG5cdFx0XHRcdGxpZ2h0VmFyeWluZyA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVWYXJ5aW5nKCk7XG5cdFx0XHRcdHRoaXMuX3BWZXJ0ZXhDb2RlICs9IFwic3ViIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIsIFwiICsgbGlnaHRQb3NSZWcgKyBcIiwgXCIgKyB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLmdsb2JhbFBvc2l0aW9uVmVydGV4ICsgXCJcXG5cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxpZ2h0VmFyeWluZyA9IGxpZ2h0RGlyUmVnO1xuXHRcdFx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IFwic3ViIFwiICsgbGlnaHREaXJSZWcgKyBcIiwgXCIgKyBsaWdodFBvc1JlZyArIFwiLCBcIiArIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMuZ2xvYmFsUG9zaXRpb25WYXJ5aW5nICsgXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodEZhbGxPZmYpIHtcblx0XHRcdFx0Ly8gY2FsY3VsYXRlIGF0dGVudWF0aW9uXG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gLy8gYXR0ZW51YXRlXG5cdFx0XHRcdFx0XCJkcDMgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgbGlnaHRWYXJ5aW5nICsgXCIsIFwiICsgbGlnaHRWYXJ5aW5nICsgXCJcXG5cIiArIC8vIHcgPSBkIC0gcmFkaXVzXG5cdFx0XHRcdFx0XCJzdWIgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgbGlnaHREaXJSZWcgKyBcIi53LCBcIiArIGRpZmZ1c2VDb2xvclJlZyArIFwiLndcXG5cIiArIC8vIHcgPSAoZCAtIHJhZGl1cykvKG1heC1taW4pXG5cdFx0XHRcdFx0XCJtdWwgXCIgKyBsaWdodERpclJlZyArIFwiLncsIFwiICsgbGlnaHREaXJSZWcgKyBcIi53LCBcIiArIHNwZWN1bGFyQ29sb3JSZWcgKyBcIi53XFxuXCIgKyAvLyB3ID0gY2xhbXAodywgMCwgMSlcblx0XHRcdFx0XHRcInNhdCBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyBsaWdodERpclJlZyArIFwiLndcXG5cIiArIC8vIHcgPSAxLXdcblx0XHRcdFx0XHRcInN1YiBcIiArIGxpZ2h0RGlyUmVnICsgXCIudywgXCIgKyB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzLmNvbW1vbnMgKyBcIi53LCBcIiArIGxpZ2h0RGlyUmVnICsgXCIud1xcblwiICsgLy8gbm9ybWFsaXplXG5cdFx0XHRcdFx0XCJucm0gXCIgKyBsaWdodERpclJlZyArIFwiLnh5eiwgXCIgKyBsaWdodFZhcnlpbmcgKyBcIlxcblwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcEZyYWdtZW50Q29kZSArPSBcIm5ybSBcIiArIGxpZ2h0RGlyUmVnICsgXCIueHl6LCBcIiArIGxpZ2h0VmFyeWluZyArIFwiXFxuXCIgK1xuXHRcdFx0XHRcdFwibW92IFwiICsgbGlnaHREaXJSZWcgKyBcIi53LCBcIiArIGxpZ2h0VmFyeWluZyArIFwiLndcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0RnJhZ21lbnRDb25zdGFudEluZGV4ID09IC0xKVxuXHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleCA9IGxpZ2h0UG9zUmVnLmluZGV4KjQ7XG5cblx0XHRcdGlmIChhZGREaWZmKVxuXHRcdFx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pR2V0UGVyTGlnaHREaWZmdXNlRnJhZ21lbnRDb2RlKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LCBsaWdodERpclJlZywgZGlmZnVzZUNvbG9yUmVnLCB0aGlzLl9wUmVnaXN0ZXJDYWNoZSwgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRcdGlmIChhZGRTcGVjKVxuXHRcdFx0XHR0aGlzLl9wRnJhZ21lbnRDb2RlICs9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pR2V0UGVyTGlnaHRTcGVjdWxhckZyYWdtZW50Q29kZSh0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdCwgbGlnaHREaXJSZWcsIHNwZWN1bGFyQ29sb3JSZWcsIHRoaXMuX3BSZWdpc3RlckNhY2hlLCB0aGlzLl9wU2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdFx0dGhpcy5fcFJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UobGlnaHREaXJSZWcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDb21waWxlcyBzaGFkaW5nIGNvZGUgZm9yIGxpZ2h0IHByb2Jlcy5cblx0ICovXG5cdHByaXZhdGUgY29tcGlsZUxpZ2h0UHJvYmVDb2RlKClcblx0e1xuXHRcdHZhciB3ZWlnaHRSZWc6c3RyaW5nO1xuXHRcdHZhciB3ZWlnaHRDb21wb25lbnRzID0gWyBcIi54XCIsIFwiLnlcIiwgXCIuelwiLCBcIi53XCIgXTtcblx0XHR2YXIgd2VpZ2h0UmVnaXN0ZXJzOkFycmF5PFNoYWRlclJlZ2lzdGVyRWxlbWVudD4gPSBuZXcgQXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50PigpO1xuXHRcdHZhciBpOm51bWJlcjtcblx0XHR2YXIgdGV4UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgYWRkU3BlYzpib29sZWFuID0gdGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1Byb2Jlc0ZvclNwZWN1bGFyO1xuXHRcdHZhciBhZGREaWZmOmJvb2xlYW4gPSB0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzUHJvYmVzRm9yRGlmZnVzZTtcblxuXHRcdGlmIChhZGREaWZmKVxuXHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRQcm9iZURpZmZ1c2VJbmRpY2VzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuXHRcdGlmIChhZGRTcGVjKVxuXHRcdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRQcm9iZVNwZWN1bGFySW5kaWNlcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5fcE51bVByb2JlUmVnaXN0ZXJzOyArK2kpIHtcblx0XHRcdHdlaWdodFJlZ2lzdGVyc1tpXSA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGlmIChpID09IDApXG5cdFx0XHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnByb2JlV2VpZ2h0c0luZGV4ID0gd2VpZ2h0UmVnaXN0ZXJzW2ldLmluZGV4KjQ7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1MaWdodFByb2JlczsgKytpKSB7XG5cdFx0XHR3ZWlnaHRSZWcgPSB3ZWlnaHRSZWdpc3RlcnNbTWF0aC5mbG9vcihpLzQpXS50b1N0cmluZygpICsgd2VpZ2h0Q29tcG9uZW50c1tpJTRdO1xuXG5cdFx0XHRpZiAoYWRkRGlmZikge1xuXHRcdFx0XHR0ZXhSZWcgPSB0aGlzLl9wUmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXHRcdFx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFByb2JlRGlmZnVzZUluZGljZXNbaV0gPSB0ZXhSZWcuaW5kZXg7XG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJQcm9iZURpZmZ1c2VGcmFnbWVudENvZGUodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QsIHRleFJlZywgd2VpZ2h0UmVnLCB0aGlzLl9wUmVnaXN0ZXJDYWNoZSwgdGhpcy5fcFNoYXJlZFJlZ2lzdGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhZGRTcGVjKSB7XG5cdFx0XHRcdHRleFJlZyA9IHRoaXMuX3BSZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0XHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmxpZ2h0UHJvYmVTcGVjdWxhckluZGljZXNbaV0gPSB0ZXhSZWcuaW5kZXg7XG5cdFx0XHRcdHRoaXMuX3BGcmFnbWVudENvZGUgKz0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuX2lHZXRQZXJQcm9iZVNwZWN1bGFyRnJhZ21lbnRDb2RlKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LCB0ZXhSZWcsIHdlaWdodFJlZywgdGhpcy5fcFJlZ2lzdGVyQ2FjaGUsIHRoaXMuX3BTaGFyZWRSZWdpc3RlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCBhbGwgdGhlIGluZGljZXMgdG8gXCJ1bnVzZWRcIi5cblx0ICovXG5cdHB1YmxpYyBwSW5pdFJlZ2lzdGVySW5kaWNlcygpXG5cdHtcblx0XHRzdXBlci5wSW5pdFJlZ2lzdGVySW5kaWNlcygpO1xuXG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRWZXJ0ZXhDb25zdGFudEluZGV4ID0gLTE7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRGcmFnbWVudENvbnN0YW50SW5kZXggPSAtMTtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5wcm9iZVdlaWdodHNJbmRleCA9IC0xO1xuXG5cdFx0dGhpcy5fcE51bVByb2JlUmVnaXN0ZXJzID0gTWF0aC5jZWlsKHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1MaWdodFByb2Jlcy80KTtcblxuXHRcdC8vaW5pdCBsaWdodCBkYXRhXG5cdFx0aWYgKHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNUYW5nZW50U3BhY2UgfHwgIXRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNHbG9iYWxQb3NGcmFnbWVudCkge1xuXHRcdFx0dGhpcy5fcG9pbnRMaWdodFZlcnRleENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1Qb2ludExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9wb2ludExpZ2h0RnJhZ21lbnRDb25zdGFudHMgPSBuZXcgQXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50Pih0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtUG9pbnRMaWdodHMqMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3BvaW50TGlnaHRGcmFnbWVudENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1Qb2ludExpZ2h0cyozKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1RhbmdlbnRTcGFjZSkge1xuXHRcdFx0dGhpcy5fZGlyTGlnaHRWZXJ0ZXhDb25zdGFudHMgPSBuZXcgQXJyYXk8U2hhZGVyUmVnaXN0ZXJFbGVtZW50Pih0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtRGlyZWN0aW9uYWxMaWdodHMpO1xuXHRcdFx0dGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cyoyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZGlyTGlnaHRGcmFnbWVudENvbnN0YW50cyA9IG5ldyBBcnJheTxTaGFkZXJSZWdpc3RlckVsZW1lbnQ+KHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cyozKTtcblx0XHR9XG5cdH1cblxuXG5cdC8qKlxuXHQgKiBGaWd1cmUgb3V0IHdoaWNoIG5hbWVkIHJlZ2lzdGVycyBhcmUgcmVxdWlyZWQsIGFuZCBob3cgb2Z0ZW4uXG5cdCAqL1xuXHRwdWJsaWMgcENhbGN1bGF0ZURlcGVuZGVuY2llcygpXG5cdHtcblx0XHR2YXIgbnVtQWxsTGlnaHRzOm51bWJlciA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1Qb2ludExpZ2h0cyArIHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmlOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHR2YXIgbnVtTGlnaHRQcm9iZXM6bnVtYmVyID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuaU51bUxpZ2h0UHJvYmVzO1xuXHRcdHZhciBkaWZmdXNlTGlnaHRTb3VyY2VzOm51bWJlciA9IHRoaXMuX3BNYXRlcmlhbC5kaWZmdXNlTGlnaHRTb3VyY2VzO1xuXHRcdHZhciBzcGVjdWxhckxpZ2h0U291cmNlczpudW1iZXIgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5faVVzZXNTcGVjdWxhcigpPyB0aGlzLl9wTWF0ZXJpYWwuc3BlY3VsYXJMaWdodFNvdXJjZXMgOiAweDAwO1xuXHRcdHZhciBjb21iaW5lZExpZ2h0U291cmNlczpudW1iZXIgPSBkaWZmdXNlTGlnaHRTb3VyY2VzIHwgc3BlY3VsYXJMaWdodFNvdXJjZXM7XG5cblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzTGlnaHRGYWxsT2ZmID0gdGhpcy5fcE1hdGVyaWFsLmVuYWJsZUxpZ2h0RmFsbE9mZiAmJiB0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5wcm9maWxlICE9IENvbnRleHRHTFByb2ZpbGUuQkFTRUxJTkVfQ09OU1RSQUlORUQ7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubnVtTGlnaHRzID0gbnVtQWxsTGlnaHRzICsgbnVtTGlnaHRQcm9iZXM7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubnVtUG9pbnRMaWdodHMgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtUG9pbnRMaWdodHM7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubnVtRGlyZWN0aW9uYWxMaWdodHMgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5pTnVtRGlyZWN0aW9uYWxMaWdodHM7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubnVtTGlnaHRQcm9iZXMgPSBudW1MaWdodFByb2Jlcztcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5wb2ludExpZ2h0c09mZnNldCA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLnBvaW50TGlnaHRzT2Zmc2V0O1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LmRpcmVjdGlvbmFsTGlnaHRzT2Zmc2V0ID0gdGhpcy5fbWF0ZXJpYWxMaWdodGluZ1Bhc3MuZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQ7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QubGlnaHRQcm9iZXNPZmZzZXQgPSB0aGlzLl9tYXRlcmlhbExpZ2h0aW5nUGFzcy5saWdodFByb2Jlc09mZnNldDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC5saWdodFBpY2tlciA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLmxpZ2h0UGlja2VyO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodHMgPSBudW1BbGxMaWdodHMgPiAwICYmIChjb21iaW5lZExpZ2h0U291cmNlcyAmIExpZ2h0U291cmNlcy5MSUdIVFMpICE9IDA7XG5cdFx0dGhpcy5fc2hhZGVyTGlnaHRpbmdPYmplY3QudXNlc1Byb2JlcyA9IG51bUxpZ2h0UHJvYmVzID4gMCAmJiAoY29tYmluZWRMaWdodFNvdXJjZXMgJiBMaWdodFNvdXJjZXMuUFJPQkVTKSAhPSAwO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNMaWdodHNGb3JTcGVjdWxhciA9IG51bUFsbExpZ2h0cyA+IDAgJiYgKHNwZWN1bGFyTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLkxJR0hUUykgIT0gMDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzUHJvYmVzRm9yU3BlY3VsYXIgPSBudW1MaWdodFByb2JlcyA+IDAgJiYgKHNwZWN1bGFyTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLlBST0JFUykgIT0gMDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzTGlnaHRzRm9yRGlmZnVzZSA9IG51bUFsbExpZ2h0cyA+IDAgJiYgKGRpZmZ1c2VMaWdodFNvdXJjZXMgJiBMaWdodFNvdXJjZXMuTElHSFRTKSAhPSAwO1xuXHRcdHRoaXMuX3NoYWRlckxpZ2h0aW5nT2JqZWN0LnVzZXNQcm9iZXNGb3JEaWZmdXNlID0gbnVtTGlnaHRQcm9iZXMgPiAwICYmIChkaWZmdXNlTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLlBST0JFUykgIT0gMDtcblx0XHR0aGlzLl9zaGFkZXJMaWdodGluZ09iamVjdC51c2VzU2hhZG93cyA9IHRoaXMuX21hdGVyaWFsTGlnaHRpbmdQYXNzLl9pVXNlc1NoYWRvd3MoKTtcblxuXHRcdHN1cGVyLnBDYWxjdWxhdGVEZXBlbmRlbmNpZXMoKTtcblx0fVxufVxuXG5leHBvcnQgPSBTaGFkZXJMaWdodGluZ0NvbXBpbGVyOyJdfQ== \ No newline at end of file diff --git a/lib/materials/compilation/ShaderLightingCompiler.ts b/lib/materials/compilation/ShaderLightingCompiler.ts index eb9b9642..66bcd91c 100644 --- a/lib/materials/compilation/ShaderLightingCompiler.ts +++ b/lib/materials/compilation/ShaderLightingCompiler.ts @@ -1,6 +1,6 @@ import LightSources = require("awayjs-display/lib/materials/LightSources"); -import ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); +import ContextGLProfile = require("awayjs-stagegl/lib/base/ContextGLProfile"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); diff --git a/lib/materials/compilation/ShaderLightingObject.js b/lib/materials/compilation/ShaderLightingObject.js index 2aedf566..817c97b3 100755 --- a/lib/materials/compilation/ShaderLightingObject.js +++ b/lib/materials/compilation/ShaderLightingObject.js @@ -230,4 +230,4 @@ var ShaderLightingObject = (function (_super) { })(ShaderObjectBase); module.exports = ShaderLightingObject; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVybGlnaHRpbmdvYmplY3QudHMiXSwibmFtZXMiOlsiU2hhZGVyTGlnaHRpbmdPYmplY3QiLCJTaGFkZXJMaWdodGluZ09iamVjdC5jb25zdHJ1Y3RvciIsIlNoYWRlckxpZ2h0aW5nT2JqZWN0LmNyZWF0ZUNvbXBpbGVyIiwiU2hhZGVyTGlnaHRpbmdPYmplY3QucmVzZXQiLCJTaGFkZXJMaWdodGluZ09iamVjdC5hZGRXb3JsZFNwYWNlRGVwZW5kZW5jaWVzIiwiU2hhZGVyTGlnaHRpbmdPYmplY3Quc2V0UmVuZGVyU3RhdGUiLCJTaGFkZXJMaWdodGluZ09iamVjdC51cGRhdGVMaWdodHMiLCJTaGFkZXJMaWdodGluZ09iamVjdC51cGRhdGVQcm9iZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQWNBLElBQU8sc0JBQXNCLFdBQVksaUVBQWlFLENBQUMsQ0FBQztBQUM1RyxJQUFPLGdCQUFnQixXQUFjLDJEQUEyRCxDQUFDLENBQUM7QUFHbEcsQUFRQTs7Ozs7OztHQURHO0lBQ0csb0JBQW9CO0lBQVNBLFVBQTdCQSxvQkFBb0JBLFVBQXlCQTtJQXNFbERBOztPQUVHQTtJQUNIQSxTQXpFS0Esb0JBQW9CQSxDQXlFYkEsT0FBT0E7UUFFbEJDLGtCQUFNQSxPQUFPQSxDQUFDQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLDZDQUFjQSxHQUFyQkEsVUFBc0JBLFFBQTRCQSxFQUFFQSxZQUFpQ0E7UUFFcEZFLE1BQU1BLENBQUNBLElBQUlBLHNCQUFzQkEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDakVBLENBQUNBO0lBRURGOztPQUVHQTtJQUNJQSxvQ0FBS0EsR0FBWkE7UUFFQ0csZ0JBQUtBLENBQUNBLEtBQUtBLFdBQUVBLENBQUNBO1FBRWRBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLENBQUNB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QUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQ2hJQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBO29CQUNoSUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQTtvQkFDaklBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2xDQSxDQUFDQTtnQkFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7b0JBQ1BBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzNDQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO29CQUMzQ0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDM0NBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3BDQSxDQUFDQTtnQkFFREEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxRQUFRQSxDQUFDQSxVQUFVQSxDQUFDQTtnQkFDckRBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsUUFBUUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7Z0JBQ3JEQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFFBQVFBLENBQUNBLFVBQVVBLENBQUNBO2dCQUNyREEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtnQkFFbkNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsUUFBUUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7Z0JBQ3REQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFFBQVFBLENBQUNBLFdBQVdBLENBQUNBO2dCQUN0REEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxRQUFRQSxDQUFDQSxXQUFXQSxDQUFDQTtnQkFDdERBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBRW5DQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxLQUFLQSxJQUFJQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBO29CQUMxQ0EsQUFDQUEsYUFEYUE7b0JBQ2JBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNB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QUNRQSxLQUFLQSxDQUFDQSxPQUFRQSxDQUFDQSxtQkFBbUJBLENBQUNBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFDOUdBLENBQUNBO1FBRURBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ3ZCQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsT0FBT0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUM5RkEsQ0FBQ0E7SUFDRlAsMkJBQUNBO0FBQURBLENBM1VBLEFBMlVDQSxFQTNVa0MsZ0JBQWdCLEVBMlVsRDtBQUVELEFBQThCLGlCQUFyQixvQkFBb0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdPYmplY3QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcblxuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgTGlnaHRQcm9iZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvTGlnaHRQcm9iZVwiKTtcbmltcG9ydCBQb2ludExpZ2h0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9Qb2ludExpZ2h0XCIpO1xuaW1wb3J0IExpZ2h0UGlja2VyQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9saWdodHBpY2tlcnMvTGlnaHRQaWNrZXJCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJDb21waWxlckJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckNvbXBpbGVyQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJMaWdodGluZ0NvbXBpbGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdDb21waWxlclwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgSUxpZ2h0aW5nUGFzc1N0YWdlR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTGlnaHRpbmdQYXNzU3RhZ2VHTFwiKTtcblxuLyoqXG4gKiBTaGFkZXJPYmplY3RCYXNlIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBcIm5hbWVkIHJlZ2lzdGVyc1wiIHVzZWQgYWNyb3NzIGEgcGFzcy5cbiAqIE5hbWVkIHJlZ2lzdGVycyBhcmUgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IGxpbWl0ZWQgdG8gYSBzaW5nbGUgbWV0aG9kLiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBhbmRcbiAqIHBhc3NlZCBvbiB0byBtZXRob2RzLiBUaGUgY29tcGlsZXIgdXNlcyB0aGUgcmVzdWx0cyB0byByZXNlcnZlIHVzYWdlcyB0aHJvdWdoIFJlZ2lzdGVyUG9vbCwgd2hpY2ggY2FuIGJlIHJlbW92ZWRcbiAqIGVhY2ggdGltZSBhIG1ldGhvZCBoYXMgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBzaGFkZXIuXG4gKlxuICogQHNlZSBSZWdpc3RlclBvb2wuYWRkVXNhZ2VcbiAqL1xuY2xhc3MgU2hhZGVyTGlnaHRpbmdPYmplY3QgZXh0ZW5kcyBTaGFkZXJPYmplY3RCYXNlXG57XG5cdC8qKlxuXHQgKiBUaGUgZmlyc3QgaW5kZXggZm9yIHRoZSBmcmFnbWVudCBjb25zdGFudHMgY29udGFpbmluZyB0aGUgbGlnaHQgZGF0YS5cblx0ICovXG5cdHB1YmxpYyBsaWdodEZyYWdtZW50Q29uc3RhbnRJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBzdGFydGluZyBpbmRleCBpZiB0aGUgdmVydGV4IGNvbnN0YW50IHRvIHdoaWNoIGxpZ2h0IGRhdGEgbmVlZHMgdG8gYmUgdXBsb2FkZWQuXG5cdCAqL1xuXHRwdWJsaWMgbGlnaHRWZXJ0ZXhDb25zdGFudEluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogSW5kaWNlcyBmb3IgdGhlIGxpZ2h0IHByb2JlIGRpZmZ1c2UgdGV4dHVyZXMuXG5cdCAqL1xuXHRwdWJsaWMgbGlnaHRQcm9iZURpZmZ1c2VJbmRpY2VzOkFycmF5PG51bWJlcj4gLyp1aW50Ki87XG5cblx0LyoqXG5cdCAqIEluZGljZXMgZm9yIHRoZSBsaWdodCBwcm9iZSBzcGVjdWxhciB0ZXh0dXJlcy5cblx0ICovXG5cdHB1YmxpYyBsaWdodFByb2JlU3BlY3VsYXJJbmRpY2VzOkFycmF5PG51bWJlcj4gLyp1aW50Ki87XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgZnJhZ21lbnQgY29uc3RhbnQgY29udGFpbmluZyB0aGUgd2VpZ2h0cyBmb3IgdGhlIGxpZ2h0IHByb2Jlcy5cblx0ICovXG5cdHB1YmxpYyBwcm9iZVdlaWdodHNJbmRleDpudW1iZXI7XG5cblx0cHVibGljIG51bUxpZ2h0czpudW1iZXI7XG5cdHB1YmxpYyB1c2VzTGlnaHRGYWxsT2ZmOmJvb2xlYW47XG5cblx0cHVibGljIHVzZXNTaGFkb3dzOmJvb2xlYW47XG5cblx0cHVibGljIG51bVBvaW50TGlnaHRzOm51bWJlcjtcblx0cHVibGljIG51bURpcmVjdGlvbmFsTGlnaHRzOm51bWJlcjtcblx0cHVibGljIG51bUxpZ2h0UHJvYmVzOm51bWJlcjtcblx0cHVibGljIHBvaW50TGlnaHRzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGRpcmVjdGlvbmFsTGlnaHRzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGxpZ2h0UHJvYmVzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGxpZ2h0UGlja2VyOkxpZ2h0UGlja2VyQmFzZTtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNoYWRlciB1c2VzIGFueSBsaWdodHMuXG5cdCAqL1xuXHRwdWJsaWMgdXNlc0xpZ2h0czpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2hhZGVyIHVzZXMgYW55IGxpZ2h0IHByb2Jlcy5cblx0ICovXG5cdHB1YmxpYyB1c2VzUHJvYmVzOmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsaWdodHMgdXNlcyBhbnkgc3BlY3VsYXIgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzTGlnaHRzRm9yU3BlY3VsYXI6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb2JlcyB1c2VzIGFueSBzcGVjdWxhciBjb21wb25lbnRzLlxuXHQgKi9cblx0cHVibGljIHVzZXNQcm9iZXNGb3JTcGVjdWxhcjpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbGlnaHRzIHVzZXMgYW55IGRpZmZ1c2UgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzTGlnaHRzRm9yRGlmZnVzZTpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvYmVzIHVzZXMgYW55IGRpZmZ1c2UgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzUHJvYmVzRm9yRGlmZnVzZTpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1ldGhvZENvbXBpbGVyVk8gb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJvZmlsZSlcblx0e1xuXHRcdHN1cGVyKHByb2ZpbGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIGNvbXBpbGVyIG9iamVjdCBmb3IgdGhpcyBvYmplY3Rcblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsUGFzc1ZPXG5cdCAqIEByZXR1cm5zIHthd2F5Lm1hdGVyaWFscy5TaGFkZXJMaWdodGluZ0NvbXBpbGVyfVxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbXBpbGVyKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzczpJTGlnaHRpbmdQYXNzU3RhZ2VHTCk6U2hhZGVyQ29tcGlsZXJCYXNlXG5cdHtcblx0XHRyZXR1cm4gbmV3IFNoYWRlckxpZ2h0aW5nQ29tcGlsZXIobWF0ZXJpYWwsIG1hdGVyaWFsUGFzcywgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGRlcGVuZGVuY3kgY291bnRzIGZvciBhbGwgcmVnaXN0ZXJzLiBDYWxsZWQgd2hlbiByZWNvbXBpbGluZyBhIHBhc3MuXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXQoKVxuXHR7XG5cdFx0c3VwZXIucmVzZXQoKTtcblxuXHRcdHRoaXMubnVtTGlnaHRzID0gMDtcblx0XHR0aGlzLnVzZXNMaWdodEZhbGxPZmYgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW55IGV4dGVybmFsIHdvcmxkIHNwYWNlIGRlcGVuZGVuY2llcywgdXNlZCB0byBmb3JjZSB3b3JsZCBzcGFjZSBjYWxjdWxhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmcmFnbWVudExpZ2h0czpib29sZWFuKVxuXHR7XG5cdFx0c3VwZXIuYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmcmFnbWVudExpZ2h0cyk7XG5cblx0XHRpZiAodGhpcy5udW1Qb2ludExpZ2h0cyA+IDAgJiYgdGhpcy51c2VzTGlnaHRzKSB7XG5cdFx0XHQrK3RoaXMuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzO1xuXG5cdFx0XHRpZiAoZnJhZ21lbnRMaWdodHMpXG5cdFx0XHRcdHRoaXMudXNlc0dsb2JhbFBvc0ZyYWdtZW50ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHJlbmRlcmFibGVcblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwYXJhbSBjYW1lcmFcblx0ICovXG5cdHB1YmxpYyBzZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHRzdXBlci5zZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cblx0XHRpZiAodGhpcy51c2VzTGlnaHRzKVxuXHRcdFx0dGhpcy51cGRhdGVMaWdodHMoKTtcblxuXHRcdGlmICh0aGlzLnVzZXNQcm9iZXMpXG5cdFx0XHR0aGlzLnVwZGF0ZVByb2JlcyhzdGFnZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBjb25zdGFudCBkYXRhIHJlbmRlciBzdGF0ZSB1c2VkIGJ5IHRoZSBsaWdodHMuIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsIGZvciBzdWJjbGFzc2VzIHRvIGltcGxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlTGlnaHRzKClcblx0e1xuXHRcdHZhciBkaXJMaWdodDpEaXJlY3Rpb25hbExpZ2h0O1xuXHRcdHZhciBwb2ludExpZ2h0OlBvaW50TGlnaHQ7XG5cdFx0dmFyIGk6bnVtYmVyID0gMDtcblx0XHR2YXIgazpudW1iZXIgPSAwO1xuXHRcdHZhciBsZW46bnVtYmVyO1xuXHRcdHZhciBkaXJQb3M6VmVjdG9yM0Q7XG5cdFx0dmFyIHRvdGFsOm51bWJlciA9IDA7XG5cdFx0dmFyIG51bUxpZ2h0VHlwZXM6bnVtYmVyID0gdGhpcy51c2VzU2hhZG93cz8gMiA6IDE7XG5cdFx0dmFyIGw6bnVtYmVyO1xuXHRcdHZhciBvZmZzZXQ6bnVtYmVyO1xuXG5cdFx0dGhpcy5hbWJpZW50UiA9IHRoaXMuYW1iaWVudEcgPSB0aGlzLmFtYmllbnRCID0gMDtcblxuXHRcdGwgPSB0aGlzLmxpZ2h0VmVydGV4Q29uc3RhbnRJbmRleDtcblx0XHRrID0gdGhpcy5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleDtcblxuXHRcdHZhciBjYXN0Om51bWJlciA9IDA7XG5cdFx0dmFyIGRpckxpZ2h0czpBcnJheTxEaXJlY3Rpb25hbExpZ2h0PiA9IHRoaXMubGlnaHRQaWNrZXIuZGlyZWN0aW9uYWxMaWdodHM7XG5cdFx0b2Zmc2V0ID0gdGhpcy5kaXJlY3Rpb25hbExpZ2h0c09mZnNldDtcblx0XHRsZW4gPSB0aGlzLmxpZ2h0UGlja2VyLmRpcmVjdGlvbmFsTGlnaHRzLmxlbmd0aDtcblxuXHRcdGlmIChvZmZzZXQgPiBsZW4pIHtcblx0XHRcdGNhc3QgPSAxO1xuXHRcdFx0b2Zmc2V0IC09IGxlbjtcblx0XHR9XG5cblx0XHRmb3IgKDsgY2FzdCA8IG51bUxpZ2h0VHlwZXM7ICsrY2FzdCkge1xuXHRcdFx0aWYgKGNhc3QpXG5cdFx0XHRcdGRpckxpZ2h0cyA9IHRoaXMubGlnaHRQaWNrZXIuY2FzdGluZ0RpcmVjdGlvbmFsTGlnaHRzO1xuXG5cdFx0XHRsZW4gPSBkaXJMaWdodHMubGVuZ3RoO1xuXG5cdFx0XHRpZiAobGVuID4gdGhpcy5udW1EaXJlY3Rpb25hbExpZ2h0cylcblx0XHRcdFx0bGVuID0gdGhpcy5udW1EaXJlY3Rpb25hbExpZ2h0cztcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGRpckxpZ2h0ID0gZGlyTGlnaHRzW29mZnNldCArIGldO1xuXHRcdFx0XHRkaXJQb3MgPSBkaXJMaWdodC5zY2VuZURpcmVjdGlvbjtcblxuXHRcdFx0XHR0aGlzLmFtYmllbnRSICs9IGRpckxpZ2h0Ll9pQW1iaWVudFI7XG5cdFx0XHRcdHRoaXMuYW1iaWVudEcgKz0gZGlyTGlnaHQuX2lBbWJpZW50Rztcblx0XHRcdFx0dGhpcy5hbWJpZW50QiArPSBkaXJMaWdodC5faUFtYmllbnRCO1xuXG5cdFx0XHRcdGlmICh0aGlzLnVzZXNUYW5nZW50U3BhY2UpIHtcblx0XHRcdFx0XHR2YXIgeDpudW1iZXIgPSAtZGlyUG9zLng7XG5cdFx0XHRcdFx0dmFyIHk6bnVtYmVyID0gLWRpclBvcy55O1xuXHRcdFx0XHRcdHZhciB6Om51bWJlciA9IC1kaXJQb3MuejtcblxuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzBdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzRdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzhdKno7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMV0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNV0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbOV0qejtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsyXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs2XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxMF0qejtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAtZGlyUG9zLng7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gLWRpclBvcy55O1xuXHRcdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IC1kaXJQb3Muejtcblx0XHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlRztcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlQjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMTtcblxuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSBkaXJMaWdodC5faVNwZWN1bGFyUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lTcGVjdWxhckc7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IGRpckxpZ2h0Ll9pU3BlY3VsYXJCO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAxO1xuXG5cdFx0XHRcdGlmICgrK3RvdGFsID09IHRoaXMubnVtRGlyZWN0aW9uYWxMaWdodHMpIHtcblx0XHRcdFx0XHQvLyBicmVhayBsb29wXG5cdFx0XHRcdFx0aSA9IGxlbjtcblx0XHRcdFx0XHRjYXN0ID0gbnVtTGlnaHRUeXBlcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIG1vcmUgZGlyZWN0aW9uYWwgc3VwcG9ydGVkIHRoYW4gY3VycmVudGx5IHBpY2tlZCwgbmVlZCB0byBjbGFtcCBhbGwgdG8gMFxuXHRcdGlmICh0aGlzLm51bURpcmVjdGlvbmFsTGlnaHRzID4gdG90YWwpIHtcblx0XHRcdGkgPSBrICsgKHRoaXMubnVtRGlyZWN0aW9uYWxMaWdodHMgLSB0b3RhbCkqMTI7XG5cblx0XHRcdHdoaWxlIChrIDwgaSlcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMDtcblx0XHR9XG5cblx0XHR0b3RhbCA9IDA7XG5cblx0XHR2YXIgcG9pbnRMaWdodHM6QXJyYXk8UG9pbnRMaWdodD4gPSB0aGlzLmxpZ2h0UGlja2VyLnBvaW50TGlnaHRzO1xuXHRcdG9mZnNldCA9IHRoaXMucG9pbnRMaWdodHNPZmZzZXQ7XG5cdFx0bGVuID0gdGhpcy5saWdodFBpY2tlci5wb2ludExpZ2h0cy5sZW5ndGg7XG5cblx0XHRpZiAob2Zmc2V0ID4gbGVuKSB7XG5cdFx0XHRjYXN0ID0gMTtcblx0XHRcdG9mZnNldCAtPSBsZW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhc3QgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoOyBjYXN0IDwgbnVtTGlnaHRUeXBlczsgKytjYXN0KSB7XG5cdFx0XHRpZiAoY2FzdClcblx0XHRcdFx0cG9pbnRMaWdodHMgPSB0aGlzLmxpZ2h0UGlja2VyLmNhc3RpbmdQb2ludExpZ2h0cztcblxuXHRcdFx0bGVuID0gcG9pbnRMaWdodHMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzW29mZnNldCArIGldO1xuXHRcdFx0XHRkaXJQb3MgPSBwb2ludExpZ2h0LnNjZW5lUG9zaXRpb247XG5cblx0XHRcdFx0dGhpcy5hbWJpZW50UiArPSBwb2ludExpZ2h0Ll9pQW1iaWVudFI7XG5cdFx0XHRcdHRoaXMuYW1iaWVudEcgKz0gcG9pbnRMaWdodC5faUFtYmllbnRHO1xuXHRcdFx0XHR0aGlzLmFtYmllbnRCICs9IHBvaW50TGlnaHQuX2lBbWJpZW50QjtcblxuXHRcdFx0XHRpZiAodGhpcy51c2VzVGFuZ2VudFNwYWNlKSB7XG5cdFx0XHRcdFx0eCA9IGRpclBvcy54O1xuXHRcdFx0XHRcdHkgPSBkaXJQb3MueTtcblx0XHRcdFx0XHR6ID0gZGlyUG9zLno7XG5cblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFswXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs0XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs4XSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxMl07XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMV0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNV0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbOV0qeiArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMTNdO1xuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzJdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzZdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzEwXSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxNF07XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMudXNlc0dsb2JhbFBvc0ZyYWdtZW50KSB7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IGRpclBvcy54O1xuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSBkaXJQb3MueTtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gZGlyUG9zLno7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLng7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLnk7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLno7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lEaWZmdXNlUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gcG9pbnRMaWdodC5faURpZmZ1c2VHO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSBwb2ludExpZ2h0Ll9pRGlmZnVzZUI7XG5cblx0XHRcdFx0dmFyIHJhZGl1czpudW1iZXIgPSBwb2ludExpZ2h0Ll9wUmFkaXVzO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSByYWRpdXMqcmFkaXVzO1xuXG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhclI7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhckc7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhckI7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX3BGYWxsT2ZmRmFjdG9yO1xuXG5cdFx0XHRcdGlmICgrK3RvdGFsID09IHRoaXMubnVtUG9pbnRMaWdodHMpIHtcblx0XHRcdFx0XHQvLyBicmVhayBsb29wXG5cdFx0XHRcdFx0aSA9IGxlbjtcblx0XHRcdFx0XHRjYXN0ID0gbnVtTGlnaHRUeXBlcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIG1vcmUgZGlyZWN0aW9uYWwgc3VwcG9ydGVkIHRoYW4gY3VycmVudGx5IHBpY2tlZCwgbmVlZCB0byBjbGFtcCBhbGwgdG8gMFxuXHRcdGlmICh0aGlzLm51bVBvaW50TGlnaHRzID4gdG90YWwpIHtcblx0XHRcdGkgPSBrICsgKHRvdGFsIC0gdGhpcy5udW1Qb2ludExpZ2h0cykqMTI7XG5cblx0XHRcdGZvciAoOyBrIDwgaTsgKytrKVxuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2tdID0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBjb25zdGFudCBkYXRhIHJlbmRlciBzdGF0ZSB1c2VkIGJ5IHRoZSBsaWdodCBwcm9iZXMuIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsIGZvciBzdWJjbGFzc2VzIHRvIGltcGxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlUHJvYmVzKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dmFyIHByb2JlOkxpZ2h0UHJvYmU7XG5cdFx0dmFyIGxpZ2h0UHJvYmVzOkFycmF5PExpZ2h0UHJvYmU+ID0gdGhpcy5saWdodFBpY2tlci5saWdodFByb2Jlcztcblx0XHR2YXIgd2VpZ2h0czpBcnJheTxudW1iZXI+ID0gdGhpcy5saWdodFBpY2tlci5saWdodFByb2JlV2VpZ2h0cztcblx0XHR2YXIgbGVuOm51bWJlciA9IGxpZ2h0UHJvYmVzLmxlbmd0aCAtIHRoaXMubGlnaHRQcm9iZXNPZmZzZXQ7XG5cdFx0dmFyIGFkZERpZmY6Ym9vbGVhbiA9IHRoaXMudXNlc1Byb2Jlc0ZvckRpZmZ1c2U7XG5cdFx0dmFyIGFkZFNwZWM6Ym9vbGVhbiA9IHRoaXMudXNlc1Byb2Jlc0ZvclNwZWN1bGFyO1xuXG5cdFx0aWYgKCEoYWRkRGlmZiB8fCBhZGRTcGVjKSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmIChsZW4gPiB0aGlzLm51bUxpZ2h0UHJvYmVzKVxuXHRcdFx0bGVuID0gdGhpcy5udW1MaWdodFByb2JlcztcblxuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRwcm9iZSA9IGxpZ2h0UHJvYmVzWyB0aGlzLmxpZ2h0UHJvYmVzT2Zmc2V0ICsgaV07XG5cblx0XHRcdGlmIChhZGREaWZmKVxuXHRcdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVDdWJlVGV4dHVyZSh0aGlzLmxpZ2h0UHJvYmVEaWZmdXNlSW5kaWNlc1tpXSwgcHJvYmUuZGlmZnVzZU1hcCk7XG5cblx0XHRcdGlmIChhZGRTcGVjKVxuXHRcdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVDdWJlVGV4dHVyZSh0aGlzLmxpZ2h0UHJvYmVTcGVjdWxhckluZGljZXNbaV0sIHByb2JlLnNwZWN1bGFyTWFwKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW3RoaXMucHJvYmVXZWlnaHRzSW5kZXggKyBpXSA9IHdlaWdodHNbdGhpcy5saWdodFByb2Jlc09mZnNldCArIGldO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRlckxpZ2h0aW5nT2JqZWN0OyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVybGlnaHRpbmdvYmplY3QudHMiXSwibmFtZXMiOlsiU2hhZGVyTGlnaHRpbmdPYmplY3QiLCJTaGFkZXJMaWdodGluZ09iamVjdC5jb25zdHJ1Y3RvciIsIlNoYWRlckxpZ2h0aW5nT2JqZWN0LmNyZWF0ZUNvbXBpbGVyIiwiU2hhZGVyTGlnaHRpbmdPYmplY3QucmVzZXQiLCJTaGFkZXJMaWdodGluZ09iamVjdC5hZGRXb3JsZFNwYWNlRGVwZW5kZW5jaWVzIiwiU2hhZGVyTGlnaHRpbmdPYmplY3Quc2V0UmVuZGVyU3RhdGUiLCJTaGFkZXJMaWdodGluZ09iamVjdC51cGRhdGVMaWdodHMiLCJTaGFkZXJMaWdodGluZ09iamVjdC51cGRhdGVQcm9iZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQWNBLElBQU8sc0JBQXNCLFdBQVksaUVBQWlFLENBQUMsQ0FBQztBQUM1RyxJQUFPLGdCQUFnQixXQUFjLDJEQUEyRCxDQUFDLENBQUM7QUFHbEcsQUFRQTs7Ozs7OztHQURHO0lBQ0csb0JBQW9CO0lBQVNBLFVBQTdCQSxvQkFBb0JBLFVBQXlCQTtJQXNFbERBOztPQUVHQTtJQUNIQSxTQXpFS0Esb0JBQW9CQSxDQXlFYkEsT0FBT0E7UUFFbEJDLGtCQUFNQSxPQUFPQSxDQUFDQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFREQ7Ozs7O09BS0dBO0lBQ0lBLDZDQUFjQSxHQUFyQkEsVUFBc0JBLFFBQTRCQSxFQUFFQSxZQUFpQ0E7UUFFcEZFLE1BQU1BLENBQUNBLElBQUlBLHNCQUFzQkEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7SUFDakVBLENBQUNBO0lBRURGOztPQUVHQTtJQUNJQSxvQ0FBS0EsR0FBWkE7UUFFQ0csZ0JBQUtBLENBQUNBLEtBQUtBLFdBQUVBLENBQUNBO1FBRWRBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ25CQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLElBQUlBLENBQUNBO0lBQzlCQSxDQUFDQTtJQUVESDs7T0FFR0E7SUFDSUEsd0RBQXlCQSxHQUFoQ0EsVUFBaUNBLGNBQXNCQTtRQUV0REksZ0JBQUtBLENBQUNBLHlCQUF5QkEsWUFBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0E7UUFFaERBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hEQSxFQUFFQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBO1lBRTdCQSxFQUFFQSxDQUFDQSxDQUFDQSxjQUFjQSxDQUFDQTtnQkFDbEJBLElBQUlBLENBQUNBLHFCQUFxQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDcENBLENBQUNBO0lBQ0ZBLENBQUNBO0lBRURKOzs7Ozs7T0FNR0E7SUFDSUEsNkNBQWNBLEdBQXJCQSxVQUFzQkEsVUFBeUJBLEVBQUVBLEtBQVdBLEVBQUVBLE1BQWFBLEVBQUVBLGNBQXVCQTtRQUVuR0ssZ0JBQUtBLENBQUNBLGNBQWNBLFlBQUNBLFVBQVVBLEVBQUVBLEtBQUtBLEVBQUVBLE1BQU1BLEVBQUVBLGNBQWNBLENBQUNBLENBQUNBO1FBRWhFQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQTtZQUNuQkEsSUFBSUEsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0E7UUFFckJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBO1lBQ25CQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQTtJQUMzQkEsQ0FBQ0E7SUFFREw7O09BRUdBO0lBQ0tBLDJDQUFZQSxHQUFwQkE7UUFFQ00sSUFBSUEsUUFBeUJBLENBQUNBO1FBQzlCQSxJQUFJQSxVQUFxQkEsQ0FBQ0E7UUFDMUJBLElBQUlBLENBQUNBLEdBQVVBLENBQUNBLENBQUNBO1FBQ2pCQSxJQUFJQSxDQUFDQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNqQkEsSUFBSUEsR0FBVUEsQ0FBQ0E7UUFDZkEsSUFBSUEsTUFBZUEsQ0FBQ0E7UUFDcEJBLElBQUlBLEtBQUtBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3JCQSxJQUFJQSxhQUFhQSxHQUFVQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNuREEsSUFBSUEsQ0FBUUEsQ0FBQ0E7UUFDYkEsSUFBSUEsTUFBYUEsQ0FBQ0E7UUFFbEJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLENBQUNBLENBQUNBO1FBRWxEQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSx3QkFBd0JBLENBQUNBO1FBQ2xDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSwwQkFBMEJBLENBQUNBO1FBRXBDQSxJQUFJQSxJQUFJQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNwQkEsSUFBSUEsU0FBU0EsR0FBMkJBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDM0VBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0E7UUFDdENBLEdBQUdBLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFFaERBLEVBQUVBLENBQUNBLENBQUNBLE1BQU1BLEdBQUdBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1lBQ2xCQSxJQUFJQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNUQSxNQUFNQSxJQUFJQSxHQUFHQSxDQUFDQTtRQUNmQSxDQUFDQTtRQUVEQSxHQUFHQSxDQUFDQSxDQUFDQSxFQUFFQSxJQUFJQSxHQUFHQSxhQUFhQSxFQUFFQSxFQUFFQSxJQUFJQSxFQUFFQSxDQUFDQTtZQUNyQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7Z0JBQ1JBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLHdCQUF3QkEsQ0FBQ0E7WUFFdkRBLEdBQUdBLEdBQUdBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBO1lBRXZCQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBO2dCQUNuQ0EsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQTtZQUVqQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7Z0JBQzFCQSxRQUFRQSxHQUFHQSxTQUFTQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDakNBLE1BQU1BLEdBQUdBLFFBQVFBLENBQUNBLGNBQWNBLENBQUNBO2dCQUVqQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsSUFBSUEsUUFBUUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7Z0JBQ3JDQSxJQUFJQSxDQUFDQSxRQUFRQSxJQUFJQSxRQUFRQSxDQUFDQSxVQUFVQSxDQUFDQTtnQkFDckNBLElBQUlBLENBQUNBLFFBQVFBLElBQUlBLFFBQVFBLENBQUNBLFVBQVVBLENBQUNBO2dCQUVyQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDM0JBLElBQUlBLENBQUNBLEdBQVVBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO29CQUN6QkEsSUFBSUEsQ0FBQ0EsR0FBVUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQ3pCQSxJQUFJQSxDQUFDQSxHQUFVQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFFekJBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQ2hJQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBO29CQUNoSUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQTtvQkFDaklBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2xDQSxDQUFDQTtnQkFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7b0JBQ1BBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzNDQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO29CQUMzQ0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDM0NBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3BDQSxDQUFDQTtnQkFFREEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxRQUFRQSxDQUFDQSxVQUFVQSxDQUFDQTtnQkFDckRBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsUUFBUUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7Z0JBQ3JEQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFFBQVFBLENBQUNBLFVBQVVBLENBQUNBO2dCQUNyREEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtnQkFFbkNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsUUFBUUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7Z0JBQ3REQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLFFBQVFBLENBQUNBLFdBQVdBLENBQUNBO2dCQUN0REEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxRQUFRQSxDQUFDQSxXQUFXQSxDQUFDQTtnQkFDdERBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7Z0JBRW5DQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxLQUFLQSxJQUFJQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBO29CQUMxQ0EsQUFDQUEsYUFEYUE7b0JBQ2JBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNB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QUNRQSxLQUFLQSxDQUFDQSxPQUFRQSxDQUFDQSxtQkFBbUJBLENBQUNBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFDOUdBLENBQUNBO1FBRURBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ3ZCQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsT0FBT0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUM5RkEsQ0FBQ0E7SUFDRlAsMkJBQUNBO0FBQURBLENBM1VBLEFBMlVDQSxFQTNVa0MsZ0JBQWdCLEVBMlVsRDtBQUVELEFBQThCLGlCQUFyQixvQkFBb0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdPYmplY3QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcblxuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgTGlnaHRQcm9iZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvTGlnaHRQcm9iZVwiKTtcbmltcG9ydCBQb2ludExpZ2h0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9Qb2ludExpZ2h0XCIpO1xuaW1wb3J0IExpZ2h0UGlja2VyQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9saWdodHBpY2tlcnMvTGlnaHRQaWNrZXJCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU3RhZ2VHTE1hdGVyaWFsQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJDb21waWxlckJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckNvbXBpbGVyQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJMaWdodGluZ0NvbXBpbGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdDb21waWxlclwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgSUxpZ2h0aW5nUGFzc1N0YWdlR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTGlnaHRpbmdQYXNzU3RhZ2VHTFwiKTtcblxuLyoqXG4gKiBTaGFkZXJPYmplY3RCYXNlIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBcIm5hbWVkIHJlZ2lzdGVyc1wiIHVzZWQgYWNyb3NzIGEgcGFzcy5cbiAqIE5hbWVkIHJlZ2lzdGVycyBhcmUgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IGxpbWl0ZWQgdG8gYSBzaW5nbGUgbWV0aG9kLiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBhbmRcbiAqIHBhc3NlZCBvbiB0byBtZXRob2RzLiBUaGUgY29tcGlsZXIgdXNlcyB0aGUgcmVzdWx0cyB0byByZXNlcnZlIHVzYWdlcyB0aHJvdWdoIFJlZ2lzdGVyUG9vbCwgd2hpY2ggY2FuIGJlIHJlbW92ZWRcbiAqIGVhY2ggdGltZSBhIG1ldGhvZCBoYXMgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBzaGFkZXIuXG4gKlxuICogQHNlZSBSZWdpc3RlclBvb2wuYWRkVXNhZ2VcbiAqL1xuY2xhc3MgU2hhZGVyTGlnaHRpbmdPYmplY3QgZXh0ZW5kcyBTaGFkZXJPYmplY3RCYXNlXG57XG5cdC8qKlxuXHQgKiBUaGUgZmlyc3QgaW5kZXggZm9yIHRoZSBmcmFnbWVudCBjb25zdGFudHMgY29udGFpbmluZyB0aGUgbGlnaHQgZGF0YS5cblx0ICovXG5cdHB1YmxpYyBsaWdodEZyYWdtZW50Q29uc3RhbnRJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBzdGFydGluZyBpbmRleCBpZiB0aGUgdmVydGV4IGNvbnN0YW50IHRvIHdoaWNoIGxpZ2h0IGRhdGEgbmVlZHMgdG8gYmUgdXBsb2FkZWQuXG5cdCAqL1xuXHRwdWJsaWMgbGlnaHRWZXJ0ZXhDb25zdGFudEluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogSW5kaWNlcyBmb3IgdGhlIGxpZ2h0IHByb2JlIGRpZmZ1c2UgdGV4dHVyZXMuXG5cdCAqL1xuXHRwdWJsaWMgbGlnaHRQcm9iZURpZmZ1c2VJbmRpY2VzOkFycmF5PG51bWJlcj4gLyp1aW50Ki87XG5cblx0LyoqXG5cdCAqIEluZGljZXMgZm9yIHRoZSBsaWdodCBwcm9iZSBzcGVjdWxhciB0ZXh0dXJlcy5cblx0ICovXG5cdHB1YmxpYyBsaWdodFByb2JlU3BlY3VsYXJJbmRpY2VzOkFycmF5PG51bWJlcj4gLyp1aW50Ki87XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgZnJhZ21lbnQgY29uc3RhbnQgY29udGFpbmluZyB0aGUgd2VpZ2h0cyBmb3IgdGhlIGxpZ2h0IHByb2Jlcy5cblx0ICovXG5cdHB1YmxpYyBwcm9iZVdlaWdodHNJbmRleDpudW1iZXI7XG5cblx0cHVibGljIG51bUxpZ2h0czpudW1iZXI7XG5cdHB1YmxpYyB1c2VzTGlnaHRGYWxsT2ZmOmJvb2xlYW47XG5cblx0cHVibGljIHVzZXNTaGFkb3dzOmJvb2xlYW47XG5cblx0cHVibGljIG51bVBvaW50TGlnaHRzOm51bWJlcjtcblx0cHVibGljIG51bURpcmVjdGlvbmFsTGlnaHRzOm51bWJlcjtcblx0cHVibGljIG51bUxpZ2h0UHJvYmVzOm51bWJlcjtcblx0cHVibGljIHBvaW50TGlnaHRzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGRpcmVjdGlvbmFsTGlnaHRzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGxpZ2h0UHJvYmVzT2Zmc2V0Om51bWJlcjtcblx0cHVibGljIGxpZ2h0UGlja2VyOkxpZ2h0UGlja2VyQmFzZTtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNoYWRlciB1c2VzIGFueSBsaWdodHMuXG5cdCAqL1xuXHRwdWJsaWMgdXNlc0xpZ2h0czpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2hhZGVyIHVzZXMgYW55IGxpZ2h0IHByb2Jlcy5cblx0ICovXG5cdHB1YmxpYyB1c2VzUHJvYmVzOmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsaWdodHMgdXNlcyBhbnkgc3BlY3VsYXIgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzTGlnaHRzRm9yU3BlY3VsYXI6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb2JlcyB1c2VzIGFueSBzcGVjdWxhciBjb21wb25lbnRzLlxuXHQgKi9cblx0cHVibGljIHVzZXNQcm9iZXNGb3JTcGVjdWxhcjpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbGlnaHRzIHVzZXMgYW55IGRpZmZ1c2UgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzTGlnaHRzRm9yRGlmZnVzZTpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvYmVzIHVzZXMgYW55IGRpZmZ1c2UgY29tcG9uZW50cy5cblx0ICovXG5cdHB1YmxpYyB1c2VzUHJvYmVzRm9yRGlmZnVzZTpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IE1ldGhvZENvbXBpbGVyVk8gb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJvZmlsZSlcblx0e1xuXHRcdHN1cGVyKHByb2ZpbGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIGNvbXBpbGVyIG9iamVjdCBmb3IgdGhpcyBvYmplY3Rcblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsUGFzc1ZPXG5cdCAqIEByZXR1cm5zIHthd2F5Lm1hdGVyaWFscy5TaGFkZXJMaWdodGluZ0NvbXBpbGVyfVxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbXBpbGVyKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzczpJTGlnaHRpbmdQYXNzU3RhZ2VHTCk6U2hhZGVyQ29tcGlsZXJCYXNlXG5cdHtcblx0XHRyZXR1cm4gbmV3IFNoYWRlckxpZ2h0aW5nQ29tcGlsZXIobWF0ZXJpYWwsIG1hdGVyaWFsUGFzcywgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGRlcGVuZGVuY3kgY291bnRzIGZvciBhbGwgcmVnaXN0ZXJzLiBDYWxsZWQgd2hlbiByZWNvbXBpbGluZyBhIHBhc3MuXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXQoKVxuXHR7XG5cdFx0c3VwZXIucmVzZXQoKTtcblxuXHRcdHRoaXMubnVtTGlnaHRzID0gMDtcblx0XHR0aGlzLnVzZXNMaWdodEZhbGxPZmYgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW55IGV4dGVybmFsIHdvcmxkIHNwYWNlIGRlcGVuZGVuY2llcywgdXNlZCB0byBmb3JjZSB3b3JsZCBzcGFjZSBjYWxjdWxhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmcmFnbWVudExpZ2h0czpib29sZWFuKVxuXHR7XG5cdFx0c3VwZXIuYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmcmFnbWVudExpZ2h0cyk7XG5cblx0XHRpZiAodGhpcy5udW1Qb2ludExpZ2h0cyA+IDAgJiYgdGhpcy51c2VzTGlnaHRzKSB7XG5cdFx0XHQrK3RoaXMuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzO1xuXG5cdFx0XHRpZiAoZnJhZ21lbnRMaWdodHMpXG5cdFx0XHRcdHRoaXMudXNlc0dsb2JhbFBvc0ZyYWdtZW50ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHJlbmRlcmFibGVcblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwYXJhbSBjYW1lcmFcblx0ICovXG5cdHB1YmxpYyBzZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHRzdXBlci5zZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cblx0XHRpZiAodGhpcy51c2VzTGlnaHRzKVxuXHRcdFx0dGhpcy51cGRhdGVMaWdodHMoKTtcblxuXHRcdGlmICh0aGlzLnVzZXNQcm9iZXMpXG5cdFx0XHR0aGlzLnVwZGF0ZVByb2JlcyhzdGFnZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBjb25zdGFudCBkYXRhIHJlbmRlciBzdGF0ZSB1c2VkIGJ5IHRoZSBsaWdodHMuIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsIGZvciBzdWJjbGFzc2VzIHRvIGltcGxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlTGlnaHRzKClcblx0e1xuXHRcdHZhciBkaXJMaWdodDpEaXJlY3Rpb25hbExpZ2h0O1xuXHRcdHZhciBwb2ludExpZ2h0OlBvaW50TGlnaHQ7XG5cdFx0dmFyIGk6bnVtYmVyID0gMDtcblx0XHR2YXIgazpudW1iZXIgPSAwO1xuXHRcdHZhciBsZW46bnVtYmVyO1xuXHRcdHZhciBkaXJQb3M6VmVjdG9yM0Q7XG5cdFx0dmFyIHRvdGFsOm51bWJlciA9IDA7XG5cdFx0dmFyIG51bUxpZ2h0VHlwZXM6bnVtYmVyID0gdGhpcy51c2VzU2hhZG93cz8gMiA6IDE7XG5cdFx0dmFyIGw6bnVtYmVyO1xuXHRcdHZhciBvZmZzZXQ6bnVtYmVyO1xuXG5cdFx0dGhpcy5hbWJpZW50UiA9IHRoaXMuYW1iaWVudEcgPSB0aGlzLmFtYmllbnRCID0gMDtcblxuXHRcdGwgPSB0aGlzLmxpZ2h0VmVydGV4Q29uc3RhbnRJbmRleDtcblx0XHRrID0gdGhpcy5saWdodEZyYWdtZW50Q29uc3RhbnRJbmRleDtcblxuXHRcdHZhciBjYXN0Om51bWJlciA9IDA7XG5cdFx0dmFyIGRpckxpZ2h0czpBcnJheTxEaXJlY3Rpb25hbExpZ2h0PiA9IHRoaXMubGlnaHRQaWNrZXIuZGlyZWN0aW9uYWxMaWdodHM7XG5cdFx0b2Zmc2V0ID0gdGhpcy5kaXJlY3Rpb25hbExpZ2h0c09mZnNldDtcblx0XHRsZW4gPSB0aGlzLmxpZ2h0UGlja2VyLmRpcmVjdGlvbmFsTGlnaHRzLmxlbmd0aDtcblxuXHRcdGlmIChvZmZzZXQgPiBsZW4pIHtcblx0XHRcdGNhc3QgPSAxO1xuXHRcdFx0b2Zmc2V0IC09IGxlbjtcblx0XHR9XG5cblx0XHRmb3IgKDsgY2FzdCA8IG51bUxpZ2h0VHlwZXM7ICsrY2FzdCkge1xuXHRcdFx0aWYgKGNhc3QpXG5cdFx0XHRcdGRpckxpZ2h0cyA9IHRoaXMubGlnaHRQaWNrZXIuY2FzdGluZ0RpcmVjdGlvbmFsTGlnaHRzO1xuXG5cdFx0XHRsZW4gPSBkaXJMaWdodHMubGVuZ3RoO1xuXG5cdFx0XHRpZiAobGVuID4gdGhpcy5udW1EaXJlY3Rpb25hbExpZ2h0cylcblx0XHRcdFx0bGVuID0gdGhpcy5udW1EaXJlY3Rpb25hbExpZ2h0cztcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRcdGRpckxpZ2h0ID0gZGlyTGlnaHRzW29mZnNldCArIGldO1xuXHRcdFx0XHRkaXJQb3MgPSBkaXJMaWdodC5zY2VuZURpcmVjdGlvbjtcblxuXHRcdFx0XHR0aGlzLmFtYmllbnRSICs9IGRpckxpZ2h0Ll9pQW1iaWVudFI7XG5cdFx0XHRcdHRoaXMuYW1iaWVudEcgKz0gZGlyTGlnaHQuX2lBbWJpZW50Rztcblx0XHRcdFx0dGhpcy5hbWJpZW50QiArPSBkaXJMaWdodC5faUFtYmllbnRCO1xuXG5cdFx0XHRcdGlmICh0aGlzLnVzZXNUYW5nZW50U3BhY2UpIHtcblx0XHRcdFx0XHR2YXIgeDpudW1iZXIgPSAtZGlyUG9zLng7XG5cdFx0XHRcdFx0dmFyIHk6bnVtYmVyID0gLWRpclBvcy55O1xuXHRcdFx0XHRcdHZhciB6Om51bWJlciA9IC1kaXJQb3MuejtcblxuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzBdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzRdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzhdKno7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMV0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNV0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbOV0qejtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsyXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs2XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxMF0qejtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAtZGlyUG9zLng7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gLWRpclBvcy55O1xuXHRcdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IC1kaXJQb3Muejtcblx0XHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlRztcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lEaWZmdXNlQjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMTtcblxuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSBkaXJMaWdodC5faVNwZWN1bGFyUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyTGlnaHQuX2lTcGVjdWxhckc7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IGRpckxpZ2h0Ll9pU3BlY3VsYXJCO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSAxO1xuXG5cdFx0XHRcdGlmICgrK3RvdGFsID09IHRoaXMubnVtRGlyZWN0aW9uYWxMaWdodHMpIHtcblx0XHRcdFx0XHQvLyBicmVhayBsb29wXG5cdFx0XHRcdFx0aSA9IGxlbjtcblx0XHRcdFx0XHRjYXN0ID0gbnVtTGlnaHRUeXBlcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIG1vcmUgZGlyZWN0aW9uYWwgc3VwcG9ydGVkIHRoYW4gY3VycmVudGx5IHBpY2tlZCwgbmVlZCB0byBjbGFtcCBhbGwgdG8gMFxuXHRcdGlmICh0aGlzLm51bURpcmVjdGlvbmFsTGlnaHRzID4gdG90YWwpIHtcblx0XHRcdGkgPSBrICsgKHRoaXMubnVtRGlyZWN0aW9uYWxMaWdodHMgLSB0b3RhbCkqMTI7XG5cblx0XHRcdHdoaWxlIChrIDwgaSlcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMDtcblx0XHR9XG5cblx0XHR0b3RhbCA9IDA7XG5cblx0XHR2YXIgcG9pbnRMaWdodHM6QXJyYXk8UG9pbnRMaWdodD4gPSB0aGlzLmxpZ2h0UGlja2VyLnBvaW50TGlnaHRzO1xuXHRcdG9mZnNldCA9IHRoaXMucG9pbnRMaWdodHNPZmZzZXQ7XG5cdFx0bGVuID0gdGhpcy5saWdodFBpY2tlci5wb2ludExpZ2h0cy5sZW5ndGg7XG5cblx0XHRpZiAob2Zmc2V0ID4gbGVuKSB7XG5cdFx0XHRjYXN0ID0gMTtcblx0XHRcdG9mZnNldCAtPSBsZW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhc3QgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoOyBjYXN0IDwgbnVtTGlnaHRUeXBlczsgKytjYXN0KSB7XG5cdFx0XHRpZiAoY2FzdClcblx0XHRcdFx0cG9pbnRMaWdodHMgPSB0aGlzLmxpZ2h0UGlja2VyLmNhc3RpbmdQb2ludExpZ2h0cztcblxuXHRcdFx0bGVuID0gcG9pbnRMaWdodHMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzW29mZnNldCArIGldO1xuXHRcdFx0XHRkaXJQb3MgPSBwb2ludExpZ2h0LnNjZW5lUG9zaXRpb247XG5cblx0XHRcdFx0dGhpcy5hbWJpZW50UiArPSBwb2ludExpZ2h0Ll9pQW1iaWVudFI7XG5cdFx0XHRcdHRoaXMuYW1iaWVudEcgKz0gcG9pbnRMaWdodC5faUFtYmllbnRHO1xuXHRcdFx0XHR0aGlzLmFtYmllbnRCICs9IHBvaW50TGlnaHQuX2lBbWJpZW50QjtcblxuXHRcdFx0XHRpZiAodGhpcy51c2VzVGFuZ2VudFNwYWNlKSB7XG5cdFx0XHRcdFx0eCA9IGRpclBvcy54O1xuXHRcdFx0XHRcdHkgPSBkaXJQb3MueTtcblx0XHRcdFx0XHR6ID0gZGlyUG9zLno7XG5cblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFswXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs0XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs4XSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxMl07XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMV0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNV0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbOV0qeiArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMTNdO1xuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzJdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzZdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzEwXSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxNF07XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMudXNlc0dsb2JhbFBvc0ZyYWdtZW50KSB7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IGRpclBvcy54O1xuXHRcdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW2wrK10gPSBkaXJQb3MueTtcblx0XHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVtsKytdID0gZGlyUG9zLno7XG5cdFx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbbCsrXSA9IDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLng7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLnk7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gZGlyUG9zLno7XG5cdFx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lEaWZmdXNlUjtcblx0XHRcdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVtrKytdID0gcG9pbnRMaWdodC5faURpZmZ1c2VHO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSBwb2ludExpZ2h0Ll9pRGlmZnVzZUI7XG5cblx0XHRcdFx0dmFyIHJhZGl1czpudW1iZXIgPSBwb2ludExpZ2h0Ll9wUmFkaXVzO1xuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2srK10gPSByYWRpdXMqcmFkaXVzO1xuXG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhclI7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhckc7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX2lTcGVjdWxhckI7XG5cdFx0XHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbaysrXSA9IHBvaW50TGlnaHQuX3BGYWxsT2ZmRmFjdG9yO1xuXG5cdFx0XHRcdGlmICgrK3RvdGFsID09IHRoaXMubnVtUG9pbnRMaWdodHMpIHtcblx0XHRcdFx0XHQvLyBicmVhayBsb29wXG5cdFx0XHRcdFx0aSA9IGxlbjtcblx0XHRcdFx0XHRjYXN0ID0gbnVtTGlnaHRUeXBlcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIG1vcmUgZGlyZWN0aW9uYWwgc3VwcG9ydGVkIHRoYW4gY3VycmVudGx5IHBpY2tlZCwgbmVlZCB0byBjbGFtcCBhbGwgdG8gMFxuXHRcdGlmICh0aGlzLm51bVBvaW50TGlnaHRzID4gdG90YWwpIHtcblx0XHRcdGkgPSBrICsgKHRvdGFsIC0gdGhpcy5udW1Qb2ludExpZ2h0cykqMTI7XG5cblx0XHRcdGZvciAoOyBrIDwgaTsgKytrKVxuXHRcdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW2tdID0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBjb25zdGFudCBkYXRhIHJlbmRlciBzdGF0ZSB1c2VkIGJ5IHRoZSBsaWdodCBwcm9iZXMuIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsIGZvciBzdWJjbGFzc2VzIHRvIGltcGxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlUHJvYmVzKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dmFyIHByb2JlOkxpZ2h0UHJvYmU7XG5cdFx0dmFyIGxpZ2h0UHJvYmVzOkFycmF5PExpZ2h0UHJvYmU+ID0gdGhpcy5saWdodFBpY2tlci5saWdodFByb2Jlcztcblx0XHR2YXIgd2VpZ2h0czpBcnJheTxudW1iZXI+ID0gdGhpcy5saWdodFBpY2tlci5saWdodFByb2JlV2VpZ2h0cztcblx0XHR2YXIgbGVuOm51bWJlciA9IGxpZ2h0UHJvYmVzLmxlbmd0aCAtIHRoaXMubGlnaHRQcm9iZXNPZmZzZXQ7XG5cdFx0dmFyIGFkZERpZmY6Ym9vbGVhbiA9IHRoaXMudXNlc1Byb2Jlc0ZvckRpZmZ1c2U7XG5cdFx0dmFyIGFkZFNwZWM6Ym9vbGVhbiA9IHRoaXMudXNlc1Byb2Jlc0ZvclNwZWN1bGFyO1xuXG5cdFx0aWYgKCEoYWRkRGlmZiB8fCBhZGRTcGVjKSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmIChsZW4gPiB0aGlzLm51bUxpZ2h0UHJvYmVzKVxuXHRcdFx0bGVuID0gdGhpcy5udW1MaWdodFByb2JlcztcblxuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRwcm9iZSA9IGxpZ2h0UHJvYmVzWyB0aGlzLmxpZ2h0UHJvYmVzT2Zmc2V0ICsgaV07XG5cblx0XHRcdGlmIChhZGREaWZmKVxuXHRcdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVDdWJlVGV4dHVyZSh0aGlzLmxpZ2h0UHJvYmVEaWZmdXNlSW5kaWNlc1tpXSwgcHJvYmUuZGlmZnVzZU1hcCk7XG5cblx0XHRcdGlmIChhZGRTcGVjKVxuXHRcdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVDdWJlVGV4dHVyZSh0aGlzLmxpZ2h0UHJvYmVTcGVjdWxhckluZGljZXNbaV0sIHByb2JlLnNwZWN1bGFyTWFwKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW3RoaXMucHJvYmVXZWlnaHRzSW5kZXggKyBpXSA9IHdlaWdodHNbdGhpcy5saWdodFByb2Jlc09mZnNldCArIGldO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRlckxpZ2h0aW5nT2JqZWN0OyJdfQ== \ No newline at end of file diff --git a/lib/materials/compilation/ShaderLightingObject.ts b/lib/materials/compilation/ShaderLightingObject.ts index 9283b844..a1bc189f 100644 --- a/lib/materials/compilation/ShaderLightingObject.ts +++ b/lib/materials/compilation/ShaderLightingObject.ts @@ -7,9 +7,9 @@ import LightProbe = require("awayjs-display/lib/entities/LightProbe"); import PointLight = require("awayjs-display/lib/entities/PointLight"); import LightPickerBase = require("awayjs-display/lib/materials/lightpickers/LightPickerBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); import ShaderLightingCompiler = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingCompiler"); diff --git a/lib/materials/compilation/ShaderObjectBase.js b/lib/materials/compilation/ShaderObjectBase.js index 4d723fcf..a678a2b5 100755 --- a/lib/materials/compilation/ShaderObjectBase.js +++ b/lib/materials/compilation/ShaderObjectBase.js @@ -1,5 +1,5 @@ var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); -var ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); +var ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); var ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); /** * ShaderObjectBase keeps track of the number of dependencies for "named registers" used across a pass. @@ -183,4 +183,4 @@ var ShaderObjectBase = (function () { })(); module.exports = ShaderObjectBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVyb2JqZWN0YmFzZS50cyJdLCJuYW1lcyI6WyJTaGFkZXJPYmplY3RCYXNlIiwiU2hhZGVyT2JqZWN0QmFzZS5jb25zdHJ1Y3RvciIsIlNoYWRlck9iamVjdEJhc2UuY3JlYXRlQ29tcGlsZXIiLCJTaGFkZXJPYmplY3RCYXNlLnJlc2V0IiwiU2hhZGVyT2JqZWN0QmFzZS5hZGRXb3JsZFNwYWNlRGVwZW5kZW5jaWVzIiwiU2hhZGVyT2JqZWN0QmFzZS5wSW5pdFJlZ2lzdGVySW5kaWNlcyIsIlNoYWRlck9iamVjdEJhc2UuaW5pdENvbnN0YW50RGF0YSIsIlNoYWRlck9iamVjdEJhc2UuaUFjdGl2YXRlIiwiU2hhZGVyT2JqZWN0QmFzZS5pRGVhY3RpdmF0ZSIsIlNoYWRlck9iamVjdEJhc2Uuc2V0UmVuZGVyU3RhdGUiLCJTaGFkZXJPYmplY3RCYXNlLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQU9BLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQVN0RixJQUFPLHFCQUFxQixXQUFZLHVEQUF1RCxDQUFDLENBQUM7QUFFakcsSUFBTyxrQkFBa0IsV0FBYSw2REFBNkQsQ0FBQyxDQUFDO0FBSXJHLEFBUUE7Ozs7Ozs7R0FERztJQUNHLGdCQUFnQjtJQWtMckJBOztPQUVHQTtJQUNIQSxTQXJMS0EsZ0JBQWdCQSxDQXFMVEEsT0FBT0E7UUFsTFhDLG9CQUFlQSxHQUFVQSxxQkFBcUJBLENBQUNBLElBQUlBLENBQUNBO1FBRXJEQSx5QkFBb0JBLEdBQWlCQSxJQUFJQSxLQUFLQSxFQUFVQSxDQUFDQTtRQStDaEVBLCtCQUErQkE7UUFDeEJBLGFBQVFBLEdBQVVBLElBQUlBLENBQUNBO1FBQ3ZCQSxhQUFRQSxHQUFVQSxJQUFJQSxDQUFDQTtRQUN2QkEsYUFBUUEsR0FBVUEsSUFBSUEsQ0FBQ0E7UUFpRTlCQTs7V0FFR0E7UUFDSUEsMEJBQXFCQSxHQUFXQSxL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R0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFekRBLEFBQ0FBLG1EQURtREE7UUFDbkRBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNuREEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3ZEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3ZEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3hEQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLElBQUlBLENBQUNB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Z0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBO2dCQUNwRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO2dCQUNuRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO2dCQUNuRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBO1lBQ3JFQSxDQUFDQTtZQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtnQkFDUEEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUNuREEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3hEQSxDQUFDQTtRQUNGQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxzQkFBc0JBLElBQUlBLENBQUNBLENBQUNBO1lBQ3BDQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsRUFBRUEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUUxSEEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxJQUFJQSxDQUFDQSxtQkFBbUJBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBRTVEQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0E7WUFDdkZBLElBQUlBLEdBQUdBLEdBQVlBLE1BQU1BLENBQUNBLGFBQWFBLENBQUNBO1lBQ3hDQSxJQUFJQSxDQUFDQSxHQUFVQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyQkEsSUFBSUEsQ0FBQ0EsR0FBVUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckJBLElBQUlBLENBQUNBLEdBQVVBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1lBRXJCQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQTtZQUNyTEEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7WUFDekxBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBQzNMQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVNVCxrQ0FBT0EsR0FBZEE7UUFFQ1Usc0NBQXNDQTtJQUN2Q0EsQ0FBQ0E7SUFDRlYsdUJBQUNBO0FBQURBLENBdlhBLEFBdVhDQSxJQUFBO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRyaXhcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXhcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgQW5pbWF0aW9uU2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRpb25TZXRCYXNlXCIpO1xuaW1wb3J0IEFuaW1hdG9yQmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYW5pbWF0b3JzL0FuaW1hdG9yQmFzZVwiKTtcbmltcG9ydCBBbmltYXRpb25SZWdpc3RlckNhY2hlXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvZGF0YS9BbmltYXRpb25SZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgQ29udGV4dEdMVHJpYW5nbGVGYWNlXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVHJpYW5nbGVGYWNlXCIpO1xuaW1wb3J0IFN0YWdlR0xNYXRlcmlhbEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJDb21waWxlckJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBJTWF0ZXJpYWxQYXNzU3RhZ2VHTFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL0lNYXRlcmlhbFBhc3NTdGFnZUdMXCIpO1xuXG4vKipcbiAqIFNoYWRlck9iamVjdEJhc2Uga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBkZXBlbmRlbmNpZXMgZm9yIFwibmFtZWQgcmVnaXN0ZXJzXCIgdXNlZCBhY3Jvc3MgYSBwYXNzLlxuICogTmFtZWQgcmVnaXN0ZXJzIGFyZSB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgbGltaXRlZCB0byBhIHNpbmdsZSBtZXRob2QuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGFuZFxuICogcGFzc2VkIG9uIHRvIG1ldGhvZHMuIFRoZSBjb21waWxlciB1c2VzIHRoZSByZXN1bHRzIHRvIHJlc2VydmUgdXNhZ2VzIHRocm91Z2ggUmVnaXN0ZXJQb29sLCB3aGljaCBjYW4gYmUgcmVtb3ZlZFxuICogZWFjaCB0aW1lIGEgbWV0aG9kIGhhcyBiZWVuIGNvbXBpbGVkIGludG8gdGhlIHNoYWRlci5cbiAqXG4gKiBAc2VlIFJlZ2lzdGVyUG9vbC5hZGRVc2FnZVxuICovXG5jbGFzcyBTaGFkZXJPYmplY3RCYXNlXG57XG5cblx0cHJpdmF0ZSBfZGVmYXVsdEN1bGxpbmc6c3RyaW5nID0gQ29udGV4dEdMVHJpYW5nbGVGYWNlLkJBQ0s7XG5cblx0cHVibGljIF9wSW52ZXJzZVNjZW5lTWF0cml4OkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG5cdHB1YmxpYyBhbmltYXRpb25SZWdpc3RlckNhY2hlOkFuaW1hdGlvblJlZ2lzdGVyQ2FjaGU7XG5cblx0cHVibGljIHByb2ZpbGU6c3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHVzZWQgdmVydGV4IGNvbnN0YW50cyBpbiB0aGUgdmVydGV4IGNvZGUuIFVzZWQgYnkgdGhlIGFuaW1hdGlvbiBjb2RlIGdlbmVyYXRpb24gdG8ga25vdyBmcm9tIHdoaWNoIGluZGV4IG9uIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlLlxuXHQgKi9cblx0cHVibGljIG51bVVzZWRWZXJ0ZXhDb25zdGFudHM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHVzZWQgZnJhZ21lbnQgY29uc3RhbnRzIGluIHRoZSBmcmFnbWVudCBjb2RlLiBVc2VkIGJ5IHRoZSBhbmltYXRpb24gY29kZSBnZW5lcmF0aW9uIHRvIGtub3cgZnJvbSB3aGljaCBpbmRleCBvbiByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZS5cblx0ICovXG5cdHB1YmxpYyBudW1Vc2VkRnJhZ21lbnRDb25zdGFudHM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHVzZWQgdmVydGV4IHN0cmVhbXMgaW4gdGhlIHZlcnRleCBjb2RlLiBVc2VkIGJ5IHRoZSBhbmltYXRpb24gY29kZSBnZW5lcmF0aW9uIHRvIGtub3cgZnJvbSB3aGljaCBpbmRleCBvbiBzdHJlYW1zIGFyZSBhdmFpbGFibGUuXG5cdCAqL1xuXHRwdWJsaWMgbnVtVXNlZFN0cmVhbXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG51bVVzZWRUZXh0dXJlczpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgbnVtVXNlZFZhcnlpbmdzOm51bWJlcjtcblxuXHRwdWJsaWMgYW5pbWF0YWJsZUF0dHJpYnV0ZXM6QXJyYXk8c3RyaW5nPjtcblx0cHVibGljIGFuaW1hdGlvblRhcmdldFJlZ2lzdGVyczpBcnJheTxzdHJpbmc+O1xuXHRwdWJsaWMgdXZTb3VyY2U6c3RyaW5nO1xuXHRwdWJsaWMgdXZUYXJnZXQ6c3RyaW5nO1xuXG5cdHB1YmxpYyB1c2VBbHBoYVByZW11bHRpcGxpZWQ6Ym9vbGVhbjtcblx0cHVibGljIHVzZUJvdGhTaWRlczpib29sZWFuO1xuXHRwdWJsaWMgdXNlTWlwbWFwcGluZzpib29sZWFuO1xuXHRwdWJsaWMgdXNlU21vb3RoVGV4dHVyZXM6Ym9vbGVhbjtcblx0cHVibGljIHJlcGVhdFRleHR1cmVzOmJvb2xlYW47XG5cdHB1YmxpYyB1c2VzVVZUcmFuc2Zvcm06Ym9vbGVhbjtcblx0cHVibGljIGFscGhhVGhyZXNob2xkOm51bWJlcjtcblx0cHVibGljIHRleHR1cmU6VGV4dHVyZTJEQmFzZTtcblx0cHVibGljIGNvbG9yOm51bWJlcjtcblxuXG5cdC8vc2V0IGFtYmllbnQgdmFsdWVzIHRvIGRlZmF1bHRcblx0cHVibGljIGFtYmllbnRSOm51bWJlciA9IDB4RkY7XG5cdHB1YmxpYyBhbWJpZW50RzpudW1iZXIgPSAweEZGO1xuXHRwdWJsaWMgYW1iaWVudEI6bnVtYmVyID0gMHhGRjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhc3MgcmVxdWlyZXMgYW55IGZyYWdtZW50IGFuaW1hdGlvbiBjb2RlLlxuXHQgKi9cblx0cHVibGljIHVzZXNGcmFnbWVudEFuaW1hdGlvbjpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgcHJvamVjdGVkIHBvc2l0aW9uLlxuXHQgKi9cblx0cHVibGljIHByb2plY3Rpb25EZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgbm9ybWFsIHZlY3Rvci5cblx0ICovXG5cdHB1YmxpYyBub3JtYWxEZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgdmlldyBkaXJlY3Rpb24uXG5cdCAqL1xuXHRwdWJsaWMgdmlld0RpckRlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgZGVwZW5kZW5jaWVzIG9uIHRoZSBwcmltYXJ5IFVWIGNvb3JkaW5hdGVzLlxuXHQgKi9cblx0cHVibGljIHV2RGVwZW5kZW5jaWVzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkZXBlbmRlbmNpZXMgb24gdGhlIHNlY29uZGFyeSBVViBjb29yZGluYXRlcy5cblx0ICovXG5cdHB1YmxpYyBzZWNvbmRhcnlVVkRlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgZGVwZW5kZW5jaWVzIG9uIHRoZSBsb2NhbCBwb3NpdGlvbi4gVGhpcyBjYW4gYmUgMCB3aGlsZSBoYXNHbG9iYWxQb3NEZXBlbmRlbmNpZXMgaXMgdHJ1ZSB3aGVuXG5cdCAqIHRoZSBnbG9iYWwgcG9zaXRpb24gaXMgdXNlZCBhcyBhIHRlbXBvcmFyeSB2YWx1ZSAoZmUgdG8gY2FsY3VsYXRlIHRoZSB2aWV3IGRpcmVjdGlvbilcblx0ICovXG5cdHB1YmxpYyBsb2NhbFBvc0RlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgZGVwZW5kZW5jaWVzIG9uIHRoZSBnbG9iYWwgcG9zaXRpb24uIFRoaXMgY2FuIGJlIDAgd2hpbGUgaGFzR2xvYmFsUG9zRGVwZW5kZW5jaWVzIGlzIHRydWUgd2hlblxuXHQgKiB0aGUgZ2xvYmFsIHBvc2l0aW9uIGlzIHVzZWQgYXMgYSB0ZW1wb3JhcnkgdmFsdWUgKGZlIHRvIGNhbGN1bGF0ZSB0aGUgdmlldyBkaXJlY3Rpb24pXG5cdCAqL1xuXHRwdWJsaWMgZ2xvYmFsUG9zRGVwZW5kZW5jaWVzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiB0YW5nZW50IHZlY3RvciBkZXBlbmRlbmNpZXMgKGZyYWdtZW50IHNoYWRlcikuXG5cdCAqL1xuXHRwdWJsaWMgdGFuZ2VudERlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgb3V0cHV0c05vcm1hbHM6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IG5vcm1hbCBjYWxjdWxhdGlvbnMgYXJlIGV4cGVjdGVkIGluIHRhbmdlbnQgc3BhY2UuIFRoaXMgaXMgb25seSB0aGUgY2FzZSBpZiBubyB3b3JsZC1zcGFjZVxuXHQgKiBkZXBlbmRlbmNpZXMgZXhpc3QuXG5cdCAqL1xuXHRwdWJsaWMgdXNlc1RhbmdlbnRTcGFjZTpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFsIGNhbGN1bGF0aW9ucyBhcmUgb3V0cHV0IGluIHRhbmdlbnQgc3BhY2UuXG5cdCAqL1xuXHRwdWJsaWMgb3V0cHV0c1RhbmdlbnROb3JtYWxzOmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSB3b3JsZC1zcGFjZSBwb3NpdGlvbiB2ZWN0b3IuXG5cdCAqL1xuXHRwdWJsaWMgdXNlc0dsb2JhbFBvc0ZyYWdtZW50OmJvb2xlYW4gPSBmYWxzZTtcblxuXHRwdWJsaWMgdmVydGV4Q29uc3RhbnREYXRhOkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXHRwdWJsaWMgZnJhZ21lbnRDb25zdGFudERhdGE6QXJyYXk8bnVtYmVyPiA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBmb3IgdGhlIGNvbW1vbiBkYXRhIHJlZ2lzdGVyLlxuXHQgKi9cblx0cHVibGljIGNvbW1vbnNEYXRhSW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggZm9yIHRoZSBVViB2ZXJ0ZXggYXR0cmlidXRlIHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyB1dkJ1ZmZlckluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IGZvciB0aGUgc2Vjb25kYXJ5IFVWIHZlcnRleCBhdHRyaWJ1dGUgc3RyZWFtLlxuXHQgKi9cblx0cHVibGljIHNlY29uZGFyeVVWQnVmZmVySW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggZm9yIHRoZSB2ZXJ0ZXggbm9ybWFsIGF0dHJpYnV0ZSBzdHJlYW0uXG5cdCAqL1xuXHRwdWJsaWMgbm9ybWFsQnVmZmVySW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggZm9yIHRoZSB2ZXJ0ZXggdGFuZ2VudCBhdHRyaWJ1dGUgc3RyZWFtLlxuXHQgKi9cblx0cHVibGljIHRhbmdlbnRCdWZmZXJJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgdmVydGV4IGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIHZpZXcgbWF0cml4LlxuXHQgKi9cblx0cHVibGljIHZpZXdNYXRyaXhJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgdmVydGV4IGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIHNjZW5lIG1hdHJpeC5cblx0ICovXG5cdHB1YmxpYyBzY2VuZU1hdHJpeEluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IG9mIHRoZSB2ZXJ0ZXggY29uc3RhbnQgY29udGFpbmluZyB0aGUgdW5pZm9ybSBzY2VuZSBtYXRyaXggKHRoZSBpbnZlcnNlIHRyYW5zcG9zZSkuXG5cdCAqL1xuXHRwdWJsaWMgc2NlbmVOb3JtYWxNYXRyaXhJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgdmVydGV4IGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIGNhbWVyYSBwb3NpdGlvbi5cblx0ICovXG5cdHB1YmxpYyBjYW1lcmFQb3NpdGlvbkluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IGZvciB0aGUgVVYgdHJhbnNmb3JtYXRpb24gbWF0cml4IHZlcnRleCBjb25zdGFudC5cblx0ICovXG5cdHB1YmxpYyB1dlRyYW5zZm9ybUluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBNZXRob2RDb21waWxlclZPIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHByb2ZpbGUpXG5cdHtcblx0XHR0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIGNvbXBpbGVyIG9iamVjdCBmb3IgdGhpcyBvYmplY3Rcblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsUGFzc1ZPXG5cdCAqIEByZXR1cm5zIHthd2F5Lm1hdGVyaWFscy5TaGFkZXJDb21waWxlckJhc2V9XG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlQ29tcGlsZXIobWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSwgbWF0ZXJpYWxQYXNzOklNYXRlcmlhbFBhc3NTdGFnZUdMKTpTaGFkZXJDb21waWxlckJhc2Vcblx0e1xuXHRcdHJldHVybiBuZXcgU2hhZGVyQ29tcGlsZXJCYXNlKG1hdGVyaWFsLCBtYXRlcmlhbFBhc3MsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBkZXBlbmRlbmN5IGNvdW50cyBmb3IgYWxsIHJlZ2lzdGVycy4gQ2FsbGVkIHdoZW4gcmVjb21waWxpbmcgYSBwYXNzLlxuXHQgKi9cblx0cHVibGljIHJlc2V0KClcblx0e1xuXHRcdHRoaXMucHJvamVjdGlvbkRlcGVuZGVuY2llcyA9IDA7XG5cdFx0dGhpcy5ub3JtYWxEZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMudmlld0RpckRlcGVuZGVuY2llcyA9IDA7XG5cdFx0dGhpcy51dkRlcGVuZGVuY2llcyA9IDA7XG5cdFx0dGhpcy5zZWNvbmRhcnlVVkRlcGVuZGVuY2llcyA9IDA7XG5cdFx0dGhpcy5nbG9iYWxQb3NEZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMudGFuZ2VudERlcGVuZGVuY2llcyA9IDA7XG5cdFx0dGhpcy51c2VzR2xvYmFsUG9zRnJhZ21lbnQgPSBmYWxzZTtcblx0XHR0aGlzLnVzZXNGcmFnbWVudEFuaW1hdGlvbiA9IGZhbHNlO1xuXHRcdHRoaXMudXNlc1RhbmdlbnRTcGFjZSA9IGZhbHNlO1xuXHRcdHRoaXMub3V0cHV0c05vcm1hbHMgPSBmYWxzZTtcblx0XHR0aGlzLm91dHB1dHNUYW5nZW50Tm9ybWFscyA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW55IGV4dGVybmFsIHdvcmxkIHNwYWNlIGRlcGVuZGVuY2llcywgdXNlZCB0byBmb3JjZSB3b3JsZCBzcGFjZSBjYWxjdWxhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmcmFnbWVudExpZ2h0czpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMudmlld0RpckRlcGVuZGVuY2llcyA+IDApXG5cdFx0XHQrK3RoaXMuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzO1xuXHR9XG5cblx0cHVibGljIHBJbml0UmVnaXN0ZXJJbmRpY2VzKClcblx0e1xuXHRcdHRoaXMuY29tbW9uc0RhdGFJbmRleCA9IC0xO1xuXHRcdHRoaXMuY2FtZXJhUG9zaXRpb25JbmRleCA9IC0xO1xuXHRcdHRoaXMudXZCdWZmZXJJbmRleCA9IC0xO1xuXHRcdHRoaXMudXZUcmFuc2Zvcm1JbmRleCA9IC0xO1xuXHRcdHRoaXMuc2Vjb25kYXJ5VVZCdWZmZXJJbmRleCA9IC0xO1xuXHRcdHRoaXMubm9ybWFsQnVmZmVySW5kZXggPSAtMTtcblx0XHR0aGlzLnRhbmdlbnRCdWZmZXJJbmRleCA9IC0xO1xuXHRcdHRoaXMuc2NlbmVNYXRyaXhJbmRleCA9IC0xO1xuXHRcdHRoaXMuc2NlbmVOb3JtYWxNYXRyaXhJbmRleCA9IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB1bmNoYW5naW5nIGNvbnN0YW50IGRhdGEgZm9yIHRoaXMgc2hhZGVyIG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBpbml0Q29uc3RhbnREYXRhKHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgYW5pbWF0YWJsZUF0dHJpYnV0ZXM6QXJyYXk8c3RyaW5nPiwgYW5pbWF0aW9uVGFyZ2V0UmVnaXN0ZXJzOkFycmF5PHN0cmluZz4sIHV2U291cmNlOnN0cmluZywgdXZUYXJnZXQ6c3RyaW5nKVxuXHR7XG5cdFx0Ly9VcGRhdGVzIHRoZSBhbW91bnQgb2YgdXNlZCByZWdpc3RlciBpbmRpY2VzLlxuXHRcdHRoaXMubnVtVXNlZFZlcnRleENvbnN0YW50cyA9IHJlZ2lzdGVyQ2FjaGUubnVtVXNlZFZlcnRleENvbnN0YW50cztcblx0XHR0aGlzLm51bVVzZWRGcmFnbWVudENvbnN0YW50cyA9IHJlZ2lzdGVyQ2FjaGUubnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzO1xuXHRcdHRoaXMubnVtVXNlZFN0cmVhbXMgPSByZWdpc3RlckNhY2hlLm51bVVzZWRTdHJlYW1zO1xuXHRcdHRoaXMubnVtVXNlZFRleHR1cmVzID0gcmVnaXN0ZXJDYWNoZS5udW1Vc2VkVGV4dHVyZXM7XG5cdFx0dGhpcy5udW1Vc2VkVmFyeWluZ3MgPSByZWdpc3RlckNhY2hlLm51bVVzZWRWYXJ5aW5ncztcblx0XHR0aGlzLm51bVVzZWRGcmFnbWVudENvbnN0YW50cyA9IHJlZ2lzdGVyQ2FjaGUubnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzO1xuXG5cdFx0dGhpcy5hbmltYXRhYmxlQXR0cmlidXRlcyA9IGFuaW1hdGFibGVBdHRyaWJ1dGVzO1xuXHRcdHRoaXMuYW5pbWF0aW9uVGFyZ2V0UmVnaXN0ZXJzID0gYW5pbWF0aW9uVGFyZ2V0UmVnaXN0ZXJzO1xuXHRcdHRoaXMudXZTb3VyY2UgPSB1dlNvdXJjZTtcblx0XHR0aGlzLnV2VGFyZ2V0ID0gdXZUYXJnZXQ7XG5cblx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YS5sZW5ndGggPSB0aGlzLm51bVVzZWRWZXJ0ZXhDb25zdGFudHMqNDtcblx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhLmxlbmd0aCA9IHRoaXMubnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzKjQ7XG5cblx0XHQvL0luaXRpYWxpemVzIGNvbW1vbmx5IHJlcXVpcmVkIGNvbnN0YW50IHZhbHVlcy5cblx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW3RoaXMuY29tbW9uc0RhdGFJbmRleF0gPSAuNTtcblx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW3RoaXMuY29tbW9uc0RhdGFJbmRleCArIDFdID0gMDtcblx0XHR0aGlzLmZyYWdtZW50Q29uc3RhbnREYXRhW3RoaXMuY29tbW9uc0RhdGFJbmRleCArIDJdID0gMS8yNTU7XG5cdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLmNvbW1vbnNEYXRhSW5kZXggKyAzXSA9IDE7XG5cblx0XHQvL0luaXRpYWxpemVzIHRoZSBkZWZhdWx0IFVWIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC5cblx0XHRpZiAodGhpcy51dlRyYW5zZm9ybUluZGV4ID49IDApIHtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleF0gPSAxO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgMV0gPSAwO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgMl0gPSAwO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgM10gPSAwO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgNF0gPSAwO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgNV0gPSAxO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgNl0gPSAwO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgN10gPSAwO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggPj0gMClcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleCArIDNdID0gMTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLnNldEN1bGxpbmcodGhpcy51c2VCb3RoU2lkZXM/IENvbnRleHRHTFRyaWFuZ2xlRmFjZS5OT05FIDogdGhpcy5fZGVmYXVsdEN1bGxpbmcsIGNhbWVyYS5wcm9qZWN0aW9uLmNvb3JkaW5hdGVTeXN0ZW0pO1xuXG5cdFx0aWYgKCF0aGlzLnVzZXNUYW5nZW50U3BhY2UgJiYgdGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4ID49IDApIHtcblx0XHRcdHZhciBwb3M6VmVjdG9yM0QgPSBjYW1lcmEuc2NlbmVQb3NpdGlvbjtcblxuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4XSA9IHBvcy54O1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4ICsgMV0gPSBwb3MueTtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleCArIDJdID0gcG9zLno7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaURlYWN0aXZhdGUoc3RhZ2U6U3RhZ2UpXG5cdHtcblxuXHR9XG5cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHJlbmRlcmFibGVcblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwYXJhbSBjYW1lcmFcblx0ICovXG5cdHB1YmxpYyBzZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0O1xuXG5cdFx0aWYgKHJlbmRlcmFibGUubWF0ZXJpYWxPd25lci5hbmltYXRvcilcblx0XHRcdCg8QW5pbWF0b3JCYXNlPiByZW5kZXJhYmxlLm1hdGVyaWFsT3duZXIuYW5pbWF0b3IpLnNldFJlbmRlclN0YXRlKHRoaXMsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHRoaXMubnVtVXNlZFZlcnRleENvbnN0YW50cywgdGhpcy5udW1Vc2VkU3RyZWFtcyk7XG5cblx0XHRpZiAodGhpcy51dkJ1ZmZlckluZGV4ID49IDApXG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKHRoaXMudXZCdWZmZXJJbmRleCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuVVZfREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuVVZfREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuVVZfRk9STUFUKTtcblxuXHRcdGlmICh0aGlzLnNlY29uZGFyeVVWQnVmZmVySW5kZXggPj0gMClcblx0XHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIodGhpcy5zZWNvbmRhcnlVVkJ1ZmZlckluZGV4LCByZW5kZXJhYmxlLmdldFZlcnRleERhdGEoVHJpYW5nbGVTdWJHZW9tZXRyeS5TRUNPTkRBUllfVVZfREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuU0VDT05EQVJZX1VWX0RBVEEpLCBUcmlhbmdsZVN1Ykdlb21ldHJ5LlNFQ09OREFSWV9VVl9GT1JNQVQpO1xuXG5cdFx0aWYgKHRoaXMubm9ybWFsQnVmZmVySW5kZXggPj0gMClcblx0XHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIodGhpcy5ub3JtYWxCdWZmZXJJbmRleCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuTk9STUFMX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChUcmlhbmdsZVN1Ykdlb21ldHJ5Lk5PUk1BTF9EQVRBKSwgVHJpYW5nbGVTdWJHZW9tZXRyeS5OT1JNQUxfRk9STUFUKTtcblxuXHRcdGlmICh0aGlzLnRhbmdlbnRCdWZmZXJJbmRleCA+PSAwKVxuXHRcdFx0Y29udGV4dC5hY3RpdmF0ZUJ1ZmZlcih0aGlzLnRhbmdlbnRCdWZmZXJJbmRleCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuVEFOR0VOVF9EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoVHJpYW5nbGVTdWJHZW9tZXRyeS5UQU5HRU5UX0RBVEEpLCBUcmlhbmdsZVN1Ykdlb21ldHJ5LlRBTkdFTlRfRk9STUFUKTtcblxuXG5cdFx0aWYgKHRoaXMudXNlc1VWVHJhbnNmb3JtKSB7XG5cdFx0XHR2YXIgdXZUcmFuc2Zvcm06TWF0cml4ID0gcmVuZGVyYWJsZS5tYXRlcmlhbE93bmVyLnV2VHJhbnNmb3JtLm1hdHJpeDtcblxuXHRcdFx0aWYgKHV2VHJhbnNmb3JtKSB7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleF0gPSB1dlRyYW5zZm9ybS5hO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyAxXSA9IHV2VHJhbnNmb3JtLmI7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDNdID0gdXZUcmFuc2Zvcm0udHg7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDRdID0gdXZUcmFuc2Zvcm0uYztcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgNV0gPSB1dlRyYW5zZm9ybS5kO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyA3XSA9IHV2VHJhbnNmb3JtLnR5O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4XSA9IDE7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDFdID0gMDtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgM10gPSAwO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyA0XSA9IDA7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDVdID0gMTtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgN10gPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNjZW5lTm9ybWFsTWF0cml4SW5kZXggPj0gMClcblx0XHRcdHJlbmRlcmFibGUuc291cmNlRW50aXR5LmludmVyc2VTY2VuZVRyYW5zZm9ybS5jb3B5UmF3RGF0YVRvKHRoaXMudmVydGV4Q29uc3RhbnREYXRhLCB0aGlzLnNjZW5lTm9ybWFsTWF0cml4SW5kZXgsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLnVzZXNUYW5nZW50U3BhY2UgJiYgdGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4ID49IDApIHtcblxuXHRcdFx0cmVuZGVyYWJsZS5zb3VyY2VFbnRpdHkuaW52ZXJzZVNjZW5lVHJhbnNmb3JtLmNvcHlSYXdEYXRhVG8odGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeCk7XG5cdFx0XHR2YXIgcG9zOlZlY3RvcjNEID0gY2FtZXJhLnNjZW5lUG9zaXRpb247XG5cdFx0XHR2YXIgeDpudW1iZXIgPSBwb3MueDtcblx0XHRcdHZhciB5Om51bWJlciA9IHBvcy55O1xuXHRcdFx0dmFyIHo6bnVtYmVyID0gcG9zLno7XG5cblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleF0gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzBdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzRdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzhdKnogKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzEyXTtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleCArIDFdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs1XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs5XSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxM107XG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggKyAyXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMl0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNl0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMTBdKnogKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzE0XTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHQvL1RPRE8gdW5jb3VudCBhc3NvY2lhdGVkIHByb2dyYW0gZGF0YVxuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRlck9iamVjdEJhc2U7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vc2hhZGVyb2JqZWN0YmFzZS50cyJdLCJuYW1lcyI6WyJTaGFkZXJPYmplY3RCYXNlIiwiU2hhZGVyT2JqZWN0QmFzZS5jb25zdHJ1Y3RvciIsIlNoYWRlck9iamVjdEJhc2UuY3JlYXRlQ29tcGlsZXIiLCJTaGFkZXJPYmplY3RCYXNlLnJlc2V0IiwiU2hhZGVyT2JqZWN0QmFzZS5hZGRXb3JsZFNwYWNlRGVwZW5kZW5jaWVzIiwiU2hhZGVyT2JqZWN0QmFzZS5wSW5pdFJlZ2lzdGVySW5kaWNlcyIsIlNoYWRlck9iamVjdEJhc2UuaW5pdENvbnN0YW50RGF0YSIsIlNoYWRlck9iamVjdEJhc2UuaUFjdGl2YXRlIiwiU2hhZGVyT2JqZWN0QmFzZS5pRGVhY3RpdmF0ZSIsIlNoYWRlck9iamVjdEJhc2Uuc2V0UmVuZGVyU3RhdGUiLCJTaGFkZXJPYmplY3RCYXNlLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQU9BLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQVN0RixJQUFPLHFCQUFxQixXQUFZLCtDQUErQyxDQUFDLENBQUM7QUFFekYsSUFBTyxrQkFBa0IsV0FBYSw2REFBNkQsQ0FBQyxDQUFDO0FBSXJHLEFBUUE7Ozs7Ozs7R0FERztJQUNHLGdCQUFnQjtJQWtMckJBOztPQUVHQTtJQUNIQSxTQXJMS0EsZ0JBQWdCQSxDQXFMVEEsT0FBT0E7UUFsTFhDLG9CQUFlQSxHQUFVQSxxQkFBcUJBLENBQUNBLElBQUlBLENBQUNBO1FBRXJEQSx5QkFBb0JBLEdBQWlCQSxJQUFJQSxLQUFLQSxFQUFVQSxDQUFDQTtRQStDaEVBLCtCQUErQkE7UUFDeEJBLGFBQVFBLEdBQVVBLElBQUlBLENBQUNBO1FBQ3ZCQSxhQUFRQSxHQUFVQSxJQUFJQSxDQUFDQTtRQUN2QkEsYUFBUUEsR0FBVUEsSUFBSUEsQ0FBQ0E7UUFpRTlCQTs7V0FFR0E7UUFDSUEsMEJBQXFCQSxHQUFXQSxL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R0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFekRBLEFBQ0FBLG1EQURtREE7UUFDbkRBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNuREEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3ZEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3ZEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3hEQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLElBQUlBLENBQUNB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Z0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBO2dCQUNwRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO2dCQUNuRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO2dCQUNuRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBO1lBQ3JFQSxDQUFDQTtZQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtnQkFDUEEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUNuREEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO2dCQUN2REEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3hEQSxDQUFDQTtRQUNGQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxzQkFBc0JBLElBQUlBLENBQUNBLENBQUNBO1lBQ3BDQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsRUFBRUEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUUxSEEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxJQUFJQSxDQUFDQSxtQkFBbUJBLElBQUlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBRTVEQSxVQUFVQSxDQUFDQSxZQUFZQSxDQUFDQSxxQkFBcUJBLENBQUNBLGFBQWFBLENBQUNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0E7WUFDdkZBLElBQUlBLEdBQUdBLEdBQVlBLE1BQU1BLENBQUNBLGFBQWFBLENBQUNBO1lBQ3hDQSxJQUFJQSxDQUFDQSxHQUFVQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyQkEsSUFBSUEsQ0FBQ0EsR0FBVUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckJBLElBQUlBLENBQUNBLEdBQVVBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1lBRXJCQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQTtZQUNyTEEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxtQkFBbUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7WUFDekxBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBQzNMQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVNVCxrQ0FBT0EsR0FBZEE7UUFFQ1Usc0NBQXNDQTtJQUN2Q0EsQ0FBQ0E7SUFDRlYsdUJBQUNBO0FBQURBLENBdlhBLEFBdVhDQSxJQUFBO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRyaXhcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXhcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IFRyaWFuZ2xlU3ViR2VvbWV0cnlcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9UcmlhbmdsZVN1Ykdlb21ldHJ5XCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEFuaW1hdGlvblNldEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9hbmltYXRvcnMvQW5pbWF0aW9uU2V0QmFzZVwiKTtcbmltcG9ydCBBbmltYXRvckJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2FuaW1hdG9ycy9BbmltYXRvckJhc2VcIik7XG5pbXBvcnQgQW5pbWF0aW9uUmVnaXN0ZXJDYWNoZVx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYW5pbWF0b3JzL2RhdGEvQW5pbWF0aW9uUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgQ29udGV4dEdMVHJpYW5nbGVGYWNlXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFRyaWFuZ2xlRmFjZVwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVyQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyQ29tcGlsZXJCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgSU1hdGVyaWFsUGFzc1N0YWdlR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTWF0ZXJpYWxQYXNzU3RhZ2VHTFwiKTtcblxuLyoqXG4gKiBTaGFkZXJPYmplY3RCYXNlIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBcIm5hbWVkIHJlZ2lzdGVyc1wiIHVzZWQgYWNyb3NzIGEgcGFzcy5cbiAqIE5hbWVkIHJlZ2lzdGVycyBhcmUgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IGxpbWl0ZWQgdG8gYSBzaW5nbGUgbWV0aG9kLiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBhbmRcbiAqIHBhc3NlZCBvbiB0byBtZXRob2RzLiBUaGUgY29tcGlsZXIgdXNlcyB0aGUgcmVzdWx0cyB0byByZXNlcnZlIHVzYWdlcyB0aHJvdWdoIFJlZ2lzdGVyUG9vbCwgd2hpY2ggY2FuIGJlIHJlbW92ZWRcbiAqIGVhY2ggdGltZSBhIG1ldGhvZCBoYXMgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBzaGFkZXIuXG4gKlxuICogQHNlZSBSZWdpc3RlclBvb2wuYWRkVXNhZ2VcbiAqL1xuY2xhc3MgU2hhZGVyT2JqZWN0QmFzZVxue1xuXG5cdHByaXZhdGUgX2RlZmF1bHRDdWxsaW5nOnN0cmluZyA9IENvbnRleHRHTFRyaWFuZ2xlRmFjZS5CQUNLO1xuXG5cdHB1YmxpYyBfcEludmVyc2VTY2VuZU1hdHJpeDpBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuXHRwdWJsaWMgYW5pbWF0aW9uUmVnaXN0ZXJDYWNoZTpBbmltYXRpb25SZWdpc3RlckNhY2hlO1xuXG5cdHB1YmxpYyBwcm9maWxlOnN0cmluZztcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiB1c2VkIHZlcnRleCBjb25zdGFudHMgaW4gdGhlIHZlcnRleCBjb2RlLiBVc2VkIGJ5IHRoZSBhbmltYXRpb24gY29kZSBnZW5lcmF0aW9uIHRvIGtub3cgZnJvbSB3aGljaCBpbmRleCBvbiByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZS5cblx0ICovXG5cdHB1YmxpYyBudW1Vc2VkVmVydGV4Q29uc3RhbnRzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiB1c2VkIGZyYWdtZW50IGNvbnN0YW50cyBpbiB0aGUgZnJhZ21lbnQgY29kZS4gVXNlZCBieSB0aGUgYW5pbWF0aW9uIGNvZGUgZ2VuZXJhdGlvbiB0byBrbm93IGZyb20gd2hpY2ggaW5kZXggb24gcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUuXG5cdCAqL1xuXHRwdWJsaWMgbnVtVXNlZEZyYWdtZW50Q29uc3RhbnRzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiB1c2VkIHZlcnRleCBzdHJlYW1zIGluIHRoZSB2ZXJ0ZXggY29kZS4gVXNlZCBieSB0aGUgYW5pbWF0aW9uIGNvZGUgZ2VuZXJhdGlvbiB0byBrbm93IGZyb20gd2hpY2ggaW5kZXggb24gc3RyZWFtcyBhcmUgYXZhaWxhYmxlLlxuXHQgKi9cblx0cHVibGljIG51bVVzZWRTdHJlYW1zOm51bWJlcjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBudW1Vc2VkVGV4dHVyZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG51bVVzZWRWYXJ5aW5nczpudW1iZXI7XG5cblx0cHVibGljIGFuaW1hdGFibGVBdHRyaWJ1dGVzOkFycmF5PHN0cmluZz47XG5cdHB1YmxpYyBhbmltYXRpb25UYXJnZXRSZWdpc3RlcnM6QXJyYXk8c3RyaW5nPjtcblx0cHVibGljIHV2U291cmNlOnN0cmluZztcblx0cHVibGljIHV2VGFyZ2V0OnN0cmluZztcblxuXHRwdWJsaWMgdXNlQWxwaGFQcmVtdWx0aXBsaWVkOmJvb2xlYW47XG5cdHB1YmxpYyB1c2VCb3RoU2lkZXM6Ym9vbGVhbjtcblx0cHVibGljIHVzZU1pcG1hcHBpbmc6Ym9vbGVhbjtcblx0cHVibGljIHVzZVNtb290aFRleHR1cmVzOmJvb2xlYW47XG5cdHB1YmxpYyByZXBlYXRUZXh0dXJlczpib29sZWFuO1xuXHRwdWJsaWMgdXNlc1VWVHJhbnNmb3JtOmJvb2xlYW47XG5cdHB1YmxpYyBhbHBoYVRocmVzaG9sZDpudW1iZXI7XG5cdHB1YmxpYyB0ZXh0dXJlOlRleHR1cmUyREJhc2U7XG5cdHB1YmxpYyBjb2xvcjpudW1iZXI7XG5cblxuXHQvL3NldCBhbWJpZW50IHZhbHVlcyB0byBkZWZhdWx0XG5cdHB1YmxpYyBhbWJpZW50UjpudW1iZXIgPSAweEZGO1xuXHRwdWJsaWMgYW1iaWVudEc6bnVtYmVyID0gMHhGRjtcblx0cHVibGljIGFtYmllbnRCOm51bWJlciA9IDB4RkY7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYXNzIHJlcXVpcmVzIGFueSBmcmFnbWVudCBhbmltYXRpb24gY29kZS5cblx0ICovXG5cdHB1YmxpYyB1c2VzRnJhZ21lbnRBbmltYXRpb246Ym9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkZXBlbmRlbmNpZXMgb24gdGhlIHByb2plY3RlZCBwb3NpdGlvbi5cblx0ICovXG5cdHB1YmxpYyBwcm9qZWN0aW9uRGVwZW5kZW5jaWVzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkZXBlbmRlbmNpZXMgb24gdGhlIG5vcm1hbCB2ZWN0b3IuXG5cdCAqL1xuXHRwdWJsaWMgbm9ybWFsRGVwZW5kZW5jaWVzOm51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkZXBlbmRlbmNpZXMgb24gdGhlIHZpZXcgZGlyZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIHZpZXdEaXJEZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgcHJpbWFyeSBVViBjb29yZGluYXRlcy5cblx0ICovXG5cdHB1YmxpYyB1dkRlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgZGVwZW5kZW5jaWVzIG9uIHRoZSBzZWNvbmRhcnkgVVYgY29vcmRpbmF0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgc2Vjb25kYXJ5VVZEZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgbG9jYWwgcG9zaXRpb24uIFRoaXMgY2FuIGJlIDAgd2hpbGUgaGFzR2xvYmFsUG9zRGVwZW5kZW5jaWVzIGlzIHRydWUgd2hlblxuXHQgKiB0aGUgZ2xvYmFsIHBvc2l0aW9uIGlzIHVzZWQgYXMgYSB0ZW1wb3JhcnkgdmFsdWUgKGZlIHRvIGNhbGN1bGF0ZSB0aGUgdmlldyBkaXJlY3Rpb24pXG5cdCAqL1xuXHRwdWJsaWMgbG9jYWxQb3NEZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGRlcGVuZGVuY2llcyBvbiB0aGUgZ2xvYmFsIHBvc2l0aW9uLiBUaGlzIGNhbiBiZSAwIHdoaWxlIGhhc0dsb2JhbFBvc0RlcGVuZGVuY2llcyBpcyB0cnVlIHdoZW5cblx0ICogdGhlIGdsb2JhbCBwb3NpdGlvbiBpcyB1c2VkIGFzIGEgdGVtcG9yYXJ5IHZhbHVlIChmZSB0byBjYWxjdWxhdGUgdGhlIHZpZXcgZGlyZWN0aW9uKVxuXHQgKi9cblx0cHVibGljIGdsb2JhbFBvc0RlcGVuZGVuY2llczpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgdGFuZ2VudCB2ZWN0b3IgZGVwZW5kZW5jaWVzIChmcmFnbWVudCBzaGFkZXIpLlxuXHQgKi9cblx0cHVibGljIHRhbmdlbnREZXBlbmRlbmNpZXM6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG91dHB1dHNOb3JtYWxzOmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBub3JtYWwgY2FsY3VsYXRpb25zIGFyZSBleHBlY3RlZCBpbiB0YW5nZW50IHNwYWNlLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgbm8gd29ybGQtc3BhY2Vcblx0ICogZGVwZW5kZW5jaWVzIGV4aXN0LlxuXHQgKi9cblx0cHVibGljIHVzZXNUYW5nZW50U3BhY2U6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IG5vcm1hbCBjYWxjdWxhdGlvbnMgYXJlIG91dHB1dCBpbiB0YW5nZW50IHNwYWNlLlxuXHQgKi9cblx0cHVibGljIG91dHB1dHNUYW5nZW50Tm9ybWFsczpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgd29ybGQtc3BhY2UgcG9zaXRpb24gdmVjdG9yLlxuXHQgKi9cblx0cHVibGljIHVzZXNHbG9iYWxQb3NGcmFnbWVudDpib29sZWFuID0gZmFsc2U7XG5cblx0cHVibGljIHZlcnRleENvbnN0YW50RGF0YTpBcnJheTxudW1iZXI+ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblx0cHVibGljIGZyYWdtZW50Q29uc3RhbnREYXRhOkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggZm9yIHRoZSBjb21tb24gZGF0YSByZWdpc3Rlci5cblx0ICovXG5cdHB1YmxpYyBjb21tb25zRGF0YUluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IGZvciB0aGUgVVYgdmVydGV4IGF0dHJpYnV0ZSBzdHJlYW0uXG5cdCAqL1xuXHRwdWJsaWMgdXZCdWZmZXJJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBmb3IgdGhlIHNlY29uZGFyeSBVViB2ZXJ0ZXggYXR0cmlidXRlIHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyBzZWNvbmRhcnlVVkJ1ZmZlckluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IGZvciB0aGUgdmVydGV4IG5vcm1hbCBhdHRyaWJ1dGUgc3RyZWFtLlxuXHQgKi9cblx0cHVibGljIG5vcm1hbEJ1ZmZlckluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGluZGV4IGZvciB0aGUgdmVydGV4IHRhbmdlbnQgYXR0cmlidXRlIHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyB0YW5nZW50QnVmZmVySW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggb2YgdGhlIHZlcnRleCBjb25zdGFudCBjb250YWluaW5nIHRoZSB2aWV3IG1hdHJpeC5cblx0ICovXG5cdHB1YmxpYyB2aWV3TWF0cml4SW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggb2YgdGhlIHZlcnRleCBjb25zdGFudCBjb250YWluaW5nIHRoZSBzY2VuZSBtYXRyaXguXG5cdCAqL1xuXHRwdWJsaWMgc2NlbmVNYXRyaXhJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgdmVydGV4IGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm0gc2NlbmUgbWF0cml4ICh0aGUgaW52ZXJzZSB0cmFuc3Bvc2UpLlxuXHQgKi9cblx0cHVibGljIHNjZW5lTm9ybWFsTWF0cml4SW5kZXg6bnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggb2YgdGhlIHZlcnRleCBjb25zdGFudCBjb250YWluaW5nIHRoZSBjYW1lcmEgcG9zaXRpb24uXG5cdCAqL1xuXHRwdWJsaWMgY2FtZXJhUG9zaXRpb25JbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBmb3IgdGhlIFVWIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB2ZXJ0ZXggY29uc3RhbnQuXG5cdCAqL1xuXHRwdWJsaWMgdXZUcmFuc2Zvcm1JbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTWV0aG9kQ29tcGlsZXJWTyBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcm9maWxlKVxuXHR7XG5cdFx0dGhpcy5wcm9maWxlID0gcHJvZmlsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBjb25jcmV0ZSBjb21waWxlciBvYmplY3QgZm9yIHRoaXMgb2JqZWN0XG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbFBhc3NWT1xuXHQgKiBAcmV0dXJucyB7YXdheS5tYXRlcmlhbHMuU2hhZGVyQ29tcGlsZXJCYXNlfVxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbXBpbGVyKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzczpJTWF0ZXJpYWxQYXNzU3RhZ2VHTCk6U2hhZGVyQ29tcGlsZXJCYXNlXG5cdHtcblx0XHRyZXR1cm4gbmV3IFNoYWRlckNvbXBpbGVyQmFzZShtYXRlcmlhbCwgbWF0ZXJpYWxQYXNzLCB0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgZGVwZW5kZW5jeSBjb3VudHMgZm9yIGFsbCByZWdpc3RlcnMuIENhbGxlZCB3aGVuIHJlY29tcGlsaW5nIGEgcGFzcy5cblx0ICovXG5cdHB1YmxpYyByZXNldCgpXG5cdHtcblx0XHR0aGlzLnByb2plY3Rpb25EZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMubm9ybWFsRGVwZW5kZW5jaWVzID0gMDtcblx0XHR0aGlzLnZpZXdEaXJEZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMudXZEZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMuc2Vjb25kYXJ5VVZEZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzID0gMDtcblx0XHR0aGlzLnRhbmdlbnREZXBlbmRlbmNpZXMgPSAwO1xuXHRcdHRoaXMudXNlc0dsb2JhbFBvc0ZyYWdtZW50ID0gZmFsc2U7XG5cdFx0dGhpcy51c2VzRnJhZ21lbnRBbmltYXRpb24gPSBmYWxzZTtcblx0XHR0aGlzLnVzZXNUYW5nZW50U3BhY2UgPSBmYWxzZTtcblx0XHR0aGlzLm91dHB1dHNOb3JtYWxzID0gZmFsc2U7XG5cdFx0dGhpcy5vdXRwdXRzVGFuZ2VudE5vcm1hbHMgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFueSBleHRlcm5hbCB3b3JsZCBzcGFjZSBkZXBlbmRlbmNpZXMsIHVzZWQgdG8gZm9yY2Ugd29ybGQgc3BhY2UgY2FsY3VsYXRpb25zLlxuXHQgKi9cblx0cHVibGljIGFkZFdvcmxkU3BhY2VEZXBlbmRlbmNpZXMoZnJhZ21lbnRMaWdodHM6Ym9vbGVhbilcblx0e1xuXHRcdGlmICh0aGlzLnZpZXdEaXJEZXBlbmRlbmNpZXMgPiAwKVxuXHRcdFx0Kyt0aGlzLmdsb2JhbFBvc0RlcGVuZGVuY2llcztcblx0fVxuXG5cdHB1YmxpYyBwSW5pdFJlZ2lzdGVySW5kaWNlcygpXG5cdHtcblx0XHR0aGlzLmNvbW1vbnNEYXRhSW5kZXggPSAtMTtcblx0XHR0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggPSAtMTtcblx0XHR0aGlzLnV2QnVmZmVySW5kZXggPSAtMTtcblx0XHR0aGlzLnV2VHJhbnNmb3JtSW5kZXggPSAtMTtcblx0XHR0aGlzLnNlY29uZGFyeVVWQnVmZmVySW5kZXggPSAtMTtcblx0XHR0aGlzLm5vcm1hbEJ1ZmZlckluZGV4ID0gLTE7XG5cdFx0dGhpcy50YW5nZW50QnVmZmVySW5kZXggPSAtMTtcblx0XHR0aGlzLnNjZW5lTWF0cml4SW5kZXggPSAtMTtcblx0XHR0aGlzLnNjZW5lTm9ybWFsTWF0cml4SW5kZXggPSAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdW5jaGFuZ2luZyBjb25zdGFudCBkYXRhIGZvciB0aGlzIHNoYWRlciBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgaW5pdENvbnN0YW50RGF0YShyZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIGFuaW1hdGFibGVBdHRyaWJ1dGVzOkFycmF5PHN0cmluZz4sIGFuaW1hdGlvblRhcmdldFJlZ2lzdGVyczpBcnJheTxzdHJpbmc+LCB1dlNvdXJjZTpzdHJpbmcsIHV2VGFyZ2V0OnN0cmluZylcblx0e1xuXHRcdC8vVXBkYXRlcyB0aGUgYW1vdW50IG9mIHVzZWQgcmVnaXN0ZXIgaW5kaWNlcy5cblx0XHR0aGlzLm51bVVzZWRWZXJ0ZXhDb25zdGFudHMgPSByZWdpc3RlckNhY2hlLm51bVVzZWRWZXJ0ZXhDb25zdGFudHM7XG5cdFx0dGhpcy5udW1Vc2VkRnJhZ21lbnRDb25zdGFudHMgPSByZWdpc3RlckNhY2hlLm51bVVzZWRGcmFnbWVudENvbnN0YW50cztcblx0XHR0aGlzLm51bVVzZWRTdHJlYW1zID0gcmVnaXN0ZXJDYWNoZS5udW1Vc2VkU3RyZWFtcztcblx0XHR0aGlzLm51bVVzZWRUZXh0dXJlcyA9IHJlZ2lzdGVyQ2FjaGUubnVtVXNlZFRleHR1cmVzO1xuXHRcdHRoaXMubnVtVXNlZFZhcnlpbmdzID0gcmVnaXN0ZXJDYWNoZS5udW1Vc2VkVmFyeWluZ3M7XG5cdFx0dGhpcy5udW1Vc2VkRnJhZ21lbnRDb25zdGFudHMgPSByZWdpc3RlckNhY2hlLm51bVVzZWRGcmFnbWVudENvbnN0YW50cztcblxuXHRcdHRoaXMuYW5pbWF0YWJsZUF0dHJpYnV0ZXMgPSBhbmltYXRhYmxlQXR0cmlidXRlcztcblx0XHR0aGlzLmFuaW1hdGlvblRhcmdldFJlZ2lzdGVycyA9IGFuaW1hdGlvblRhcmdldFJlZ2lzdGVycztcblx0XHR0aGlzLnV2U291cmNlID0gdXZTb3VyY2U7XG5cdFx0dGhpcy51dlRhcmdldCA9IHV2VGFyZ2V0O1xuXG5cdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGEubGVuZ3RoID0gdGhpcy5udW1Vc2VkVmVydGV4Q29uc3RhbnRzKjQ7XG5cdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YS5sZW5ndGggPSB0aGlzLm51bVVzZWRGcmFnbWVudENvbnN0YW50cyo0O1xuXG5cdFx0Ly9Jbml0aWFsaXplcyBjb21tb25seSByZXF1aXJlZCBjb25zdGFudCB2YWx1ZXMuXG5cdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLmNvbW1vbnNEYXRhSW5kZXhdID0gLjU7XG5cdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLmNvbW1vbnNEYXRhSW5kZXggKyAxXSA9IDA7XG5cdFx0dGhpcy5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLmNvbW1vbnNEYXRhSW5kZXggKyAyXSA9IDEvMjU1O1xuXHRcdHRoaXMuZnJhZ21lbnRDb25zdGFudERhdGFbdGhpcy5jb21tb25zRGF0YUluZGV4ICsgM10gPSAxO1xuXG5cdFx0Ly9Jbml0aWFsaXplcyB0aGUgZGVmYXVsdCBVViB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXG5cdFx0aWYgKHRoaXMudXZUcmFuc2Zvcm1JbmRleCA+PSAwKSB7XG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXhdID0gMTtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDFdID0gMDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDJdID0gMDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDNdID0gMDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDRdID0gMDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDVdID0gMTtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDZdID0gMDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDddID0gMDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4ID49IDApXG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggKyAzXSA9IDE7XG5cdH1cblxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlBY3RpdmF0ZShzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5zZXRDdWxsaW5nKHRoaXMudXNlQm90aFNpZGVzPyBDb250ZXh0R0xUcmlhbmdsZUZhY2UuTk9ORSA6IHRoaXMuX2RlZmF1bHRDdWxsaW5nLCBjYW1lcmEucHJvamVjdGlvbi5jb29yZGluYXRlU3lzdGVtKTtcblxuXHRcdGlmICghdGhpcy51c2VzVGFuZ2VudFNwYWNlICYmIHRoaXMuY2FtZXJhUG9zaXRpb25JbmRleCA+PSAwKSB7XG5cdFx0XHR2YXIgcG9zOlZlY3RvcjNEID0gY2FtZXJhLnNjZW5lUG9zaXRpb247XG5cblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleF0gPSBwb3MueDtcblx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMuY2FtZXJhUG9zaXRpb25JbmRleCArIDFdID0gcG9zLnk7XG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggKyAyXSA9IHBvcy56O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlEZWFjdGl2YXRlKHN0YWdlOlN0YWdlKVxuXHR7XG5cblx0fVxuXG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlXG5cdCAqIEBwYXJhbSBzdGFnZVxuXHQgKiBAcGFyYW0gY2FtZXJhXG5cdCAqL1xuXHRwdWJsaWMgc2V0UmVuZGVyU3RhdGUocmVuZGVyYWJsZTpSZW5kZXJhYmxlQmFzZSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEsIHZpZXdQcm9qZWN0aW9uOk1hdHJpeDNEKVxuXHR7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsT3duZXIuYW5pbWF0b3IpXG5cdFx0XHQoPEFuaW1hdG9yQmFzZT4gcmVuZGVyYWJsZS5tYXRlcmlhbE93bmVyLmFuaW1hdG9yKS5zZXRSZW5kZXJTdGF0ZSh0aGlzLCByZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB0aGlzLm51bVVzZWRWZXJ0ZXhDb25zdGFudHMsIHRoaXMubnVtVXNlZFN0cmVhbXMpO1xuXG5cdFx0aWYgKHRoaXMudXZCdWZmZXJJbmRleCA+PSAwKVxuXHRcdFx0Y29udGV4dC5hY3RpdmF0ZUJ1ZmZlcih0aGlzLnV2QnVmZmVySW5kZXgsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0RBVEEpLCBUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0ZPUk1BVCk7XG5cblx0XHRpZiAodGhpcy5zZWNvbmRhcnlVVkJ1ZmZlckluZGV4ID49IDApXG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKHRoaXMuc2Vjb25kYXJ5VVZCdWZmZXJJbmRleCwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhEYXRhKFRyaWFuZ2xlU3ViR2VvbWV0cnkuU0VDT05EQVJZX1VWX0RBVEEpLCByZW5kZXJhYmxlLmdldFZlcnRleE9mZnNldChUcmlhbmdsZVN1Ykdlb21ldHJ5LlNFQ09OREFSWV9VVl9EQVRBKSwgVHJpYW5nbGVTdWJHZW9tZXRyeS5TRUNPTkRBUllfVVZfRk9STUFUKTtcblxuXHRcdGlmICh0aGlzLm5vcm1hbEJ1ZmZlckluZGV4ID49IDApXG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlQnVmZmVyKHRoaXMubm9ybWFsQnVmZmVySW5kZXgsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShUcmlhbmdsZVN1Ykdlb21ldHJ5Lk5PUk1BTF9EQVRBKSwgcmVuZGVyYWJsZS5nZXRWZXJ0ZXhPZmZzZXQoVHJpYW5nbGVTdWJHZW9tZXRyeS5OT1JNQUxfREFUQSksIFRyaWFuZ2xlU3ViR2VvbWV0cnkuTk9STUFMX0ZPUk1BVCk7XG5cblx0XHRpZiAodGhpcy50YW5nZW50QnVmZmVySW5kZXggPj0gMClcblx0XHRcdGNvbnRleHQuYWN0aXZhdGVCdWZmZXIodGhpcy50YW5nZW50QnVmZmVySW5kZXgsIHJlbmRlcmFibGUuZ2V0VmVydGV4RGF0YShUcmlhbmdsZVN1Ykdlb21ldHJ5LlRBTkdFTlRfREFUQSksIHJlbmRlcmFibGUuZ2V0VmVydGV4T2Zmc2V0KFRyaWFuZ2xlU3ViR2VvbWV0cnkuVEFOR0VOVF9EQVRBKSwgVHJpYW5nbGVTdWJHZW9tZXRyeS5UQU5HRU5UX0ZPUk1BVCk7XG5cblxuXHRcdGlmICh0aGlzLnVzZXNVVlRyYW5zZm9ybSkge1xuXHRcdFx0dmFyIHV2VHJhbnNmb3JtOk1hdHJpeCA9IHJlbmRlcmFibGUubWF0ZXJpYWxPd25lci51dlRyYW5zZm9ybS5tYXRyaXg7XG5cblx0XHRcdGlmICh1dlRyYW5zZm9ybSkge1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXhdID0gdXZUcmFuc2Zvcm0uYTtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgMV0gPSB1dlRyYW5zZm9ybS5iO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyAzXSA9IHV2VHJhbnNmb3JtLnR4O1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyA0XSA9IHV2VHJhbnNmb3JtLmM7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDVdID0gdXZUcmFuc2Zvcm0uZDtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgN10gPSB1dlRyYW5zZm9ybS50eTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleF0gPSAxO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyAxXSA9IDA7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDNdID0gMDtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy51dlRyYW5zZm9ybUluZGV4ICsgNF0gPSAwO1xuXHRcdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLnV2VHJhbnNmb3JtSW5kZXggKyA1XSA9IDE7XG5cdFx0XHRcdHRoaXMudmVydGV4Q29uc3RhbnREYXRhW3RoaXMudXZUcmFuc2Zvcm1JbmRleCArIDddID0gMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5zY2VuZU5vcm1hbE1hdHJpeEluZGV4ID49IDApXG5cdFx0XHRyZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5pbnZlcnNlU2NlbmVUcmFuc2Zvcm0uY29weVJhd0RhdGFUbyh0aGlzLnZlcnRleENvbnN0YW50RGF0YSwgdGhpcy5zY2VuZU5vcm1hbE1hdHJpeEluZGV4LCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy51c2VzVGFuZ2VudFNwYWNlICYmIHRoaXMuY2FtZXJhUG9zaXRpb25JbmRleCA+PSAwKSB7XG5cblx0XHRcdHJlbmRlcmFibGUuc291cmNlRW50aXR5LmludmVyc2VTY2VuZVRyYW5zZm9ybS5jb3B5UmF3RGF0YVRvKHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXgpO1xuXHRcdFx0dmFyIHBvczpWZWN0b3IzRCA9IGNhbWVyYS5zY2VuZVBvc2l0aW9uO1xuXHRcdFx0dmFyIHg6bnVtYmVyID0gcG9zLng7XG5cdFx0XHR2YXIgeTpudW1iZXIgPSBwb3MueTtcblx0XHRcdHZhciB6Om51bWJlciA9IHBvcy56O1xuXG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXhdID0gdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFswXSp4ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs0XSp5ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFs4XSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxMl07XG5cdFx0XHR0aGlzLnZlcnRleENvbnN0YW50RGF0YVt0aGlzLmNhbWVyYVBvc2l0aW9uSW5kZXggKyAxXSA9IHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMV0qeCArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbNV0qeSArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbOV0qeiArIHRoaXMuX3BJbnZlcnNlU2NlbmVNYXRyaXhbMTNdO1xuXHRcdFx0dGhpcy52ZXJ0ZXhDb25zdGFudERhdGFbdGhpcy5jYW1lcmFQb3NpdGlvbkluZGV4ICsgMl0gPSB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzJdKnggKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzZdKnkgKyB0aGlzLl9wSW52ZXJzZVNjZW5lTWF0cml4WzEwXSp6ICsgdGhpcy5fcEludmVyc2VTY2VuZU1hdHJpeFsxNF07XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0Ly9UT0RPIHVuY291bnQgYXNzb2NpYXRlZCBwcm9ncmFtIGRhdGFcblx0fVxufVxuXG5leHBvcnQgPSBTaGFkZXJPYmplY3RCYXNlOyJdfQ== \ No newline at end of file diff --git a/lib/materials/compilation/ShaderObjectBase.ts b/lib/materials/compilation/ShaderObjectBase.ts index e3a747c9..79ff20a3 100644 --- a/lib/materials/compilation/ShaderObjectBase.ts +++ b/lib/materials/compilation/ShaderObjectBase.ts @@ -8,13 +8,13 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import AnimationSetBase = require("awayjs-stagegl/lib/animators/AnimationSetBase"); import AnimatorBase = require("awayjs-stagegl/lib/animators/AnimatorBase"); import AnimationRegisterCache = require("awayjs-stagegl/lib/animators/data/AnimationRegisterCache"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import ContextGLTriangleFace = require("awayjs-stagegl/lib/core/stagegl/ContextGLTriangleFace"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import ContextGLTriangleFace = require("awayjs-stagegl/lib/base/ContextGLTriangleFace"); import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/AmbientBasicMethod.js b/lib/materials/methods/AmbientBasicMethod.js index 403331e3..af45b5fa 100755 --- a/lib/materials/methods/AmbientBasicMethod.js +++ b/lib/materials/methods/AmbientBasicMethod.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -134,4 +134,4 @@ var AmbientBasicMethod = (function (_super) { })(ShadingMethodBase); module.exports = AmbientBasicMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9hbWJpZW50YmFzaWNtZXRob2QudHMiXSwibmFtZXMiOlsiQW1iaWVudEJhc2ljTWV0aG9kIiwiQW1iaWVudEJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiQW1iaWVudEJhc2ljTWV0aG9kLmlJbml0Vk8iLCJBbWJpZW50QmFzaWNNZXRob2QuaUluaXRDb25zdGFudHMiLCJBbWJpZW50QmFzaWNNZXRob2QuYW1iaWVudCIsIkFtYmllbnRCYXNpY01ldGhvZC5hbHBoYSIsIkFtYmllbnRCYXNpY01ldGhvZC5jb3B5RnJvbSIsIkFtYmllbnRCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlIiwiQW1iaWVudEJhc2ljTWV0aG9kLmlBY3RpdmF0ZSIsIkFtYmllbnRCYXNpY01ldGhvZC51cGRhdGVDb2xvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBTyxrQkFBa0IsV0FBYSxvREFBb0QsQ0FBQyxDQUFDO0FBQzVGLElBQU8sc0JBQXNCLFdBQVksd0RBQXdELENBQUMsQ0FBQztBQUNuRyxJQUFPLGlCQUFpQixXQUFhLG1EQUFtRCxDQUFDLENBQUM7QUFNMUYsSUFBTyxpQkFBaUIsV0FBYSx3REFBd0QsQ0FBQyxDQUFDO0FBQy9GLElBQU8sb0JBQW9CLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVuRyxBQUdBOztHQURHO0lBQ0csa0JBQWtCO0lBQVNBLFVBQTNCQSxrQkFBa0JBLFVBQTBCQTtJQVdqREE7O09BRUdBO0lBQ0hBLFNBZEtBLGtCQUFrQkE7UUFnQnRCQyxpQkFBT0EsQ0FBQ0E7UUFkREEsV0FBTUEsR0FBVUEsUUFBUUEsQ0FBQ0E7UUFDekJBLFdBQU1BLEdBQVVBLENBQUNBLENBQUNBO1FBRWxCQSxZQUFPQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNuQkEsWUFBT0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDbkJBLFlBQU9BLEdBQVVBLENBQUNBLENBQUNBO1FBRW5CQSxhQUFRQSxH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R0FBR0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7UUFDL0RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLEdBQUNBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBO1FBQzlEQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxHQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtJQUN4REEsQ0FBQ0E7SUFDRlQseUJBQUNBO0FBQURBLENBbkpBLEFBbUpDQSxFQW5KZ0MsaUJBQWlCLEVBbUpqRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9BbWJpZW50QmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZpbHRlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFRleHR1cmVGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMV3JhcE1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgU2hhZGluZ01ldGhvZEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvU2hhZGluZ01ldGhvZEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIEFtYmllbnRCYXNpY01ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBzaGFkaW5nIG1ldGhvZCBmb3IgdW5pZm9ybSBhbWJpZW50IGxpZ2h0aW5nLlxuICovXG5jbGFzcyBBbWJpZW50QmFzaWNNZXRob2QgZXh0ZW5kcyBTaGFkaW5nTWV0aG9kQmFzZVxue1xuXHRwcml2YXRlIF9jb2xvcjpudW1iZXIgPSAweGZmZmZmZjtcblx0cHJpdmF0ZSBfYWxwaGE6bnVtYmVyID0gMTtcblxuXHRwcml2YXRlIF9jb2xvclI6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfY29sb3JHOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2NvbG9yQjpudW1iZXIgPSAxO1xuXG5cdHByaXZhdGUgX2FtYmllbnQ6bnVtYmVyID0gMTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBBbWJpZW50QmFzaWNNZXRob2Qgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlJbml0Vk8oc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ubmVlZHNVViA9IEJvb2xlYW4oc2hhZGVyT2JqZWN0LnRleHR1cmUgIT0gbnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpSW5pdENvbnN0YW50cyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRpZiAoIW1ldGhvZFZPLm5lZWRzVVYpIHtcblx0XHRcdHRoaXMuX2NvbG9yID0gc2hhZGVyT2JqZWN0LmNvbG9yO1xuXHRcdFx0dGhpcy51cGRhdGVDb2xvcigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGFtYmllbnQgcmVmbGVjdGlvbiBvZiB0aGUgc3VyZmFjZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW1iaWVudCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FtYmllbnQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGFtYmllbnQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FtYmllbnQgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbWJpZW50ID0gdmFsdWU7XG5cblx0XHR0aGlzLnVwZGF0ZUNvbG9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFscGhhIGNvbXBvbmVudCBvZiB0aGUgc3VyZmFjZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgYWxwaGEoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9hbHBoYTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYWxwaGEodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2FscGhhID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fYWxwaGEgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlQ29sb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGNvcHlGcm9tKG1ldGhvZDpTaGFkaW5nTWV0aG9kQmFzZSlcblx0e1xuXHRcdHZhciBtOmFueSA9IG1ldGhvZDtcblx0XHR2YXIgYjpBbWJpZW50QmFzaWNNZXRob2QgPSA8QW1iaWVudEJhc2ljTWV0aG9kPiBtO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBhbWJpZW50SW5wdXRSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNVVikge1xuXHRcdFx0YW1iaWVudElucHV0UmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cblx0XHRcdG1ldGhvZFZPLnRleHR1cmVzSW5kZXggPSBhbWJpZW50SW5wdXRSZWdpc3Rlci5pbmRleDtcblxuXHRcdFx0Y29kZSArPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUodGFyZ2V0UmVnLCBzaGFyZWRSZWdpc3RlcnMsIGFtYmllbnRJbnB1dFJlZ2lzdGVyLCBzaGFkZXJPYmplY3QudGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApIHtcblx0XHRcdFx0dmFyIGN1dE9mZlJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0XHRcdG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBjdXRPZmZSZWcuaW5kZXgqNDtcblxuXHRcdFx0XHRjb2RlICs9IFwic3ViIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIGN1dE9mZlJlZyArIFwiLnhcXG5cIiArXG5cdFx0XHRcdFx0XCJraWwgXCIgKyB0YXJnZXRSZWcgKyBcIi53XFxuXCIgK1xuXHRcdFx0XHRcdFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIGN1dE9mZlJlZyArIFwiLnhcXG5cIjtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbWJpZW50SW5wdXRSZWdpc3RlciA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHRcdG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBhbWJpZW50SW5wdXRSZWdpc3Rlci5pbmRleCo0O1xuXG5cdFx0XHRjb2RlICs9IFwibW92IFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgYW1iaWVudElucHV0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRpZiAobWV0aG9kVk8ubmVlZHNVVikge1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLnNldFNhbXBsZXJTdGF0ZUF0KG1ldGhvZFZPLnRleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcz8gQ29udGV4dEdMV3JhcE1vZGUuUkVQRUFUOkNvbnRleHRHTFdyYXBNb2RlLkNMQU1QLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXM/IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSOkNvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVI6Q29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkUpO1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZShtZXRob2RWTy50ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QudGV4dHVyZSk7XG5cblx0XHRcdGlmIChzaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQgPiAwKVxuXHRcdFx0XHRzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGFbbWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleF0gPSBzaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBpbmRleDpudW1iZXIgPSBtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdFx0dmFyIGRhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblx0XHRcdGRhdGFbaW5kZXhdID0gdGhpcy5fY29sb3JSO1xuXHRcdFx0ZGF0YVtpbmRleCArIDFdID0gdGhpcy5fY29sb3JHO1xuXHRcdFx0ZGF0YVtpbmRleCArIDJdID0gdGhpcy5fY29sb3JCO1xuXHRcdFx0ZGF0YVtpbmRleCArIDNdID0gdGhpcy5fYWxwaGE7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGFtYmllbnQgY29sb3IgZGF0YSB1c2VkIGJ5IHRoZSByZW5kZXIgc3RhdGUuXG5cdCAqL1xuXHRwcml2YXRlIHVwZGF0ZUNvbG9yKClcblx0e1xuXHRcdHRoaXMuX2NvbG9yUiA9ICgodGhpcy5fY29sb3IgPj4gMTYpICYgMHhmZikvMHhmZip0aGlzLl9hbWJpZW50O1xuXHRcdHRoaXMuX2NvbG9yRyA9ICgodGhpcy5fY29sb3IgPj4gOCkgJiAweGZmKS8weGZmKnRoaXMuX2FtYmllbnQ7XG5cdFx0dGhpcy5fY29sb3JCID0gKHRoaXMuX2NvbG9yICYgMHhmZikvMHhmZip0aGlzLl9hbWJpZW50O1xuXHR9XG59XG5cbmV4cG9ydCA9IEFtYmllbnRCYXNpY01ldGhvZDsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9hbWJpZW50YmFzaWNtZXRob2QudHMiXSwibmFtZXMiOlsiQW1iaWVudEJhc2ljTWV0aG9kIiwiQW1iaWVudEJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiQW1iaWVudEJhc2ljTWV0aG9kLmlJbml0Vk8iLCJBbWJpZW50QmFzaWNNZXRob2QuaUluaXRDb25zdGFudHMiLCJBbWJpZW50QmFzaWNNZXRob2QuYW1iaWVudCIsIkFtYmllbnRCYXNpY01ldGhvZC5hbHBoYSIsIkFtYmllbnRCYXNpY01ldGhvZC5jb3B5RnJvbSIsIkFtYmllbnRCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlIiwiQW1iaWVudEJhc2ljTWV0aG9kLmlBY3RpdmF0ZSIsIkFtYmllbnRCYXNpY01ldGhvZC51cGRhdGVDb2xvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBTyxrQkFBa0IsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3BGLElBQU8sc0JBQXNCLFdBQVksZ0RBQWdELENBQUMsQ0FBQztBQUMzRixJQUFPLGlCQUFpQixXQUFhLDJDQUEyQyxDQUFDLENBQUM7QUFNbEYsSUFBTyxpQkFBaUIsV0FBYSx3REFBd0QsQ0FBQyxDQUFDO0FBQy9GLElBQU8sb0JBQW9CLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVuRyxBQUdBOztHQURHO0lBQ0csa0JBQWtCO0lBQVNBLFVBQTNCQSxrQkFBa0JBLFVBQTBCQTtJQVdqREE7O09BRUdBO0lBQ0hBLFNBZEtBLGtCQUFrQkE7UUFnQnRCQyxpQkFBT0EsQ0FBQ0E7UUFkREEsV0FBTUEsR0FBVUEsUUFBUUEsQ0FBQ0E7UUFDekJBLFdBQU1BLEdBQVVBLENBQUNBLENBQUNBO1FBRWxCQSxZQUFPQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNuQkEsWUFBT0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDbkJBLFlBQU9BLEdBQVVBLENBQUNBLENBQUNBO1FBRW5CQSxhQUFRQSxH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R0FBR0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7UUFDL0RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLEdBQUNBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBO1FBQzlEQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxHQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtJQUN4REEsQ0FBQ0E7SUFDRlQseUJBQUNBO0FBQURBLENBbkpBLEFBbUpDQSxFQW5KZ0MsaUJBQWlCLEVBbUpqRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9BbWJpZW50QmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZpbHRlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBTaGFkaW5nTWV0aG9kQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TaGFkaW5nTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJDb21waWxlckhlbHBlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvU2hhZGVyQ29tcGlsZXJIZWxwZXJcIik7XG5cbi8qKlxuICogQW1iaWVudEJhc2ljTWV0aG9kIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHNoYWRpbmcgbWV0aG9kIGZvciB1bmlmb3JtIGFtYmllbnQgbGlnaHRpbmcuXG4gKi9cbmNsYXNzIEFtYmllbnRCYXNpY01ldGhvZCBleHRlbmRzIFNoYWRpbmdNZXRob2RCYXNlXG57XG5cdHByaXZhdGUgX2NvbG9yOm51bWJlciA9IDB4ZmZmZmZmO1xuXHRwcml2YXRlIF9hbHBoYTpudW1iZXIgPSAxO1xuXG5cdHByaXZhdGUgX2NvbG9yUjpudW1iZXIgPSAxO1xuXHRwcml2YXRlIF9jb2xvckc6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfY29sb3JCOm51bWJlciA9IDE7XG5cblx0cHJpdmF0ZSBfYW1iaWVudDpudW1iZXIgPSAxO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IEFtYmllbnRCYXNpY01ldGhvZCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRWTyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRtZXRob2RWTy5uZWVkc1VWID0gQm9vbGVhbihzaGFkZXJPYmplY3QudGV4dHVyZSAhPSBudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlJbml0Q29uc3RhbnRzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTylcblx0e1xuXHRcdGlmICghbWV0aG9kVk8ubmVlZHNVVikge1xuXHRcdFx0dGhpcy5fY29sb3IgPSBzaGFkZXJPYmplY3QuY29sb3I7XG5cdFx0XHR0aGlzLnVwZGF0ZUNvbG9yKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYW1iaWVudCByZWZsZWN0aW9uIG9mIHRoZSBzdXJmYWNlLlxuXHQgKi9cblx0cHVibGljIGdldCBhbWJpZW50KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fYW1iaWVudDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYW1iaWVudCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2FtYmllbnQgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlQ29sb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBzdXJmYWNlLlxuXHQgKi9cblx0cHVibGljIGdldCBhbHBoYSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FscGhhO1xuXHR9XG5cblx0cHVibGljIHNldCBhbHBoYSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbHBoYSA9IHZhbHVlO1xuXG5cdFx0dGhpcy51cGRhdGVDb2xvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cdFx0dmFyIG06YW55ID0gbWV0aG9kO1xuXHRcdHZhciBiOkFtYmllbnRCYXNpY01ldGhvZCA9IDxBbWJpZW50QmFzaWNNZXRob2Q+IG07XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cdFx0dmFyIGFtYmllbnRJbnB1dFJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdGlmIChtZXRob2RWTy5uZWVkc1VWKSB7XG5cdFx0XHRhbWJpZW50SW5wdXRSZWdpc3RlciA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblxuXHRcdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IGFtYmllbnRJbnB1dFJlZ2lzdGVyLmluZGV4O1xuXG5cdFx0XHRjb2RlICs9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSh0YXJnZXRSZWcsIHNoYXJlZFJlZ2lzdGVycywgYW1iaWVudElucHV0UmVnaXN0ZXIsIHNoYWRlck9iamVjdC50ZXh0dXJlLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXMsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmcpO1xuXG5cdFx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0XHR2YXIgY3V0T2ZmUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHRcdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGN1dE9mZlJlZy5pbmRleCo0O1xuXG5cdFx0XHRcdGNvZGUgKz0gXCJzdWIgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgY3V0T2ZmUmVnICsgXCIueFxcblwiICtcblx0XHRcdFx0XHRcImtpbCBcIiArIHRhcmdldFJlZyArIFwiLndcXG5cIiArXG5cdFx0XHRcdFx0XCJhZGQgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgY3V0T2ZmUmVnICsgXCIueFxcblwiO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGFtYmllbnRJbnB1dFJlZ2lzdGVyID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGFtYmllbnRJbnB1dFJlZ2lzdGVyLmluZGV4KjQ7XG5cblx0XHRcdGNvZGUgKz0gXCJtb3YgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyBhbWJpZW50SW5wdXRSZWdpc3RlciArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpQWN0aXZhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdGlmIChtZXRob2RWTy5uZWVkc1VWKSB7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuc2V0U2FtcGxlclN0YXRlQXQobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzPyBDb250ZXh0R0xXcmFwTW9kZS5SRVBFQVQ6Q29udGV4dEdMV3JhcE1vZGUuQ0xBTVAsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcz8gQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVI6Q29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNULCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUjpDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVUZXh0dXJlKG1ldGhvZFZPLnRleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC50ZXh0dXJlKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRcdHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YVttZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4XSA9IHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleF0gPSB0aGlzLl9jb2xvclI7XG5cdFx0XHRkYXRhW2luZGV4ICsgMV0gPSB0aGlzLl9jb2xvckc7XG5cdFx0XHRkYXRhW2luZGV4ICsgMl0gPSB0aGlzLl9jb2xvckI7XG5cdFx0XHRkYXRhW2luZGV4ICsgM10gPSB0aGlzLl9hbHBoYTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYW1iaWVudCBjb2xvciBkYXRhIHVzZWQgYnkgdGhlIHJlbmRlciBzdGF0ZS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlQ29sb3IoKVxuXHR7XG5cdFx0dGhpcy5fY29sb3JSID0gKCh0aGlzLl9jb2xvciA+PiAxNikgJiAweGZmKS8weGZmKnRoaXMuX2FtYmllbnQ7XG5cdFx0dGhpcy5fY29sb3JHID0gKCh0aGlzLl9jb2xvciA+PiA4KSAmIDB4ZmYpLzB4ZmYqdGhpcy5fYW1iaWVudDtcblx0XHR0aGlzLl9jb2xvckIgPSAodGhpcy5fY29sb3IgJiAweGZmKS8weGZmKnRoaXMuX2FtYmllbnQ7XG5cdH1cbn1cblxuZXhwb3J0ID0gQW1iaWVudEJhc2ljTWV0aG9kOyJdfQ== \ No newline at end of file diff --git a/lib/materials/methods/AmbientBasicMethod.ts b/lib/materials/methods/AmbientBasicMethod.ts index d788e717..c33451d9 100644 --- a/lib/materials/methods/AmbientBasicMethod.ts +++ b/lib/materials/methods/AmbientBasicMethod.ts @@ -1,10 +1,10 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/DiffuseBasicMethod.js b/lib/materials/methods/DiffuseBasicMethod.js index 3fbe30ef..7049ec02 100755 --- a/lib/materials/methods/DiffuseBasicMethod.js +++ b/lib/materials/methods/DiffuseBasicMethod.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -289,4 +289,4 @@ var DiffuseBasicMethod = (function (_super) { })(LightingMethodBase); module.exports = DiffuseBasicMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9kaWZmdXNlYmFzaWNtZXRob2QudHMiXSwibmFtZXMiOlsiRGlmZnVzZUJhc2ljTWV0aG9kIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmlJc1VzZWQiLCJEaWZmdXNlQmFzaWNNZXRob2QubXVsdGlwbHkiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUluaXRWTyIsIkRpZmZ1c2VCYXNpY01ldGhvZC5nZW5lcmF0ZU1pcCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5kaWZmdXNlQ29sb3IiLCJEaWZmdXNlQmFzaWNNZXRob2QuYW1iaWVudENvbG9yIiwiRGlmZnVzZUJhc2ljTWV0aG9kLnRleHR1cmUiLCJEaWZmdXNlQmFzaWNNZXRob2QuZGlzcG9zZSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5jb3B5RnJvbSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUdldEZyYWdtZW50UHJlTGlnaHRpbmdDb2RlIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudENvZGVQZXJMaWdodCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUdldEZyYWdtZW50UG9zdExpZ2h0aW5nQ29kZSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5wQXBwbHlTaGFkb3ciLCJEaWZmdXNlQmFzaWNNZXRob2QuaUFjdGl2YXRlIiwiRGlmZnVzZUJhc2ljTWV0aG9kLnVwZGF0ZURpZmZ1c2UiLCJEaWZmdXNlQmFzaWNNZXRob2QudXBkYXRlQW1iaWVudCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pU2V0UmVuZGVyU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLElBQU8sa0JBQWtCLFdBQWEsb0RBQW9ELENBQUMsQ0FBQztBQUM1RixJQUFPLHNCQUFzQixXQUFZLHdEQUF3RCxDQUFDLENBQUM7QUFDbkcsSUFBTyxpQkFBaUIsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBUTFGLElBQU8sa0JBQWtCLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUNqRyxJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFHQTs7R0FERztJQUNHLGtCQUFrQjtJQUFTQSxVQUEzQkEsa0JBQWtCQSxVQUEyQkE7SUFvQmxEQTs7T0FFR0E7SUFDSEEsU0F2QktBLGtCQUFrQkE7UUF5QnRCQyxpQkFBT0EsQ0FBQ0E7UUF2QkRBLGNBQVNBLEdBQVdBLElBQUlBLENBQUNBO1FBT3pCQSxrQkFBYUEsR0FBVUEsUUFBUUEsQ0FBQ0E7UUFDaENBLGtCQUFhQSxHQUFVQSxRQUFRQSxDQUFDQTtRQUNoQ0EsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDckJBLGNBQVNBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3JCQSxjQUFTQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNyQkEsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDckJBLGNBQVNBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3JCQSxjQUFTQSxHQUFVQSxDQUFDQSxDQUFDQTtJQVU3QkEsQ0FBQ0E7SUFFTUQsb0NBQU9BLEdBQWRBLFVBQWVBLFlBQWlDQTtRQUUvQ0UsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDM0JBLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBO1FBRWRBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBS0RGLHNCQUFXQSx3Q0FBUUE7UUFIbkJBOztXQUVHQTthQUNIQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUN2QkEsQ0FBQ0E7YUFFREgsVUFBb0JBLEtBQWFBO1lBRWhDRyxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxJQUFJQSxLQUFLQSxDQUFDQTtnQkFDM0JBLE1BQU1BLENBQUNBO1lBRVJBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLEtBQUtBLENBQUNBO1lBRXZCQSxJQUFJQSxDQUFDQSx3QkFBd0JBLEVBQUVBLENBQUNBO1FBQ2pDQSxDQUFDQTs7O09BVkFIO0lBWU1BLG9DQUFPQSxHQUFkQSxVQUFlQSxZQUFpQ0EsRUFBRUEsUUFBaUJBO1FBRWxFSSxRQUFRQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQTtRQUNyQ0EsUUFBUUEsQ0FBQ0EsWUFBWUEsR0FBR0EsWUFBWUEsQ0FBQ0EsU0FBU0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7SUFDcERBLENBQUNBO0lBRURKOzs7T0FHR0E7SUFDSUEsd0NBQVdBLEdBQWxCQSxVQUFtQkEsS0FBV0E7UUFFN0JLLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBO1lBQ0ZBLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO0lBQ3RFQSxDQUFDQTtJQUtETCxzQkFBV0EsNENBQVlBO1FBSHZCQTs7V0FFR0E7YUFDSEE7WUFFQ00sTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDM0JBLENBQUNBO2FBRUROLFVBQXdCQSxLQUFZQTtZQUVuQ00sRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsSUFBSUEsS0FBS0EsQ0FBQ0E7Z0JBQy9CQSxNQUFNQSxDQUFDQTtZQUVSQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUUzQkEsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsQ0FBQ0E7UUFDdEJBLENBQUNBOzs7T0FWQU47SUFlREEsc0JBQVdBLDRDQUFZQTtRQUh2QkE7O1dBRUdBO2FBQ0hBO1lBRUNPLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBO1FBQzNCQSxDQUFDQTthQUVEUCxVQUF3QkEsS0FBWUE7WUFFbkNPLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLElBQUlBLEtBQUtBLENBQUNBO2dCQUMvQkEsTUFBTUEsQ0FBQ0E7WUFFUkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFFM0JBLElBQUlBLENBQUNBLGFBQWFBLEVBQUVBLENBQUNBO1FBQ3RCQSxDQUFDQTs7O09BVkFQO0lBZ0JEQSxzQkFBV0EsdUNBQU9BO1FBSGxCQTs7V0FFR0E7YUFDSEE7WUFFQ1EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7UUFDdEJBLENBQUNBO2FBRURSLFVBQW1CQSxLQUFtQkE7WUFFckNRLElBQUlBLENBQUNBLEdBQVdBLENBQUNBLEtBQUtBLElBQUlBLElBQUlBLENBQUNBLENBQUNBO1lBRWhDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxZQUFZQSxJQUFJQSxDQUFDQSxLQUFLQSxJQUFJQSxJQUFJQSxDQUFDQSxRQUFRQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxVQUFVQSxJQUFJQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxVQUFVQSxJQUFJQSxLQUFLQSxDQUFDQSxNQUFNQSxJQUFJQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDaEpBLElBQUlBLENBQUNBLHdCQUF3QkEsRUFBRUEsQ0FBQ0E7WUFFakNBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLENBQUNBLENBQUNBO1lBQ3RCQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN2QkEsQ0FBQ0E7OztPQVhBUjtJQWFEQTs7T0FFR0E7SUFDSUEsb0NBQU9BLEdBQWRBO1FBRUNTLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUVEVDs7T0FFR0E7SUFDSUEscUNBQVFBLEdBQWZBLFVBQWdCQSxNQUF3QkE7UUFFdkNVLElBQUlBLElBQUlBLEdBQTJDQSxNQUFNQSxDQUFDQTtRQUUxREEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDNUJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBO1FBQzlCQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQTtRQUN0Q0EsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0E7SUFDdkNBLENBQUNBO0lBRURWOztPQUVHQTtJQUNJQSxrREFBcUJBLEdBQTVCQTtRQUVDVyxnQkFBS0EsQ0FBQ0EscUJBQXFCQSxXQUFFQSxDQUFDQTtRQUU5QkEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNqQ0EsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNwQ0EsQ0FBQ0E7SUFFRFg7O09BRUdBO0lBQ0lBLHdEQUEyQkEsR0FBbENBLFVBQW1DQSxZQUFpQ0EsRUFBRUEsUUFBaUJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFN0pZLElBQUlBLElBQUlBLEdBQVVBLEVBQUVBLENBQUNBO1FBRXJCQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUzQkEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxhQUFhQSxDQUFDQSx5QkFBeUJBLEVBQUVBLENBQUNBO1FBQ3RFQSxhQUFhQSxDQUFDQSxxQkFBcUJBLENBQUNBLElBQUlBLENBQUNBLG9CQUFvQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFbEVBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURaOztPQUVHQTtJQUNJQSxxREFBd0JBLEdBQS9CQSxVQUFnQ0EsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxXQUFpQ0EsRUFBRUEsV0FBaUNBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFaE9hLElBQUlBLElBQUlBLEdBQVVBLEVBQUVBLENBQUNBO1FBQ3JCQSxJQUFJQSxDQUF1QkEsQ0FBQ0E7UUFFNUJBLEFBQ0FBLCtFQUQrRUE7UUFDL0VBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3pCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBO1FBQy9CQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUNQQSxDQUFDQSxHQUFHQSxhQUFhQSxDQUFDQSx5QkFBeUJBLEVBQUVBLENBQUNBO1lBQzlDQSxhQUFhQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzNDQSxDQUFDQTtRQUVEQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxXQUFXQSxHQUFHQSxJQUFJQSxHQUFHQSxlQUFlQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxHQUN0RkEsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsTUFBTUEsR0FBR0EsZUFBZUEsQ0FBQ0EsT0FBT0EsR0FBR0EsTUFBTUEsQ0FBQ0E7UUFFdEVBLEVBQUVBLENBQUNBLENBQUNBLFlBQVlBLENBQUNBLGdCQUFnQkEsQ0FBQ0E7WUFDakNBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLENBQUNBLEdBQUdBLE1BQU1BLEdBQUdBLENBQUNBLEdBQUdBLE1BQU1BLEdBQUdBLFdBQVdBLEdBQUdBLE1BQU1BLENBQUNBO1FBRWpFQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLElBQUlBLElBQUlBLENBQUNBO1lBQ2pDQSxJQUFJQSxJQUFJQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLFlBQVlBLEVBQUVBLFFBQVFBLEVBQUVBLENBQUNBLEVBQUVBLGFBQWFBLEVBQUVBLGVBQWVBLENBQUNBLENBQUNBO1FBRTFGQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxXQUFXQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUU1REEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDMUJBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUNwR0EsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMxQ0EsQ0FBQ0E7UUFFREEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFFNUJBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURiOztPQUVHQTtJQUNJQSxxREFBd0JBLEdBQS9CQSxVQUFnQ0EsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxVQUFnQ0EsRUFBRUEsY0FBcUJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFbk5jLElBQUlBLElBQUlBLEdBQVVBLEVBQUVBLENBQUNBO1FBQ3JCQSxJQUFJQSxDQUF1QkEsQ0FBQ0E7UUFFNUJBLEFBQ0FBLCtFQUQrRUE7UUFDL0VBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3pCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBO1FBQy9CQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUNQQSxDQUFDQSxHQUFHQSxhQUFhQSxDQUFDQSx5QkFBeUJBLEVBQUVBLENBQUNBO1lBQzlDQSxhQUFhQSxDQUFDQSxxQkFBcUJBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzNDQSxDQUFDQTtRQUVEQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxlQUFlQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxHQUFHQSxVQUFVQSxHQUFHQSw0QkFBNEJBLEdBQzNHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxRQUFRQSxHQUFHQSxDQUFDQSxHQUFHQSxRQUFRQSxHQUFHQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUvREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUNqQ0EsSUFBSUEsSUFBSUEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxFQUFFQSxRQUFRQSxFQUFFQSxDQUFDQSxFQUFFQSxhQUFhQSxFQUFFQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUUxRkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDMUJBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUNwR0EsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMxQ0EsQ0FBQ0E7UUFFREEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFFNUJBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURkOztPQUVHQTtJQUNJQSx5REFBNEJBLEdBQW5DQSxVQUFvQ0EsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUvTGUsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLElBQUlBLE1BQTRCQSxDQUFDQTtRQUNqQ0EsSUFBSUEsU0FBK0JBLENBQUNBO1FBRXBDQSxBQUNBQSxpQ0FEaUNBO1FBQ2pDQSxFQUFFQSxDQUFDQSxDQUFDQSxlQUFlQSxDQUFDQSxZQUFZQSxDQUFDQTtZQUNoQ0EsSUFBSUEsSUFBSUEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsWUFBWUEsRUFBRUEsUUFBUUEsRUFBRUEsYUFBYUEsRUFBRUEsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFFbkZBLE1BQU1BLEdBQUdBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDbkRBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFL0NBLElBQUlBLG9CQUFvQkEsR0FBeUJBLGFBQWFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFDekZBLFFBQVFBLENBQUNBLHNCQUFzQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxLQUFLQSxHQUFDQSxDQUFDQSxDQUFDQTtRQUUvREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtZQUVoRUEsUUFBUUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUUzREEsSUFBSUEsSUFBSUEsb0JBQW9CQSxDQUFDQSxrQkFBa0JBLENBQUNBLE1BQU1BLEVBQUVBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLHNCQUFzQkEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxZQUFZQSxDQUFDQSxjQUFjQSxFQUFFQSxZQUFZQSxDQUFDQSxhQUFhQSxDQUFDQSxDQUFDQTtRQUUvTUEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxHQUFHQSxhQUFhQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1lBRXRFQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxzQkFBc0JBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3JFQSxDQUFDQTtRQUVEQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FDbkZBLE1BQU1BLEdBQUdBLE1BQU1BLEdBQUdBLFFBQVFBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFL0VBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3BCQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxRQUFRQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQy9FQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNuRUEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsSUFBSUEsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsU0FBU0EsR0FBR0EsSUFBSUEsR0FBR0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxHQUNyRkEsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQ25HQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxD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QSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsWUFBWUEsQ0FBQ0EsUUFBUUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3JCQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGcEIseUJBQUNBO0FBQURBLENBcldBLEFBcVdDQSxFQXJXZ0Msa0JBQWtCLEVBcVdsRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9EaWZmdXNlQmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRmlsdGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyTGlnaHRpbmdPYmplY3RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckxpZ2h0aW5nT2JqZWN0XCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlXCIpO1xuaW1wb3J0IExpZ2h0aW5nTWV0aG9kQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9MaWdodGluZ01ldGhvZEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIERpZmZ1c2VCYXNpY01ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBzaGFkaW5nIG1ldGhvZCBmb3IgTGFtYmVydCAoZG90MykgZGlmZnVzZSBsaWdodGluZy5cbiAqL1xuY2xhc3MgRGlmZnVzZUJhc2ljTWV0aG9kIGV4dGVuZHMgTGlnaHRpbmdNZXRob2RCYXNlXG57XG5cdHByaXZhdGUgX211bHRpcGx5OmJvb2xlYW4gPSB0cnVlO1xuXG5cdHB1YmxpYyBfcFVzZVRleHR1cmU6Ym9vbGVhbjtcblx0cHVibGljIF9wVG90YWxMaWdodENvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0cHVibGljIF9wRGlmZnVzZUlucHV0UmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXG5cdHByaXZhdGUgX3RleHR1cmU6VGV4dHVyZTJEQmFzZTtcblx0cHJpdmF0ZSBfZGlmZnVzZUNvbG9yOm51bWJlciA9IDB4ZmZmZmZmO1xuXHRwcml2YXRlIF9hbWJpZW50Q29sb3I6bnVtYmVyID0gMHhmZmZmZmY7XG5cdHByaXZhdGUgX2RpZmZ1c2VSOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2RpZmZ1c2VHOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2RpZmZ1c2VCOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRSOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRHOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRCOm51bWJlciA9IDE7XG5cblx0cHVibGljIF9wSXNGaXJzdExpZ2h0OmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGlmZnVzZUJhc2ljTWV0aG9kIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgaUlzVXNlZChzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QpOmJvb2xlYW5cblx0e1xuXHRcdGlmICghc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBpbnRlcm5hbGx5IGlmIGRpZmZ1c2UgY29sb3IgY29tcG9uZW50IG11bHRpcGxpZXMgb3IgcmVwbGFjZXMgdGhlIGFtYmllbnQgY29sb3Jcblx0ICovXG5cdHB1YmxpYyBnZXQgbXVsdGlwbHkoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbXVsdGlwbHk7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG11bHRpcGx5KHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHRpZiAodGhpcy5fbXVsdGlwbHkgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9tdWx0aXBseSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblx0fVxuXG5cdHB1YmxpYyBpSW5pdFZPKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRtZXRob2RWTy5uZWVkc1VWID0gdGhpcy5fcFVzZVRleHR1cmU7XG5cdFx0bWV0aG9kVk8ubmVlZHNOb3JtYWxzID0gc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cyA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogRm9yY2VzIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGV4dHVyZS5cblx0ICogQHBhcmFtIHN0YWdlIFRoZSBTdGFnZSB1c2VkIGJ5IHRoZSByZW5kZXJlclxuXHQgKi9cblx0cHVibGljIGdlbmVyYXRlTWlwKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKVxuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZSgwLCB0aGlzLl90ZXh0dXJlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY29sb3Igb2YgdGhlIGRpZmZ1c2UgcmVmbGVjdGlvbiB3aGVuIG5vdCB1c2luZyBhIHRleHR1cmUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpZmZ1c2VDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlmZnVzZUNvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9kaWZmdXNlQ29sb3IgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9kaWZmdXNlQ29sb3IgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlRGlmZnVzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvciBvZiB0aGUgYW1iaWVudCByZWZsZWN0aW9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFtYmllbnRDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FtYmllbnRDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudENvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9hbWJpZW50Q29sb3IgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbWJpZW50Q29sb3IgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlQW1iaWVudCgpO1xuXHR9XG5cblxuXHQvKipcblx0ICogVGhlIGJpdG1hcERhdGEgdG8gdXNlIHRvIGRlZmluZSB0aGUgZGlmZnVzZSByZWZsZWN0aW9uIGNvbG9yIHBlciB0ZXhlbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgdGV4dHVyZSgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR2YXIgYjpib29sZWFuID0gKHZhbHVlICE9IG51bGwpO1xuXG5cdFx0aWYgKGIgIT0gdGhpcy5fcFVzZVRleHR1cmUgfHwgKHZhbHVlICYmIHRoaXMuX3RleHR1cmUgJiYgKHZhbHVlLmhhc01pcG1hcHMgIT0gdGhpcy5fdGV4dHVyZS5oYXNNaXBtYXBzIHx8IHZhbHVlLmZvcm1hdCAhPSB0aGlzLl90ZXh0dXJlLmZvcm1hdCkpKVxuXHRcdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblxuXHRcdHRoaXMuX3BVc2VUZXh0dXJlID0gYjtcblx0XHR0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cdFx0dmFyIGRpZmY6RGlmZnVzZUJhc2ljTWV0aG9kID0gPERpZmZ1c2VCYXNpY01ldGhvZD4gbWV0aG9kO1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gZGlmZi50ZXh0dXJlO1xuXHRcdHRoaXMubXVsdGlwbHkgPSBkaWZmLm11bHRpcGx5O1xuXHRcdHRoaXMuZGlmZnVzZUNvbG9yID0gZGlmZi5kaWZmdXNlQ29sb3I7XG5cdFx0dGhpcy5hbWJpZW50Q29sb3IgPSBkaWZmLmFtYmllbnRDb2xvcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblxuXHRcdHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgPSBudWxsO1xuXHRcdHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRQcmVMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnLCAxKTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZVBlckxpZ2h0KHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIGxpZ2h0RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgbGlnaHRDb2xSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHQvLyB3cml0ZSBpbiB0ZW1wb3JhcnkgaWYgbm90IGZpcnN0IGxpZ2h0LCBzbyB3ZSBjYW4gYWRkIHRvIHRvdGFsIGRpZmZ1c2UgY29sb3VyXG5cdFx0aWYgKHRoaXMuX3BJc0ZpcnN0TGlnaHQpIHtcblx0XHRcdHQgPSB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0LCAxKTtcblx0XHR9XG5cblx0XHRjb2RlICs9IFwiZHAzIFwiICsgdCArIFwiLngsIFwiICsgbGlnaHREaXJSZWcgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMubm9ybWFsRnJhZ21lbnQgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtYXggXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIueCwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLnlcXG5cIjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudXNlc0xpZ2h0RmFsbE9mZilcblx0XHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIudywgXCIgKyBsaWdodERpclJlZyArIFwiLndcXG5cIjtcblxuXHRcdGlmICh0aGlzLl9pTW9kdWxhdGVNZXRob2QgIT0gbnVsbClcblx0XHRcdGNvZGUgKz0gdGhpcy5faU1vZHVsYXRlTWV0aG9kKHNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHQsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRjb2RlICs9IFwibXVsIFwiICsgdCArIFwiLCBcIiArIHQgKyBcIi53LCBcIiArIGxpZ2h0Q29sUmVnICsgXCJcXG5cIjtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudENvZGVQZXJQcm9iZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPLCBjdWJlTWFwUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgd2VpZ2h0UmVnaXN0ZXI6c3RyaW5nLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHQvLyB3cml0ZSBpbiB0ZW1wb3JhcnkgaWYgbm90IGZpcnN0IGxpZ2h0LCBzbyB3ZSBjYW4gYWRkIHRvIHRvdGFsIGRpZmZ1c2UgY29sb3VyXG5cdFx0aWYgKHRoaXMuX3BJc0ZpcnN0TGlnaHQpIHtcblx0XHRcdHQgPSB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0LCAxKTtcblx0XHR9XG5cblx0XHRjb2RlICs9IFwidGV4IFwiICsgdCArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudCArIFwiLCBcIiArIGN1YmVNYXBSZWcgKyBcIiA8Y3ViZSxsaW5lYXIsbWlwbGluZWFyPlxcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0ICsgXCIueHl6LCBcIiArIHQgKyBcIi54eXosIFwiICsgd2VpZ2h0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXG5cdFx0aWYgKHRoaXMuX2lNb2R1bGF0ZU1ldGhvZCAhPSBudWxsKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pTW9kdWxhdGVNZXRob2Qoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgdCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHR2YXIgYWxiZWRvOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgY3V0T2ZmUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdC8vIGluY29ycG9yYXRlIGlucHV0IGZyb20gYW1iaWVudFxuXHRcdGlmIChzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0KVxuXHRcdFx0Y29kZSArPSB0aGlzLnBBcHBseVNoYWRvdyhzaGFkZXJPYmplY3QsIG1ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0YWxiZWRvID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXMoYWxiZWRvLCAxKTtcblxuXHRcdHZhciBhbWJpZW50Q29sb3JSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGFtYmllbnRDb2xvclJlZ2lzdGVyLmluZGV4KjQ7XG5cblx0XHRpZiAodGhpcy5fcFVzZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblxuXHRcdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3Rlci5pbmRleDtcblxuXHRcdFx0Y29kZSArPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUoYWxiZWRvLCBzaGFyZWRSZWdpc3RlcnMsIHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciwgdGhpcy5fdGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wRGlmZnVzZUlucHV0UmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGNvZGUgKz0gXCJtb3YgXCIgKyBhbGJlZG8gKyBcIiwgXCIgKyB0aGlzLl9wRGlmZnVzZUlucHV0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGNvZGUgKz0gXCJzYXQgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCIgK1xuXHRcdFx0XCJtdWwgXCIgKyBhbGJlZG8gKyBcIi54eXosIFwiICsgYWxiZWRvICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCI7XG5cblx0XHRpZiAodGhpcy5fbXVsdGlwbHkpIHtcblx0XHRcdGNvZGUgKz0gXCJhZGQgXCIgKyBhbGJlZG8gKyBcIi54eXosIFwiICsgYWxiZWRvICsgXCIsIFwiICsgYW1iaWVudENvbG9yUmVnaXN0ZXIgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0YXJnZXRSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgYWxiZWRvICsgXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29kZSArPSBcIm11bCBcIiArIHRhcmdldFJlZyArIFwiLnh5eiwgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyBhbWJpZW50Q29sb3JSZWdpc3RlciArIFwiXFxuXCIgK1xuXHRcdFx0XHRcIm11bCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCIgK1xuXHRcdFx0XHRcInN1YiBcIiArIHRhcmdldFJlZyArIFwiLnh5eiwgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIGFsYmVkbyArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnKTtcblx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKGFsYmVkbyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGFwcGxpZXMgdGhlIGNhbGN1bGF0ZWQgc2hhZG93IHRvIHRoZSBkaWZmdXNlIGxpZ2h0XG5cdCAqIEBwYXJhbSBtZXRob2RWTyBUaGUgTWV0aG9kVk8gb2JqZWN0IGZvciB3aGljaCB0aGUgY29tcGlsYXRpb24gaXMgY3VycmVudGx5IGhhcHBlbmluZy5cblx0ICogQHBhcmFtIHJlZ0NhY2hlIFRoZSByZWdpc3RlciBjYWNoZSB0aGUgY29tcGlsZXIgaXMgY3VycmVudGx5IHVzaW5nIGZvciB0aGUgcmVnaXN0ZXIgbWFuYWdlbWVudC5cblx0ICovXG5cdHB1YmxpYyBwQXBwbHlTaGFkb3coc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJtdWwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIueHl6LCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0ICsgXCIud1xcblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKSB7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuc2V0U2FtcGxlclN0YXRlQXQobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzPyBDb250ZXh0R0xXcmFwTW9kZS5SRVBFQVQ6Q29udGV4dEdMV3JhcE1vZGUuQ0xBTVAsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcz8gQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVIgOiBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1QsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nPyBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTElORUFSIDogQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkUpO1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZShtZXRob2RWTy50ZXh0dXJlc0luZGV4LCB0aGlzLl90ZXh0dXJlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleCArIDRdID0gdGhpcy5fZGlmZnVzZVI7XG5cdFx0XHRkYXRhW2luZGV4ICsgNV0gPSB0aGlzLl9kaWZmdXNlRztcblx0XHRcdGRhdGFbaW5kZXggKyA2XSA9IHRoaXMuX2RpZmZ1c2VCO1xuXHRcdFx0ZGF0YVtpbmRleCArIDddID0gMTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgZGlmZnVzZSBjb2xvciBkYXRhIHVzZWQgYnkgdGhlIHJlbmRlciBzdGF0ZS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRGlmZnVzZSgpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlUiA9ICgodGhpcy5fZGlmZnVzZUNvbG9yID4+IDE2KSAmIDB4ZmYpLzB4ZmY7XG5cdFx0dGhpcy5fZGlmZnVzZUcgPSAoKHRoaXMuX2RpZmZ1c2VDb2xvciA+PiA4KSAmIDB4ZmYpLzB4ZmY7XG5cdFx0dGhpcy5fZGlmZnVzZUIgPSAodGhpcy5fZGlmZnVzZUNvbG9yICYgMHhmZikvMHhmZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBhbWJpZW50IGNvbG9yIGRhdGEgdXNlZCBieSB0aGUgcmVuZGVyIHN0YXRlLlxuXHQgKi9cblx0cHJpdmF0ZSB1cGRhdGVBbWJpZW50KClcblx0e1xuXHRcdHRoaXMuX2FtYmllbnRSID0gKCh0aGlzLl9hbWJpZW50Q29sb3IgPj4gMTYpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9hbWJpZW50RyA9ICgodGhpcy5fYW1iaWVudENvbG9yID4+IDgpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9hbWJpZW50QiA9ICh0aGlzLl9hbWJpZW50Q29sb3IgJiAweGZmKS8weGZmO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaVNldFJlbmRlclN0YXRlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0Ly9UT0RPIG1vdmUgdGhpcyB0byBBY3RpdmF0ZSAoYW1iaWVudFIvRy9CIGN1cnJlbnRseSBjYWxjJ2QgaW4gcmVuZGVyIHN0YXRlKVxuXHRcdGlmIChzaGFkZXJPYmplY3QubnVtTGlnaHRzID4gMCkge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleF0gPSBzaGFkZXJPYmplY3QuYW1iaWVudFIqdGhpcy5fYW1iaWVudFI7XG5cdFx0XHRkYXRhW2luZGV4ICsgMV0gPSBzaGFkZXJPYmplY3QuYW1iaWVudEcqdGhpcy5fYW1iaWVudEc7XG5cdFx0XHRkYXRhW2luZGV4ICsgMl0gPSBzaGFkZXJPYmplY3QuYW1iaWVudEIqdGhpcy5fYW1iaWVudEI7XG5cdFx0XHRkYXRhW2luZGV4ICsgM10gPSAxO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBEaWZmdXNlQmFzaWNNZXRob2Q7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9kaWZmdXNlYmFzaWNtZXRob2QudHMiXSwibmFtZXMiOlsiRGlmZnVzZUJhc2ljTWV0aG9kIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmlJc1VzZWQiLCJEaWZmdXNlQmFzaWNNZXRob2QubXVsdGlwbHkiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUluaXRWTyIsIkRpZmZ1c2VCYXNpY01ldGhvZC5nZW5lcmF0ZU1pcCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5kaWZmdXNlQ29sb3IiLCJEaWZmdXNlQmFzaWNNZXRob2QuYW1iaWVudENvbG9yIiwiRGlmZnVzZUJhc2ljTWV0aG9kLnRleHR1cmUiLCJEaWZmdXNlQmFzaWNNZXRob2QuZGlzcG9zZSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5jb3B5RnJvbSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUdldEZyYWdtZW50UHJlTGlnaHRpbmdDb2RlIiwiRGlmZnVzZUJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudENvZGVQZXJMaWdodCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUiLCJEaWZmdXNlQmFzaWNNZXRob2QuaUdldEZyYWdtZW50UG9zdExpZ2h0aW5nQ29kZSIsIkRpZmZ1c2VCYXNpY01ldGhvZC5wQXBwbHlTaGFkb3ciLCJEaWZmdXNlQmFzaWNNZXRob2QuaUFjdGl2YXRlIiwiRGlmZnVzZUJhc2ljTWV0aG9kLnVwZGF0ZURpZmZ1c2UiLCJEaWZmdXNlQmFzaWNNZXRob2QudXBkYXRlQW1iaWVudCIsIkRpZmZ1c2VCYXNpY01ldGhvZC5pU2V0UmVuZGVyU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLElBQU8sa0JBQWtCLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUNwRixJQUFP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dUJBLEVBQUVBLENBQUNBO1lBRXRFQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxzQkFBc0JBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3JFQSxDQUFDQTtRQUVEQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FDbkZBLE1BQU1BLEdBQUdBLE1BQU1BLEdBQUdBLFFBQVFBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFL0VBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3BCQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxRQUFRQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQy9FQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNuRUEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsSUFBSUEsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsU0FBU0EsR0FBR0EsSUFBSUEsR0FBR0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxHQUNyRkEsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQ25HQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLEdBQ25GQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNuRUEsQ0FBQ0E7UUFFREEsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBO1FBQ2pFQSxhQUFhQSxDQUFDQSx1QkFBdUJBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBO1FBRTlDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUVEZjs7OztPQUlHQTtJQUNJQSx5Q0FBWUEsR0FBbkJBLFVBQW9CQSxZQUFpQ0EsRUFBRUEsUUFBaUJBLEVBQUVBLFFBQTRCQSxFQUFFQSxlQUFrQ0E7UUFFeklnQixNQUFNQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FBR0EsZUFBZUEsQ0FBQ0EsWUFBWUEsR0FBR0EsTUFBTUEsQ0FBQ0E7SUFDaklBLENBQUNBO0lBRURoQjs7T0FFR0E7SUFDSUEsc0NBQVNBLEdBQWhCQSxVQUFpQkEsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtRQUVqRmlCLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBLENBQUNBO1lBQ0pBLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsRUFBRUEsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBRUEsaUJBQWlCQSxDQUFDQSxNQUFNQSxHQUFDQSxpQkFBaUJBLENBQUNBLEtBQUtBLEVBQUVBLFlBQVlBLENBQUNBLGlCQUFpQkEsR0FBRUEsc0JBQXNCQSxDQUFDQSxNQUFNQSxHQUFHQSxzQkFBc0JBLENBQUNBLE9BQU9BLEVBQUVBLFlBQVlBLENBQUNBLGFBQWFBLEdBQUVBLGtCQUFrQkEsQ0FBQ0EsU0FBU0EsR0FBR0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtZQUMvVEEsS0FBS0EsQ0FBQ0EsT0FBUUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7UUFDMUZBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLElBQUlBLEtBQUtBLEdBQVVBLFFBQVFBLENBQUNBLHNCQUFzQkEsQ0FBQ0E7WUFDbkRBLElBQUlBLElBQUlBLEdBQWlCQSxZQUFZQSxDQUFDQSxvQkFBb0JBLENBQUNBO1lBQzNEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUNqQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDakNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1lBQ2pDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNyQkEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFFRGpCOztPQUVHQTtJQUNLQSwwQ0FBYUEsR0FBckJBO1FBRUNrQixJQUFJQSxDQUFDQSxTQUFTQSxHQUFHQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxJQUFJQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQTtRQUMxREEsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDekRBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBO0lBQ25EQSxDQUFDQTtJQUVEbEI7O09BRUdBO0lBQ0tBLDBDQUFhQSxHQUFyQkE7UUFFQ21CLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLElBQUlBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBO1FBQzFEQSxJQUFJQSxDQUFDQSxTQUFTQSxHQUFHQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQTtRQUN6REEsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDbkRBLENBQUNBO0lBRURuQjs7T0FFR0E7SUFDSUEsNENBQWVBLEdBQXRCQSxVQUF1QkEsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxVQUF5QkEsRUFBRUEsS0FBV0EsRUFBRUEsTUFBYUE7UUFFaklvQixBQUNBQSw0RUFENEVBO1FBQzVFQSxFQUFFQSxDQUFDQSxDQUFDQSxZQUFZQSxDQUFDQSxTQUFTQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNoQ0EsSUFBSUEsS0FBS0EsR0FBVUEsUUFBUUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtZQUNuREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7WUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLFlBQVlBLENBQUNBLFFBQVFBLEdBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1lBQ25EQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxZQUFZQSxDQUFDQSxRQUFRQSxHQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUN2REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsWUFBWUEsQ0FBQ0EsUUFBUUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDdkRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3JCQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGcEIseUJBQUNBO0FBQURBLENBcldBLEFBcVdDQSxFQXJXZ0Msa0JBQWtCLEVBcVdsRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9EaWZmdXNlQmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRmlsdGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFRleHR1cmVGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMV3JhcE1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xXcmFwTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyTGlnaHRpbmdPYmplY3RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckxpZ2h0aW5nT2JqZWN0XCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlXCIpO1xuaW1wb3J0IExpZ2h0aW5nTWV0aG9kQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9MaWdodGluZ01ldGhvZEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIERpZmZ1c2VCYXNpY01ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBzaGFkaW5nIG1ldGhvZCBmb3IgTGFtYmVydCAoZG90MykgZGlmZnVzZSBsaWdodGluZy5cbiAqL1xuY2xhc3MgRGlmZnVzZUJhc2ljTWV0aG9kIGV4dGVuZHMgTGlnaHRpbmdNZXRob2RCYXNlXG57XG5cdHByaXZhdGUgX211bHRpcGx5OmJvb2xlYW4gPSB0cnVlO1xuXG5cdHB1YmxpYyBfcFVzZVRleHR1cmU6Ym9vbGVhbjtcblx0cHVibGljIF9wVG90YWxMaWdodENvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0cHVibGljIF9wRGlmZnVzZUlucHV0UmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXG5cdHByaXZhdGUgX3RleHR1cmU6VGV4dHVyZTJEQmFzZTtcblx0cHJpdmF0ZSBfZGlmZnVzZUNvbG9yOm51bWJlciA9IDB4ZmZmZmZmO1xuXHRwcml2YXRlIF9hbWJpZW50Q29sb3I6bnVtYmVyID0gMHhmZmZmZmY7XG5cdHByaXZhdGUgX2RpZmZ1c2VSOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2RpZmZ1c2VHOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2RpZmZ1c2VCOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRSOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRHOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX2FtYmllbnRCOm51bWJlciA9IDE7XG5cblx0cHVibGljIF9wSXNGaXJzdExpZ2h0OmJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGlmZnVzZUJhc2ljTWV0aG9kIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgaUlzVXNlZChzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QpOmJvb2xlYW5cblx0e1xuXHRcdGlmICghc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBpbnRlcm5hbGx5IGlmIGRpZmZ1c2UgY29sb3IgY29tcG9uZW50IG11bHRpcGxpZXMgb3IgcmVwbGFjZXMgdGhlIGFtYmllbnQgY29sb3Jcblx0ICovXG5cdHB1YmxpYyBnZXQgbXVsdGlwbHkoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbXVsdGlwbHk7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG11bHRpcGx5KHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHRpZiAodGhpcy5fbXVsdGlwbHkgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9tdWx0aXBseSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblx0fVxuXG5cdHB1YmxpYyBpSW5pdFZPKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRtZXRob2RWTy5uZWVkc1VWID0gdGhpcy5fcFVzZVRleHR1cmU7XG5cdFx0bWV0aG9kVk8ubmVlZHNOb3JtYWxzID0gc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cyA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogRm9yY2VzIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGV4dHVyZS5cblx0ICogQHBhcmFtIHN0YWdlIFRoZSBTdGFnZSB1c2VkIGJ5IHRoZSByZW5kZXJlclxuXHQgKi9cblx0cHVibGljIGdlbmVyYXRlTWlwKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKVxuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZSgwLCB0aGlzLl90ZXh0dXJlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY29sb3Igb2YgdGhlIGRpZmZ1c2UgcmVmbGVjdGlvbiB3aGVuIG5vdCB1c2luZyBhIHRleHR1cmUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpZmZ1c2VDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlmZnVzZUNvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9kaWZmdXNlQ29sb3IgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9kaWZmdXNlQ29sb3IgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlRGlmZnVzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvciBvZiB0aGUgYW1iaWVudCByZWZsZWN0aW9uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGFtYmllbnRDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FtYmllbnRDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudENvbG9yKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9hbWJpZW50Q29sb3IgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbWJpZW50Q29sb3IgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlQW1iaWVudCgpO1xuXHR9XG5cblxuXHQvKipcblx0ICogVGhlIGJpdG1hcERhdGEgdG8gdXNlIHRvIGRlZmluZSB0aGUgZGlmZnVzZSByZWZsZWN0aW9uIGNvbG9yIHBlciB0ZXhlbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgdGV4dHVyZSgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR2YXIgYjpib29sZWFuID0gKHZhbHVlICE9IG51bGwpO1xuXG5cdFx0aWYgKGIgIT0gdGhpcy5fcFVzZVRleHR1cmUgfHwgKHZhbHVlICYmIHRoaXMuX3RleHR1cmUgJiYgKHZhbHVlLmhhc01pcG1hcHMgIT0gdGhpcy5fdGV4dHVyZS5oYXNNaXBtYXBzIHx8IHZhbHVlLmZvcm1hdCAhPSB0aGlzLl90ZXh0dXJlLmZvcm1hdCkpKVxuXHRcdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblxuXHRcdHRoaXMuX3BVc2VUZXh0dXJlID0gYjtcblx0XHR0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cdFx0dmFyIGRpZmY6RGlmZnVzZUJhc2ljTWV0aG9kID0gPERpZmZ1c2VCYXNpY01ldGhvZD4gbWV0aG9kO1xuXG5cdFx0dGhpcy50ZXh0dXJlID0gZGlmZi50ZXh0dXJlO1xuXHRcdHRoaXMubXVsdGlwbHkgPSBkaWZmLm11bHRpcGx5O1xuXHRcdHRoaXMuZGlmZnVzZUNvbG9yID0gZGlmZi5kaWZmdXNlQ29sb3I7XG5cdFx0dGhpcy5hbWJpZW50Q29sb3IgPSBkaWZmLmFtYmllbnRDb2xvcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblxuXHRcdHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgPSBudWxsO1xuXHRcdHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRQcmVMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnLCAxKTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZVBlckxpZ2h0KHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIGxpZ2h0RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgbGlnaHRDb2xSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHQvLyB3cml0ZSBpbiB0ZW1wb3JhcnkgaWYgbm90IGZpcnN0IGxpZ2h0LCBzbyB3ZSBjYW4gYWRkIHRvIHRvdGFsIGRpZmZ1c2UgY29sb3VyXG5cdFx0aWYgKHRoaXMuX3BJc0ZpcnN0TGlnaHQpIHtcblx0XHRcdHQgPSB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0LCAxKTtcblx0XHR9XG5cblx0XHRjb2RlICs9IFwiZHAzIFwiICsgdCArIFwiLngsIFwiICsgbGlnaHREaXJSZWcgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMubm9ybWFsRnJhZ21lbnQgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtYXggXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIueCwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLnlcXG5cIjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudXNlc0xpZ2h0RmFsbE9mZilcblx0XHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIudywgXCIgKyBsaWdodERpclJlZyArIFwiLndcXG5cIjtcblxuXHRcdGlmICh0aGlzLl9pTW9kdWxhdGVNZXRob2QgIT0gbnVsbClcblx0XHRcdGNvZGUgKz0gdGhpcy5faU1vZHVsYXRlTWV0aG9kKHNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHQsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRjb2RlICs9IFwibXVsIFwiICsgdCArIFwiLCBcIiArIHQgKyBcIi53LCBcIiArIGxpZ2h0Q29sUmVnICsgXCJcXG5cIjtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudENvZGVQZXJQcm9iZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPLCBjdWJlTWFwUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgd2VpZ2h0UmVnaXN0ZXI6c3RyaW5nLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHQvLyB3cml0ZSBpbiB0ZW1wb3JhcnkgaWYgbm90IGZpcnN0IGxpZ2h0LCBzbyB3ZSBjYW4gYWRkIHRvIHRvdGFsIGRpZmZ1c2UgY29sb3VyXG5cdFx0aWYgKHRoaXMuX3BJc0ZpcnN0TGlnaHQpIHtcblx0XHRcdHQgPSB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0LCAxKTtcblx0XHR9XG5cblx0XHRjb2RlICs9IFwidGV4IFwiICsgdCArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudCArIFwiLCBcIiArIGN1YmVNYXBSZWcgKyBcIiA8Y3ViZSxsaW5lYXIsbWlwbGluZWFyPlxcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0ICsgXCIueHl6LCBcIiArIHQgKyBcIi54eXosIFwiICsgd2VpZ2h0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXG5cdFx0aWYgKHRoaXMuX2lNb2R1bGF0ZU1ldGhvZCAhPSBudWxsKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pTW9kdWxhdGVNZXRob2Qoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgdCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHR2YXIgYWxiZWRvOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0XHR2YXIgY3V0T2ZmUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdC8vIGluY29ycG9yYXRlIGlucHV0IGZyb20gYW1iaWVudFxuXHRcdGlmIChzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0KVxuXHRcdFx0Y29kZSArPSB0aGlzLnBBcHBseVNoYWRvdyhzaGFkZXJPYmplY3QsIG1ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0YWxiZWRvID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXMoYWxiZWRvLCAxKTtcblxuXHRcdHZhciBhbWJpZW50Q29sb3JSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGFtYmllbnRDb2xvclJlZ2lzdGVyLmluZGV4KjQ7XG5cblx0XHRpZiAodGhpcy5fcFVzZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblxuXHRcdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3Rlci5pbmRleDtcblxuXHRcdFx0Y29kZSArPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUoYWxiZWRvLCBzaGFyZWRSZWdpc3RlcnMsIHRoaXMuX3BEaWZmdXNlSW5wdXRSZWdpc3RlciwgdGhpcy5fdGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wRGlmZnVzZUlucHV0UmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGNvZGUgKz0gXCJtb3YgXCIgKyBhbGJlZG8gKyBcIiwgXCIgKyB0aGlzLl9wRGlmZnVzZUlucHV0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGNvZGUgKz0gXCJzYXQgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCIgK1xuXHRcdFx0XCJtdWwgXCIgKyBhbGJlZG8gKyBcIi54eXosIFwiICsgYWxiZWRvICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCI7XG5cblx0XHRpZiAodGhpcy5fbXVsdGlwbHkpIHtcblx0XHRcdGNvZGUgKz0gXCJhZGQgXCIgKyBhbGJlZG8gKyBcIi54eXosIFwiICsgYWxiZWRvICsgXCIsIFwiICsgYW1iaWVudENvbG9yUmVnaXN0ZXIgKyBcIlxcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0YXJnZXRSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgYWxiZWRvICsgXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29kZSArPSBcIm11bCBcIiArIHRhcmdldFJlZyArIFwiLnh5eiwgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyBhbWJpZW50Q29sb3JSZWdpc3RlciArIFwiXFxuXCIgK1xuXHRcdFx0XHRcIm11bCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCIgK1xuXHRcdFx0XHRcInN1YiBcIiArIHRhcmdldFJlZyArIFwiLnh5eiwgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIGFsYmVkbyArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnKTtcblx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKGFsYmVkbyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGFwcGxpZXMgdGhlIGNhbGN1bGF0ZWQgc2hhZG93IHRvIHRoZSBkaWZmdXNlIGxpZ2h0XG5cdCAqIEBwYXJhbSBtZXRob2RWTyBUaGUgTWV0aG9kVk8gb2JqZWN0IGZvciB3aGljaCB0aGUgY29tcGlsYXRpb24gaXMgY3VycmVudGx5IGhhcHBlbmluZy5cblx0ICogQHBhcmFtIHJlZ0NhY2hlIFRoZSByZWdpc3RlciBjYWNoZSB0aGUgY29tcGlsZXIgaXMgY3VycmVudGx5IHVzaW5nIGZvciB0aGUgcmVnaXN0ZXIgbWFuYWdlbWVudC5cblx0ICovXG5cdHB1YmxpYyBwQXBwbHlTaGFkb3coc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJtdWwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIueHl6LCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0ICsgXCIud1xcblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKSB7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuc2V0U2FtcGxlclN0YXRlQXQobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzPyBDb250ZXh0R0xXcmFwTW9kZS5SRVBFQVQ6Q29udGV4dEdMV3JhcE1vZGUuQ0xBTVAsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcz8gQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVIgOiBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1QsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nPyBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTElORUFSIDogQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkUpO1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZShtZXRob2RWTy50ZXh0dXJlc0luZGV4LCB0aGlzLl90ZXh0dXJlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleCArIDRdID0gdGhpcy5fZGlmZnVzZVI7XG5cdFx0XHRkYXRhW2luZGV4ICsgNV0gPSB0aGlzLl9kaWZmdXNlRztcblx0XHRcdGRhdGFbaW5kZXggKyA2XSA9IHRoaXMuX2RpZmZ1c2VCO1xuXHRcdFx0ZGF0YVtpbmRleCArIDddID0gMTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgZGlmZnVzZSBjb2xvciBkYXRhIHVzZWQgYnkgdGhlIHJlbmRlciBzdGF0ZS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlRGlmZnVzZSgpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlUiA9ICgodGhpcy5fZGlmZnVzZUNvbG9yID4+IDE2KSAmIDB4ZmYpLzB4ZmY7XG5cdFx0dGhpcy5fZGlmZnVzZUcgPSAoKHRoaXMuX2RpZmZ1c2VDb2xvciA+PiA4KSAmIDB4ZmYpLzB4ZmY7XG5cdFx0dGhpcy5fZGlmZnVzZUIgPSAodGhpcy5fZGlmZnVzZUNvbG9yICYgMHhmZikvMHhmZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBhbWJpZW50IGNvbG9yIGRhdGEgdXNlZCBieSB0aGUgcmVuZGVyIHN0YXRlLlxuXHQgKi9cblx0cHJpdmF0ZSB1cGRhdGVBbWJpZW50KClcblx0e1xuXHRcdHRoaXMuX2FtYmllbnRSID0gKCh0aGlzLl9hbWJpZW50Q29sb3IgPj4gMTYpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9hbWJpZW50RyA9ICgodGhpcy5fYW1iaWVudENvbG9yID4+IDgpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9hbWJpZW50QiA9ICh0aGlzLl9hbWJpZW50Q29sb3IgJiAweGZmKS8weGZmO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaVNldFJlbmRlclN0YXRlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0Ly9UT0RPIG1vdmUgdGhpcyB0byBBY3RpdmF0ZSAoYW1iaWVudFIvRy9CIGN1cnJlbnRseSBjYWxjJ2QgaW4gcmVuZGVyIHN0YXRlKVxuXHRcdGlmIChzaGFkZXJPYmplY3QubnVtTGlnaHRzID4gMCkge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleF0gPSBzaGFkZXJPYmplY3QuYW1iaWVudFIqdGhpcy5fYW1iaWVudFI7XG5cdFx0XHRkYXRhW2luZGV4ICsgMV0gPSBzaGFkZXJPYmplY3QuYW1iaWVudEcqdGhpcy5fYW1iaWVudEc7XG5cdFx0XHRkYXRhW2luZGV4ICsgMl0gPSBzaGFkZXJPYmplY3QuYW1iaWVudEIqdGhpcy5fYW1iaWVudEI7XG5cdFx0XHRkYXRhW2luZGV4ICsgM10gPSAxO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBEaWZmdXNlQmFzaWNNZXRob2Q7Il19 \ No newline at end of file diff --git a/lib/materials/methods/DiffuseBasicMethod.ts b/lib/materials/methods/DiffuseBasicMethod.ts index 43011f22..643d2ba9 100644 --- a/lib/materials/methods/DiffuseBasicMethod.ts +++ b/lib/materials/methods/DiffuseBasicMethod.ts @@ -2,12 +2,12 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/EffectColorTransformMethod.js b/lib/materials/methods/EffectColorTransformMethod.js index 56fba5e4..71b4f09a 100755 --- a/lib/materials/methods/EffectColorTransformMethod.js +++ b/lib/materials/methods/EffectColorTransformMethod.js @@ -62,4 +62,4 @@ var EffectColorTransformMethod = (function (_super) { })(EffectMethodBase); module.exports = EffectColorTransformMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9lZmZlY3Rjb2xvcnRyYW5zZm9ybW1ldGhvZC50cyJdLCJuYW1lcyI6WyJFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZCIsIkVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kLmNvbnN0cnVjdG9yIiwiRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QuY29sb3JUcmFuc2Zvcm0iLCJFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlIiwiRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QuaUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFPLGdCQUFnQixXQUFjLHVEQUF1RCxDQUFDLENBQUM7QUFFOUYsQUFJQTs7O0dBREc7SUFDRywwQkFBMEI7SUFBU0EsVUFBbkNBLDBCQUEwQkEsVUFBeUJBO0lBSXhEQTs7T0FFR0E7SUFDSEEsU0FQS0EsMEJBQTBCQTtRQVM5QkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBS0RELHNCQUFXQSxzREFBY0E7UUFIekJBOztXQUVHQTthQUNIQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQTtRQUM3QkEsQ0FBQ0E7YUFFREYsVUFBMEJBLEtBQW9CQTtZQUU3Q0UsSUFBSUEsQ0FBQ0EsZUFBZUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDOUJBLENBQUNBOzs7T0FMQUY7SUFPREE7O09BRUdBO0lBQ0lBLHFEQUFnQkEsR0FBdkJBLFVBQXdCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLFNBQStCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRS9LRyxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNyQkEsSUFBSUEsWUFBWUEsR0FBeUJBLGFBQWFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFDakZBLElBQUlBLFlBQVlBLEdBQXlCQSxhQUFhQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRWpGQSxRQUFRQSxDQUFDQSxzQkFBc0JBLEdBQUdBLFlBQVlBLENBQUNBLEtBQUtBLEdBQUNBLENBQUNBLENBQUNBO1FBRXZEQSxBQUVBQSxvQkFGb0JBO1FBRXBCQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxZQUFZQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxZQUFZQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVoSkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFREg7O09BRUdBO0lBQ0lBLDhDQUFTQSxHQUFoQkEsVUFBaUJBLFlBQTZCQSxFQUFFQSxRQUFpQkEsRUFBRUEsS0FBV0E7UUFFN0VJLElBQUlBLEdBQUdBLEdBQVVBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBO1FBQ3hCQSxJQUFJQSxLQUFLQSxHQUFVQSxRQUFRQSxDQUFDQSxzQkFBc0JBLENBQUNBO1FBQ25EQSxJQUFJQSxJQUFJQSxHQUFpQkEsWUFBWUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQTtRQUUzREEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDakRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBO1FBQ3ZEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUN0REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7UUFDdkRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLFNBQVNBLEdBQUNBLEdBQUdBLENBQUNBO1FBQ3JEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxXQUFXQSxHQUFDQSxHQUFHQSxDQUFDQTtRQUN2REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsVUFBVUEsR0FBQ0EsR0FBR0EsQ0FBQ0E7UUFDdERBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLFdBQVdBLEdBQUNBLEdBQUdBLENBQUNBO0lBRXhEQSxDQUFDQTtJQUNGSixpQ0FBQ0E7QUFBREEsQ0E5REEsQUE4RENBLEVBOUR3QyxnQkFBZ0IsRUE4RHhEO0FBRUQsQUFBb0MsaUJBQTNCLDBCQUEwQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL0VmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2xvclRyYW5zZm9ybVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vQ29sb3JUcmFuc2Zvcm1cIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBFZmZlY3RNZXRob2RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRWZmZWN0TWV0aG9kQmFzZVwiKTtcblxuLyoqXG4gKiBFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZCBwcm92aWRlcyBhIHNoYWRpbmcgbWV0aG9kIHRoYXQgY2hhbmdlcyB0aGUgY29sb3VyIG9mIGEgbWF0ZXJpYWwgYW5hbG9nb3VzIHRvIGFcbiAqIENvbG9yVHJhbnNmb3JtIG9iamVjdC5cbiAqL1xuY2xhc3MgRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QgZXh0ZW5kcyBFZmZlY3RNZXRob2RCYXNlXG57XG5cdHByaXZhdGUgX2NvbG9yVHJhbnNmb3JtOkNvbG9yVHJhbnNmb3JtO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ29sb3JUcmFuc2Zvcm0gb2JqZWN0IHRvIHRyYW5zZm9ybSB0aGUgY29sb3VyIG9mIHRoZSBtYXRlcmlhbCB3aXRoLlxuXHQgKi9cblx0cHVibGljIGdldCBjb2xvclRyYW5zZm9ybSgpOkNvbG9yVHJhbnNmb3JtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fY29sb3JUcmFuc2Zvcm07XG5cdH1cblxuXHRwdWJsaWMgc2V0IGNvbG9yVHJhbnNmb3JtKHZhbHVlOkNvbG9yVHJhbnNmb3JtKVxuXHR7XG5cdFx0dGhpcy5fY29sb3JUcmFuc2Zvcm0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgY29sb3JNdWx0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgY29sb3JPZmZzUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBjb2xvck11bHRSZWcuaW5kZXgqNDtcblxuXHRcdC8vVE9ETzogQUdBTCA8PiBHTFNMXG5cblx0XHRjb2RlICs9IFwibXVsIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgY29sb3JNdWx0UmVnICsgXCJcXG5cIiArIFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgY29sb3JPZmZzUmVnICsgXCJcXG5cIjtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR2YXIgaW52Om51bWJlciA9IDEvMHhmZjtcblx0XHR2YXIgaW5kZXg6bnVtYmVyID0gbWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleDtcblx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXG5cdFx0ZGF0YVtpbmRleF0gPSB0aGlzLl9jb2xvclRyYW5zZm9ybS5yZWRNdWx0aXBsaWVyO1xuXHRcdGRhdGFbaW5kZXggKyAxXSA9IHRoaXMuX2NvbG9yVHJhbnNmb3JtLmdyZWVuTXVsdGlwbGllcjtcblx0XHRkYXRhW2luZGV4ICsgMl0gPSB0aGlzLl9jb2xvclRyYW5zZm9ybS5ibHVlTXVsdGlwbGllcjtcblx0XHRkYXRhW2luZGV4ICsgM10gPSB0aGlzLl9jb2xvclRyYW5zZm9ybS5hbHBoYU11bHRpcGxpZXI7XG5cdFx0ZGF0YVtpbmRleCArIDRdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0ucmVkT2Zmc2V0Kmludjtcblx0XHRkYXRhW2luZGV4ICsgNV0gPSB0aGlzLl9jb2xvclRyYW5zZm9ybS5ncmVlbk9mZnNldCppbnY7XG5cdFx0ZGF0YVtpbmRleCArIDZdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0uYmx1ZU9mZnNldCppbnY7XG5cdFx0ZGF0YVtpbmRleCArIDddID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0uYWxwaGFPZmZzZXQqaW52O1xuXG5cdH1cbn1cblxuZXhwb3J0ID0gRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2Q7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9lZmZlY3Rjb2xvcnRyYW5zZm9ybW1ldGhvZC50cyJdLCJuYW1lcyI6WyJFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZCIsIkVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kLmNvbnN0cnVjdG9yIiwiRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QuY29sb3JUcmFuc2Zvcm0iLCJFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlIiwiRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QuaUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFPLGdCQUFnQixXQUFjLHVEQUF1RCxDQUFDLENBQUM7QUFFOUYsQUFJQTs7O0dBREc7SUFDRywwQkFBMEI7SUFBU0EsVUFBbkNBLDBCQUEwQkEsVUFBeUJBO0lBSXhEQTs7T0FFR0E7SUFDSEEsU0FQS0EsMEJBQTBCQTtRQVM5QkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBS0RELHNCQUFXQSxzREFBY0E7UUFIekJBOztXQUVHQTthQUNIQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQTtRQUM3QkEsQ0FBQ0E7YUFFREYsVUFBMEJBLEtBQW9CQTtZQUU3Q0UsSUFBSUEsQ0FBQ0EsZUFBZUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDOUJBLENBQUNBOzs7T0FMQUY7SUFPREE7O09BRUdBO0lBQ0lBLHFEQUFnQkEsR0FBdkJBLFVBQXdCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLFNBQStCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRS9LRyxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNyQkEsSUFBSUEsWUFBWUEsR0FBeUJBLGFBQWFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFDakZBLElBQUlBLFlBQVlBLEdBQXlCQSxhQUFhQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRWpGQSxRQUFRQSxDQUFDQSxzQkFBc0JBLEdBQUdBLFlBQVlBLENBQUNBLEtBQUtBLEdBQUNBLENBQUNBLENBQUNBO1FBRXZEQSxBQUVBQSxvQkFGb0JBO1FBRXBCQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxZQUFZQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxTQUFTQSxHQUFHQSxJQUFJQSxHQUFHQSxZQUFZQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVoSkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFREg7O09BRUdBO0lBQ0lBLDhDQUFTQSxHQUFoQkEsVUFBaUJBLFlBQTZCQSxFQUFFQSxRQUFpQkEsRUFBRUEsS0FBV0E7UUFFN0VJLElBQUlBLEdBQUdBLEdBQVVBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBO1FBQ3hCQSxJQUFJQSxLQUFLQSxHQUFVQSxRQUFRQSxDQUFDQSxzQkFBc0JBLENBQUNBO1FBQ25EQSxJQUFJQSxJQUFJQSxHQUFpQkEsWUFBWUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQTtRQUUzREEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDakRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLENBQUNBO1FBQ3ZEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUN0REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7UUFDdkRBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLFNBQVNBLEdBQUNBLEdBQUdBLENBQUNBO1FBQ3JEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxXQUFXQSxHQUFDQSxHQUFHQSxDQUFDQTtRQUN2REEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsVUFBVUEsR0FBQ0EsR0FBR0EsQ0FBQ0E7UUFDdERBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLFdBQVdBLEdBQUNBLEdBQUdBLENBQUNBO0lBRXhEQSxDQUFDQTtJQUNGSixpQ0FBQ0E7QUFBREEsQ0E5REEsQUE4RENBLEVBOUR3QyxnQkFBZ0IsRUE4RHhEO0FBRUQsQUFBb0MsaUJBQTNCLDBCQUEwQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL0VmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2xvclRyYW5zZm9ybVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vQ29sb3JUcmFuc2Zvcm1cIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgRWZmZWN0TWV0aG9kQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0VmZmVjdE1ldGhvZEJhc2VcIik7XG5cbi8qKlxuICogRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2QgcHJvdmlkZXMgYSBzaGFkaW5nIG1ldGhvZCB0aGF0IGNoYW5nZXMgdGhlIGNvbG91ciBvZiBhIG1hdGVyaWFsIGFuYWxvZ291cyB0byBhXG4gKiBDb2xvclRyYW5zZm9ybSBvYmplY3QuXG4gKi9cbmNsYXNzIEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kIGV4dGVuZHMgRWZmZWN0TWV0aG9kQmFzZVxue1xuXHRwcml2YXRlIF9jb2xvclRyYW5zZm9ybTpDb2xvclRyYW5zZm9ybTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENvbG9yVHJhbnNmb3JtIG9iamVjdCB0byB0cmFuc2Zvcm0gdGhlIGNvbG91ciBvZiB0aGUgbWF0ZXJpYWwgd2l0aC5cblx0ICovXG5cdHB1YmxpYyBnZXQgY29sb3JUcmFuc2Zvcm0oKTpDb2xvclRyYW5zZm9ybVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yVHJhbnNmb3JtO1xuXHR9XG5cblx0cHVibGljIHNldCBjb2xvclRyYW5zZm9ybSh2YWx1ZTpDb2xvclRyYW5zZm9ybSlcblx0e1xuXHRcdHRoaXMuX2NvbG9yVHJhbnNmb3JtID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cdFx0dmFyIGNvbG9yTXVsdFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0dmFyIGNvbG9yT2Zmc1JlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4ID0gY29sb3JNdWx0UmVnLmluZGV4KjQ7XG5cblx0XHQvL1RPRE86IEFHQUwgPD4gR0xTTFxuXG5cdFx0Y29kZSArPSBcIm11bCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIGNvbG9yTXVsdFJlZyArIFwiXFxuXCIgKyBcImFkZCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIGNvbG9yT2Zmc1JlZyArIFwiXFxuXCI7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlBY3RpdmF0ZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dmFyIGludjpudW1iZXIgPSAxLzB4ZmY7XG5cdFx0dmFyIGluZGV4Om51bWJlciA9IG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0dmFyIGRhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblxuXHRcdGRhdGFbaW5kZXhdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0ucmVkTXVsdGlwbGllcjtcblx0XHRkYXRhW2luZGV4ICsgMV0gPSB0aGlzLl9jb2xvclRyYW5zZm9ybS5ncmVlbk11bHRpcGxpZXI7XG5cdFx0ZGF0YVtpbmRleCArIDJdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0uYmx1ZU11bHRpcGxpZXI7XG5cdFx0ZGF0YVtpbmRleCArIDNdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0uYWxwaGFNdWx0aXBsaWVyO1xuXHRcdGRhdGFbaW5kZXggKyA0XSA9IHRoaXMuX2NvbG9yVHJhbnNmb3JtLnJlZE9mZnNldCppbnY7XG5cdFx0ZGF0YVtpbmRleCArIDVdID0gdGhpcy5fY29sb3JUcmFuc2Zvcm0uZ3JlZW5PZmZzZXQqaW52O1xuXHRcdGRhdGFbaW5kZXggKyA2XSA9IHRoaXMuX2NvbG9yVHJhbnNmb3JtLmJsdWVPZmZzZXQqaW52O1xuXHRcdGRhdGFbaW5kZXggKyA3XSA9IHRoaXMuX2NvbG9yVHJhbnNmb3JtLmFscGhhT2Zmc2V0KmludjtcblxuXHR9XG59XG5cbmV4cG9ydCA9IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kOyJdfQ== \ No newline at end of file diff --git a/lib/materials/methods/EffectColorTransformMethod.ts b/lib/materials/methods/EffectColorTransformMethod.ts index 400a7ba5..745bbf23 100644 --- a/lib/materials/methods/EffectColorTransformMethod.ts +++ b/lib/materials/methods/EffectColorTransformMethod.ts @@ -1,6 +1,6 @@ import ColorTransform = require("awayjs-core/lib/geom/ColorTransform"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/NormalBasicMethod.js b/lib/materials/methods/NormalBasicMethod.js index 63064919..e31e654b 100755 --- a/lib/materials/methods/NormalBasicMethod.js +++ b/lib/materials/methods/NormalBasicMethod.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var ShadingMethodBase = require("awayjs-stagegl/lib/materials/methods/ShadingMethodBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -98,4 +98,4 @@ var NormalBasicMethod = (function (_super) { })(ShadingMethodBase); module.exports = NormalBasicMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9ub3JtYWxiYXNpY21ldGhvZC50cyJdLCJuYW1lcyI6WyJOb3JtYWxCYXNpY01ldGhvZCIsIk5vcm1hbEJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiTm9ybWFsQmFzaWNNZXRob2QuaUlzVXNlZCIsIk5vcm1hbEJhc2ljTWV0aG9kLmlJbml0Vk8iLCJOb3JtYWxCYXNpY01ldGhvZC5pT3V0cHV0c1RhbmdlbnROb3JtYWxzIiwiTm9ybWFsQmFzaWNNZXRob2QuY29weUZyb20iLCJOb3JtYWxCYXNpY01ldGhvZC5ub3JtYWxNYXAiLCJOb3JtYWxCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJOb3JtYWxCYXNpY01ldGhvZC5kaXNwb3NlIiwiTm9ybWFsQmFzaWNNZXRob2QuaUFjdGl2YXRlIiwiTm9ybWFsQmFzaWNNZXRob2QuaUdldEZyYWdtZW50Q29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBTyxrQkFBa0IsV0FBYSxvREFBb0QsQ0FBQyxDQUFDO0FBQzVGLElBQU8sc0JBQXNCLFdBQVksd0RBQXdELENBQUMsQ0FBQztBQUNuRyxJQUFPLGlCQUFpQixXQUFhLG1EQUFtRCxDQUFDLENBQUM7QUFPMUYsSUFBTyxpQkFBaUIsV0FBYSx3REFBd0QsQ0FBQyxDQUFDO0FBQy9GLElBQU8sb0JBQW9CLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVuRyxBQUdBOztHQURHO0lBQ0csaUJBQWlCO0lBQVNBLFVBQTFCQSxpQkFBaUJBLFVBQTBCQTtJQU1oREE7O09BRUdBO0lBQ0hBLFNBVEtBLGlCQUFpQkE7UUFXckJDLGlCQUFPQSxDQUFDQTtJQUNUQSxDQUFDQTtJQUVNRCxtQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxrQkFBa0JBLENBQUNB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Q0FBQ0E7WUFDL1RBLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLGVBQWVBLENBQUNBLFFBQVFBLENBQUNBLGFBQWFBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1FBQzFGQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVEVDs7T0FFR0E7SUFDSUEsNENBQWdCQSxHQUF2QkEsVUFBd0JBLFlBQTZCQSxFQUFFQSxRQUFpQkEsRUFBRUEsU0FBK0JBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFL0tVLElBQUlBLENBQUNBLHVCQUF1QkEsR0FBR0EsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUVqRUEsUUFBUUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxLQUFLQSxDQUFDQTtRQUU1REEsTUFBTUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxrQkFBa0JBLENBQUNBLFNBQVNBLEVBQUVBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLHVCQUF1QkEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxZQUFZQSxDQUFDQSxjQUFjQSxFQUFFQSxZQUFZQSxDQUFDQSxhQUFhQSxDQUFDQSxHQUMvTUEsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsZUFBZUEsQ0FBQ0EsT0FBT0EsR0FBR0EsUUFBUUEsR0FDekZBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLFFBQVFBLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBO0lBQ25EQSxDQUFDQTtJQUNGVix3QkFBQ0E7QUFBREEsQ0FoSEEsQUFnSENBLEVBaEgrQixpQkFBaUIsRUFnSGhEO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL05vcm1hbEJhc2ljTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRmlsdGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBOb3JtYWxCYXNpY01ldGhvZCBpcyB0aGUgZGVmYXVsdCBtZXRob2QgZm9yIHN0YW5kYXJkIHRhbmdlbnQtc3BhY2Ugbm9ybWFsIG1hcHBpbmcuXG4gKi9cbmNsYXNzIE5vcm1hbEJhc2ljTWV0aG9kIGV4dGVuZHMgU2hhZGluZ01ldGhvZEJhc2Vcbntcblx0cHJpdmF0ZSBfdGV4dHVyZTpUZXh0dXJlMkRCYXNlO1xuXHRwcml2YXRlIF91c2VUZXh0dXJlOmJvb2xlYW47XG5cdHB1YmxpYyBfcE5vcm1hbFRleHR1cmVSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgTm9ybWFsQmFzaWNNZXRob2Qgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBpSXNVc2VkKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKTpib29sZWFuXG5cdHtcblx0XHRpZiAoIXRoaXMuX3VzZVRleHR1cmUgfHwgIXNoYWRlck9iamVjdC5ub3JtYWxEZXBlbmRlbmNpZXMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlJbml0Vk8oc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ubmVlZHNVViA9IHRoaXMuX3VzZVRleHR1cmU7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgbWV0aG9kIG91dHB1dHMgbm9ybWFscyBpbiB0YW5nZW50IHNwYWNlLiBPdmVycmlkZSBmb3Igb2JqZWN0LXNwYWNlIG5vcm1hbHMuXG5cdCAqL1xuXHRwdWJsaWMgaU91dHB1dHNUYW5nZW50Tm9ybWFscygpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cdFx0dmFyIHM6YW55ID0gbWV0aG9kO1xuXHRcdHZhciBibm06Tm9ybWFsQmFzaWNNZXRob2QgPSA8Tm9ybWFsQmFzaWNNZXRob2Q+IG1ldGhvZDtcblxuXHRcdGlmIChibm0ubm9ybWFsTWFwICE9IG51bGwpXG5cdFx0XHR0aGlzLm5vcm1hbE1hcCA9IGJubS5ub3JtYWxNYXA7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHRleHR1cmUgY29udGFpbmluZyB0aGUgbm9ybWFscyBwZXIgcGl4ZWwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG5vcm1hbE1hcCgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIHNldCBub3JtYWxNYXAodmFsdWU6VGV4dHVyZTJEQmFzZSlcblx0e1xuXHRcdHZhciBiOmJvb2xlYW4gPSAodmFsdWUgIT0gbnVsbCk7XG5cblx0XHRpZiAoYiAhPSB0aGlzLl91c2VUZXh0dXJlIHx8ICh2YWx1ZSAmJiB0aGlzLl90ZXh0dXJlICYmICh2YWx1ZS5oYXNNaXBtYXBzICE9IHRoaXMuX3RleHR1cmUuaGFzTWlwbWFwcyB8fCB2YWx1ZS5mb3JtYXQgIT0gdGhpcy5fdGV4dHVyZS5mb3JtYXQpKSlcblx0XHRcdHRoaXMuaUludmFsaWRhdGVTaGFkZXJQcm9ncmFtKCk7XG5cblx0XHR0aGlzLl91c2VUZXh0dXJlID0gYjtcblx0XHR0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9wTm9ybWFsVGV4dHVyZVJlZ2lzdGVyID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3RleHR1cmUpXG5cdFx0XHR0aGlzLl90ZXh0dXJlID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlBY3RpdmF0ZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKG1ldGhvZFZPLnRleHR1cmVzSW5kZXggPj0gMCkge1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLnNldFNhbXBsZXJTdGF0ZUF0KG1ldGhvZFZPLnRleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcz8gQ29udGV4dEdMV3JhcE1vZGUuUkVQRUFUOkNvbnRleHRHTFdyYXBNb2RlLkNMQU1QLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXM/IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSIDogQ29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNULCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUiA6IENvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FKTtcblx0XHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5hY3RpdmF0ZVRleHR1cmUobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgdGhpcy5fdGV4dHVyZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR0aGlzLl9wTm9ybWFsVGV4dHVyZVJlZ2lzdGVyID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IHRoaXMuX3BOb3JtYWxUZXh0dXJlUmVnaXN0ZXIuaW5kZXg7XG5cblx0XHRyZXR1cm4gU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0VGV4MkRTYW1wbGVDb2RlKHRhcmdldFJlZywgc2hhcmVkUmVnaXN0ZXJzLCB0aGlzLl9wTm9ybWFsVGV4dHVyZVJlZ2lzdGVyLCB0aGlzLl90ZXh0dXJlLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXMsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmcpICtcblx0XHRcdFwic3ViIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHRhcmdldFJlZyArIFwiLnh5eiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLnh4eFxcblwiICtcblx0XHRcdFwibnJtIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHRhcmdldFJlZyArIFwiXFxuXCI7XG5cdH1cbn1cblxuZXhwb3J0ID0gTm9ybWFsQmFzaWNNZXRob2Q7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9ub3JtYWxiYXNpY21ldGhvZC50cyJdLCJuYW1lcyI6WyJOb3JtYWxCYXNpY01ldGhvZCIsIk5vcm1hbEJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiTm9ybWFsQmFzaWNNZXRob2QuaUlzVXNlZCIsIk5vcm1hbEJhc2ljTWV0aG9kLmlJbml0Vk8iLCJOb3JtYWxCYXNpY01ldGhvZC5pT3V0cHV0c1RhbmdlbnROb3JtYWxzIiwiTm9ybWFsQmFzaWNNZXRob2QuY29weUZyb20iLCJOb3JtYWxCYXNpY01ldGhvZC5ub3JtYWxNYXAiLCJOb3JtYWxCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJOb3JtYWxCYXNpY01ldGhvZC5kaXNwb3NlIiwiTm9ybWFsQmFzaWNNZXRob2QuaUFjdGl2YXRlIiwiTm9ybWFsQmFzaWNNZXRob2QuaUdldEZyYWdtZW50Q29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBTyxrQkFBa0IsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3BGLElBQU8sc0JBQXNCLFdBQVksZ0RBQWdELENBQUMsQ0FBQztBQUMzRixJQUFPLGlCQUFpQixXQUFhLDJDQUEyQyxDQUFDLENBQUM7QUFPbEYsSUFBTyxpQkFBaUIsV0FBYSx3REFBd0QsQ0FBQyxDQUFDO0FBQy9GLElBQU8sb0JBQW9CLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVuRyxBQUdBOztHQURHO0lBQ0csaUJBQWlCO0lBQVNBLFVBQTFCQSxpQkFBaUJBLFVBQTBCQTtJQU1oREE7O09BRUdBO0lBQ0hBLFNBVEtBLGlCQUFpQkE7UUFXckJDLGlCQUFPQSxDQUFDQTtJQUNUQSxDQUFDQTtJQUVNRCxtQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxrQkFBa0JBLENBQUNB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Q0FBQ0E7WUFDL1RBLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLGVBQWVBLENBQUNBLFFBQVFBLENBQUNBLGFBQWFBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1FBQzFGQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVEVDs7T0FFR0E7SUFDSUEsNENBQWdCQSxHQUF2QkEsVUFBd0JBLFlBQTZCQSxFQUFFQSxRQUFpQkEsRUFBRUEsU0FBK0JBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFL0tVLElBQUlBLENBQUNBLHVCQUF1QkEsR0FBR0EsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUVqRUEsUUFBUUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxLQUFLQSxDQUFDQTtRQUU1REEsTUFBTUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxrQkFBa0JBLENBQUNBLFNBQVNBLEVBQUVBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLHVCQUF1QkEsRUFBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxZQUFZQSxDQUFDQSxjQUFjQSxFQUFFQSxZQUFZQSxDQUFDQSxhQUFhQSxDQUFDQSxHQUMvTUEsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsZUFBZUEsQ0FBQ0EsT0FBT0EsR0FBR0EsUUFBUUEsR0FDekZBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLFFBQVFBLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBO0lBQ25EQSxDQUFDQTtJQUNGVix3QkFBQ0E7QUFBREEsQ0FoSEEsQUFnSENBLEVBaEgrQixpQkFBaUIsRUFnSGhEO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL05vcm1hbEJhc2ljTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgU2hhZGluZ01ldGhvZEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvU2hhZGluZ01ldGhvZEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIE5vcm1hbEJhc2ljTWV0aG9kIGlzIHRoZSBkZWZhdWx0IG1ldGhvZCBmb3Igc3RhbmRhcmQgdGFuZ2VudC1zcGFjZSBub3JtYWwgbWFwcGluZy5cbiAqL1xuY2xhc3MgTm9ybWFsQmFzaWNNZXRob2QgZXh0ZW5kcyBTaGFkaW5nTWV0aG9kQmFzZVxue1xuXHRwcml2YXRlIF90ZXh0dXJlOlRleHR1cmUyREJhc2U7XG5cdHByaXZhdGUgX3VzZVRleHR1cmU6Ym9vbGVhbjtcblx0cHVibGljIF9wTm9ybWFsVGV4dHVyZVJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBOb3JtYWxCYXNpY01ldGhvZCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0cHVibGljIGlJc1VzZWQoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdGlmICghdGhpcy5fdXNlVGV4dHVyZSB8fCAhc2hhZGVyT2JqZWN0Lm5vcm1hbERlcGVuZGVuY2llcylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRWTyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRtZXRob2RWTy5uZWVkc1VWID0gdGhpcy5fdXNlVGV4dHVyZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhpcyBtZXRob2Qgb3V0cHV0cyBub3JtYWxzIGluIHRhbmdlbnQgc3BhY2UuIE92ZXJyaWRlIGZvciBvYmplY3Qtc3BhY2Ugbm9ybWFscy5cblx0ICovXG5cdHB1YmxpYyBpT3V0cHV0c1RhbmdlbnROb3JtYWxzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBjb3B5RnJvbShtZXRob2Q6U2hhZGluZ01ldGhvZEJhc2UpXG5cdHtcblx0XHR2YXIgczphbnkgPSBtZXRob2Q7XG5cdFx0dmFyIGJubTpOb3JtYWxCYXNpY01ldGhvZCA9IDxOb3JtYWxCYXNpY01ldGhvZD4gbWV0aG9kO1xuXG5cdFx0aWYgKGJubS5ub3JtYWxNYXAgIT0gbnVsbClcblx0XHRcdHRoaXMubm9ybWFsTWFwID0gYm5tLm5vcm1hbE1hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgdGV4dHVyZSBjb250YWluaW5nIHRoZSBub3JtYWxzIHBlciBwaXhlbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbm9ybWFsTWFwKCk6VGV4dHVyZTJEQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmU7XG5cdH1cblxuXHRwdWJsaWMgc2V0IG5vcm1hbE1hcCh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHR7XG5cdFx0dmFyIGI6Ym9vbGVhbiA9ICh2YWx1ZSAhPSBudWxsKTtcblxuXHRcdGlmIChiICE9IHRoaXMuX3VzZVRleHR1cmUgfHwgKHZhbHVlICYmIHRoaXMuX3RleHR1cmUgJiYgKHZhbHVlLmhhc01pcG1hcHMgIT0gdGhpcy5fdGV4dHVyZS5oYXNNaXBtYXBzIHx8IHZhbHVlLmZvcm1hdCAhPSB0aGlzLl90ZXh0dXJlLmZvcm1hdCkpKVxuXHRcdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblxuXHRcdHRoaXMuX3VzZVRleHR1cmUgPSBiO1xuXHRcdHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUNsZWFuQ29tcGlsYXRpb25EYXRhKClcblx0e1xuXHRcdHN1cGVyLmlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpO1xuXHRcdHRoaXMuX3BOb3JtYWxUZXh0dXJlUmVnaXN0ZXIgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRpZiAodGhpcy5fdGV4dHVyZSlcblx0XHRcdHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRpZiAobWV0aG9kVk8udGV4dHVyZXNJbmRleCA+PSAwKSB7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuc2V0U2FtcGxlclN0YXRlQXQobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzPyBDb250ZXh0R0xXcmFwTW9kZS5SRVBFQVQ6Q29udGV4dEdMV3JhcE1vZGUuQ0xBTVAsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcz8gQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVIgOiBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLk5FQVJFU1QsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nPyBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTElORUFSIDogQ29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkUpO1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZShtZXRob2RWTy50ZXh0dXJlc0luZGV4LCB0aGlzLl90ZXh0dXJlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHRoaXMuX3BOb3JtYWxUZXh0dXJlUmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cblx0XHRtZXRob2RWTy50ZXh0dXJlc0luZGV4ID0gdGhpcy5fcE5vcm1hbFRleHR1cmVSZWdpc3Rlci5pbmRleDtcblxuXHRcdHJldHVybiBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUodGFyZ2V0UmVnLCBzaGFyZWRSZWdpc3RlcnMsIHRoaXMuX3BOb3JtYWxUZXh0dXJlUmVnaXN0ZXIsIHRoaXMuX3RleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzLCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZykgK1xuXHRcdFx0XCJzdWIgXCIgKyB0YXJnZXRSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5jb21tb25zICsgXCIueHh4XFxuXCIgK1xuXHRcdFx0XCJucm0gXCIgKyB0YXJnZXRSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCJcXG5cIjtcblx0fVxufVxuXG5leHBvcnQgPSBOb3JtYWxCYXNpY01ldGhvZDsiXX0= \ No newline at end of file diff --git a/lib/materials/methods/NormalBasicMethod.ts b/lib/materials/methods/NormalBasicMethod.ts index 14de1243..b979d24e 100644 --- a/lib/materials/methods/NormalBasicMethod.ts +++ b/lib/materials/methods/NormalBasicMethod.ts @@ -1,10 +1,10 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/ShadingMethodBase.js b/lib/materials/methods/ShadingMethodBase.js index 2a345dae..3fda819b 100755 --- a/lib/materials/methods/ShadingMethodBase.js +++ b/lib/materials/methods/ShadingMethodBase.js @@ -139,4 +139,4 @@ var ShadingMethodBase = (function (_super) { })(NamedAssetBase); module.exports = ShadingMethodBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkaW5nbWV0aG9kYmFzZS50cyJdLCJuYW1lcyI6WyJTaGFkaW5nTWV0aG9kQmFzZSIsIlNoYWRpbmdNZXRob2RCYXNlLmNvbnN0cnVjdG9yIiwiU2hhZGluZ01ldGhvZEJhc2UuaUlzVXNlZCIsIlNoYWRpbmdNZXRob2RCYXNlLmlJbml0Vk8iLCJTaGFkaW5nTWV0aG9kQmFzZS5pSW5pdENvbnN0YW50cyIsIlNoYWRpbmdNZXRob2RCYXNlLmlVc2VzVGFuZ2VudFNwYWNlIiwiU2hhZGluZ01ldGhvZEJhc2UucGFzc2VzIiwiU2hhZGluZ01ldGhvZEJhc2UuZGlzcG9zZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlSZXNldCIsIlNoYWRpbmdNZXRob2RCYXNlLmlDbGVhbkNvbXBpbGF0aW9uRGF0YSIsIlNoYWRpbmdNZXRob2RCYXNlLmlHZXRWZXJ0ZXhDb2RlIiwiU2hhZGluZ01ldGhvZEJhc2UuaUdldEZyYWdtZW50Q29kZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlBY3RpdmF0ZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlTZXRSZW5kZXJTdGF0ZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlEZWFjdGl2YXRlIiwiU2hhZGluZ01ldGhvZEJhc2UuaUludmFsaWRhdGVTaGFkZXJQcm9ncmFtIiwiU2hhZGluZ01ldGhvZEJhc2UuY29weUZyb20iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sY0FBYyxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFNN0UsSUFBTyxrQkFBa0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBU3RGLEFBSUE7OztHQURHO0lBQ0csaUJBQWlCO0lBQVNBLFVBQTFCQSxpQkFBaUJBLFVBQXVCQTtJQUk3Q0E7O09BRUdBO0lBQ0hBLFNBUEtBLGlCQUFpQkE7UUFTckJDLGlCQUFPQSxDQUFDQTtJQUNUQSxDQUFDQTtJQUVNRCxtQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUVERjs7Ozs7O09BTUdBO0lBQ0lBLG1DQUFPQSxHQUFkQSxVQUFlQSxZQUE2QkEsRUFBRUEsUUFBaUJBO0lBRy9ERyxDQUFDQTtJQUVESDs7Ozs7O09BTUdBO0lBQ0lBLDBDQUFjQSxHQUFyQkEsVUFBc0JBLFlBQTZCQSxFQUFFQSxRQUFpQkE7SUFJdEVJLENBQUNBO0lBRURKOztPQUVHQTtJQUNJQSw2Q0FBaUJBLEdBQXhCQTtRQUVDSyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUtETCxzQkFBV0EscUNBQU1BO1FBSGpCQTs7V0FFR0E7YUFDSEE7WUFFQ00sTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDckJBLENBQUNBOzs7T0FBQU47SUFFREE7O09BRUdBO0lBQ0lBLG1DQUFPQSxHQUFkQTtJQUdBTyxDQUFDQTtJQUVEUDs7OztPQUlHQTtJQUNJQSxrQ0FBTUEsR0FBYkE7UUFFQ1EsSUFBSUEsQ0FBQ0EscUJBQXFCQSxFQUFFQSxDQUFDQTtJQUM5QkEsQ0FBQ0E7SUFFRFI7Ozs7T0FJR0E7SUFDSUEsaURBQXFCQSxHQUE1QkE7SUFFQVMsQ0FBQ0E7SUFFRFQ7Ozs7OztPQU1HQTtJQUNJQSwwQ0FBY0EsR0FBckJBLFVBQXNCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFNUlVLE1BQU1BLENBQUNBLEVBQUVBLENBQUNBO0lBQ1hBLENBQUNBO0lBRURWOztPQUVHQTtJQUNJQSw0Q0FBZ0JBLEdBQXZCQSxVQUF3QkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUvS1csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFRFg7Ozs7Ozs7T0FPR0E7SUFDSUEscUNBQVNBLEdBQWhCQSxVQUFpQkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtJQUc5RVksQ0FBQ0E7SUFFRFo7Ozs7Ozs7OztPQVNHQTtJQUNJQSwyQ0FBZUEsR0FBdEJBLFVBQXVCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLFVBQXlCQSxFQUFFQSxLQUFXQSxFQUFFQSxNQUFhQTtJQUc5SGEsQ0FBQ0E7SUFFRGI7Ozs7OztPQU1HQTtJQUNJQSx1Q0FBV0EsR0FBbEJBLFVBQW1CQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLEtBQVdBO0lBR2hGYyxDQUFDQTtJQUVEZDs7OztPQUlHQTtJQUNJQSxvREFBd0JBLEdBQS9CQTtRQUVDZSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxrQkFBa0JBLENBQUNBLGtCQUFrQkEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNuRkEsQ0FBQ0E7SUFFRGY7O09BRUdBO0lBQ0lBLG9DQUFRQSxHQUFmQSxVQUFnQkEsTUFBd0JBO0lBRXhDZ0IsQ0FBQ0E7SUFDRmhCLHdCQUFDQTtBQUFEQSxDQWpLQSxBQWlLQ0EsRUFqSytCLGNBQWMsRUFpSzdDO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5cbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RFdmVudFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9ldmVudHMvU2hhZGluZ01ldGhvZEV2ZW50XCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcblxuXG4vKipcbiAqIFNoYWRpbmdNZXRob2RCYXNlIHByb3ZpZGVzIGFuIGFic3RyYWN0IGJhc2UgbWV0aG9kIGZvciBzaGFkaW5nIG1ldGhvZHMsIHVzZWQgYnkgY29tcGlsZWQgcGFzc2VzIHRvIGNvbXBpbGVcbiAqIHRoZSBmaW5hbCBzaGFkaW5nIHByb2dyYW0uXG4gKi9cbmNsYXNzIFNoYWRpbmdNZXRob2RCYXNlIGV4dGVuZHMgTmFtZWRBc3NldEJhc2Vcbntcblx0cHVibGljIF9wYXNzZXM6QXJyYXk8TWF0ZXJpYWxQYXNzQmFzZT47IC8vIHNob3VsZCBiZSBwcm90ZWN0ZWRcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IFNoYWRpbmdNZXRob2RCYXNlIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgaUlzVXNlZChzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgZm9yIGEgTWV0aG9kVk8sIGluY2x1ZGluZyByZWdpc3RlciBhbmQgdGV4dHVyZSBpbmRpY2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpSW5pdFZPKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTylcblx0e1xuXG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdW5jaGFuZ2luZyBzaGFkZXIgY29uc3RhbnRzIHVzaW5nIHRoZSBkYXRhIGZyb20gYSBNZXRob2RWTy5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZFZPIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICpcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRDb25zdGFudHMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cblxuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIG1ldGhvZCBleHBlY3RzIG5vcm1hbHMgaW4gdGFuZ2VudCBzcGFjZS4gT3ZlcnJpZGUgZm9yIG9iamVjdC1zcGFjZSBub3JtYWxzLlxuXHQgKi9cblx0cHVibGljIGlVc2VzVGFuZ2VudFNwYWNlKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQW55IHBhc3NlcyByZXF1aXJlZCB0aGF0IHJlbmRlciB0byBhIHRleHR1cmUgdXNlZCBieSB0aGlzIG1ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgcGFzc2VzKCk6QXJyYXk8TWF0ZXJpYWxQYXNzQmFzZT5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9wYXNzZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY3VycmVudCBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgY29tcGlsYXRpb24gc3RhdGUgb2YgdGhlIG1ldGhvZC5cblx0ICpcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaVJlc2V0KClcblx0e1xuXHRcdHRoaXMuaUNsZWFuQ29tcGlsYXRpb25EYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBtZXRob2QncyBzdGF0ZSBmb3IgY29tcGlsYXRpb24uXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZlcnRleCBzaGFkZXIgY29kZSBmb3IgdGhpcyBtZXRob2QuXG5cdCAqIEBwYXJhbSB2byBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSByZWdDYWNoZSBUaGUgcmVnaXN0ZXIgY2FjaGUgdXNlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgcmVuZGVyIHN0YXRlIGZvciB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZFZPIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHN0YWdlIFRoZSBTdGFnZSBvYmplY3QgY3VycmVudGx5IHVzZWQgZm9yIHJlbmRlcmluZy5cblx0ICpcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHJlbmRlciBzdGF0ZSBmb3IgYSBzaW5nbGUgcmVuZGVyYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHZvIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHJlbmRlcmFibGUgVGhlIHJlbmRlcmFibGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkLlxuXHQgKiBAcGFyYW0gc3RhZ2UgVGhlIFN0YWdlIG9iamVjdCBjdXJyZW50bHkgdXNlZCBmb3IgcmVuZGVyaW5nLlxuXHQgKiBAcGFyYW0gY2FtZXJhIFRoZSBjYW1lcmEgZnJvbSB3aGljaCB0aGUgc2NlbmUgaXMgY3VycmVudGx5IHJlbmRlcmVkLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpU2V0UmVuZGVyU3RhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIHRoZSByZW5kZXIgc3RhdGUgZm9yIHRoaXMgbWV0aG9kLlxuXHQgKiBAcGFyYW0gdm8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gc3RhZ2UgVGhlIFN0YWdlIG9iamVjdCBjdXJyZW50bHkgdXNlZCBmb3IgcmVuZGVyaW5nLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpRGVhY3RpdmF0ZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBNYXJrcyB0aGUgc2hhZGVyIHByb2dyYW0gYXMgaW52YWxpZCwgc28gaXQgd2lsbCBiZSByZWNvbXBpbGVkIGJlZm9yZSB0aGUgbmV4dCByZW5kZXIuXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlJbnZhbGlkYXRlU2hhZGVyUHJvZ3JhbSgpXG5cdHtcblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFNoYWRpbmdNZXRob2RFdmVudChTaGFkaW5nTWV0aG9kRXZlbnQuU0hBREVSX0lOVkFMSURBVEVEKSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29waWVzIHRoZSBzdGF0ZSBmcm9tIGEgU2hhZGluZ01ldGhvZEJhc2Ugb2JqZWN0IGludG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNvcHlGcm9tKG1ldGhvZDpTaGFkaW5nTWV0aG9kQmFzZSlcblx0e1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRpbmdNZXRob2RCYXNlOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkaW5nbWV0aG9kYmFzZS50cyJdLCJuYW1lcyI6WyJTaGFkaW5nTWV0aG9kQmFzZSIsIlNoYWRpbmdNZXRob2RCYXNlLmNvbnN0cnVjdG9yIiwiU2hhZGluZ01ldGhvZEJhc2UuaUlzVXNlZCIsIlNoYWRpbmdNZXRob2RCYXNlLmlJbml0Vk8iLCJTaGFkaW5nTWV0aG9kQmFzZS5pSW5pdENvbnN0YW50cyIsIlNoYWRpbmdNZXRob2RCYXNlLmlVc2VzVGFuZ2VudFNwYWNlIiwiU2hhZGluZ01ldGhvZEJhc2UucGFzc2VzIiwiU2hhZGluZ01ldGhvZEJhc2UuZGlzcG9zZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlSZXNldCIsIlNoYWRpbmdNZXRob2RCYXNlLmlDbGVhbkNvbXBpbGF0aW9uRGF0YSIsIlNoYWRpbmdNZXRob2RCYXNlLmlHZXRWZXJ0ZXhDb2RlIiwiU2hhZGluZ01ldGhvZEJhc2UuaUdldEZyYWdtZW50Q29kZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlBY3RpdmF0ZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlTZXRSZW5kZXJTdGF0ZSIsIlNoYWRpbmdNZXRob2RCYXNlLmlEZWFjdGl2YXRlIiwiU2hhZGluZ01ldGhvZEJhc2UuaUludmFsaWRhdGVTaGFkZXJQcm9ncmFtIiwiU2hhZGluZ01ldGhvZEJhc2UuY29weUZyb20iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sY0FBYyxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFNN0UsSUFBTyxrQkFBa0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBU3RGLEFBSUE7OztHQURHO0lBQ0csaUJBQWlCO0lBQVNBLFVBQTFCQSxpQkFBaUJBLFVBQXVCQTtJQUk3Q0E7O09BRUdBO0lBQ0hBLFNBUEtBLGlCQUFpQkE7UUFTckJDLGlCQUFPQSxDQUFDQTtJQUNUQSxDQUFDQTtJQUVNRCxtQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUVERjs7Ozs7O09BTUdBO0lBQ0lBLG1DQUFPQSxHQUFkQSxVQUFlQSxZQUE2QkEsRUFBRUEsUUFBaUJBO0lBRy9ERyxDQUFDQTtJQUVESDs7Ozs7O09BTUdBO0lBQ0lBLDBDQUFjQSxHQUFyQkEsVUFBc0JBLFlBQTZCQSxFQUFFQSxRQUFpQkE7SUFJdEVJLENBQUNBO0lBRURKOztPQUVHQTtJQUNJQSw2Q0FBaUJBLEdBQXhCQTtRQUVDSyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUtETCxzQkFBV0EscUNBQU1BO1FBSGpCQTs7V0FFR0E7YUFDSEE7WUFFQ00sTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDckJBLENBQUNBOzs7T0FBQU47SUFFREE7O09BRUdBO0lBQ0lBLG1DQUFPQSxHQUFkQTtJQUdBTyxDQUFDQTtJQUVEUDs7OztPQUlHQTtJQUNJQSxrQ0FBTUEsR0FBYkE7UUFFQ1EsSUFBSUEsQ0FBQ0EscUJBQXFCQSxFQUFFQSxDQUFDQTtJQUM5QkEsQ0FBQ0E7SUFFRFI7Ozs7T0FJR0E7SUFDSUEsaURBQXFCQSxHQUE1QkE7SUFFQVMsQ0FBQ0E7SUFFRFQ7Ozs7OztPQU1HQTtJQUNJQSwwQ0FBY0EsR0FBckJBLFVBQXNCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFNUlVLE1BQU1BLENBQUNBLEVBQUVBLENBQUNBO0lBQ1hBLENBQUNBO0lBRURWOztPQUVHQTtJQUNJQSw0Q0FBZ0JBLEdBQXZCQSxVQUF3QkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUvS1csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFRFg7Ozs7Ozs7T0FPR0E7SUFDSUEscUNBQVNBLEdBQWhCQSxVQUFpQkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtJQUc5RVksQ0FBQ0E7SUFFRFo7Ozs7Ozs7OztPQVNHQTtJQUNJQSwyQ0FBZUEsR0FBdEJBLFVBQXVCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLFVBQXlCQSxFQUFFQSxLQUFXQSxFQUFFQSxNQUFhQTtJQUc5SGEsQ0FBQ0E7SUFFRGI7Ozs7OztPQU1HQTtJQUNJQSx1Q0FBV0EsR0FBbEJBLFVBQW1CQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLEtBQVdBO0lBR2hGYyxDQUFDQTtJQUVEZDs7OztPQUlHQTtJQUNJQSxvREFBd0JBLEdBQS9CQTtRQUVDZSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxrQkFBa0JBLENBQUNBLGtCQUFrQkEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNuRkEsQ0FBQ0E7SUFFRGY7O09BRUdBO0lBQ0lBLG9DQUFRQSxHQUFmQSxVQUFnQkEsTUFBd0JBO0lBRXhDZ0IsQ0FBQ0E7SUFDRmhCLHdCQUFDQTtBQUFEQSxDQWpLQSxBQWlLQ0EsRUFqSytCLGNBQWMsRUFpSzdDO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5cbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgU2hhZGluZ01ldGhvZEV2ZW50XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2V2ZW50cy9TaGFkaW5nTWV0aG9kRXZlbnRcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuXG5cbi8qKlxuICogU2hhZGluZ01ldGhvZEJhc2UgcHJvdmlkZXMgYW4gYWJzdHJhY3QgYmFzZSBtZXRob2QgZm9yIHNoYWRpbmcgbWV0aG9kcywgdXNlZCBieSBjb21waWxlZCBwYXNzZXMgdG8gY29tcGlsZVxuICogdGhlIGZpbmFsIHNoYWRpbmcgcHJvZ3JhbS5cbiAqL1xuY2xhc3MgU2hhZGluZ01ldGhvZEJhc2UgZXh0ZW5kcyBOYW1lZEFzc2V0QmFzZVxue1xuXHRwdWJsaWMgX3Bhc3NlczpBcnJheTxNYXRlcmlhbFBhc3NCYXNlPjsgLy8gc2hvdWxkIGJlIHByb3RlY3RlZFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBuZXcgU2hhZGluZ01ldGhvZEJhc2Ugb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBpSXNVc2VkKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBmb3IgYSBNZXRob2RWTywgaW5jbHVkaW5nIHJlZ2lzdGVyIGFuZCB0ZXh0dXJlIGluZGljZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRob2RWTyBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlJbml0Vk8oc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB1bmNoYW5naW5nIHNoYWRlciBjb25zdGFudHMgdXNpbmcgdGhlIGRhdGEgZnJvbSBhIE1ldGhvZFZPLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpSW5pdENvbnN0YW50cyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblxuXG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgbWV0aG9kIGV4cGVjdHMgbm9ybWFscyBpbiB0YW5nZW50IHNwYWNlLiBPdmVycmlkZSBmb3Igb2JqZWN0LXNwYWNlIG5vcm1hbHMuXG5cdCAqL1xuXHRwdWJsaWMgaVVzZXNUYW5nZW50U3BhY2UoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbnkgcGFzc2VzIHJlcXVpcmVkIHRoYXQgcmVuZGVyIHRvIGEgdGV4dHVyZSB1c2VkIGJ5IHRoaXMgbWV0aG9kLlxuXHQgKi9cblx0cHVibGljIGdldCBwYXNzZXMoKTpBcnJheTxNYXRlcmlhbFBhc3NCYXNlPlxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Bhc3Nlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhbnMgdXAgYW55IHJlc291cmNlcyB1c2VkIGJ5IHRoZSBjdXJyZW50IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBjb21waWxhdGlvbiBzdGF0ZSBvZiB0aGUgbWV0aG9kLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpUmVzZXQoKVxuXHR7XG5cdFx0dGhpcy5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIG1ldGhvZCdzIHN0YXRlIGZvciBjb21waWxhdGlvbi5cblx0ICpcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaUNsZWFuQ29tcGlsYXRpb25EYXRhKClcblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgdmVydGV4IHNoYWRlciBjb2RlIGZvciB0aGlzIG1ldGhvZC5cblx0ICogQHBhcmFtIHZvIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHJlZ0NhY2hlIFRoZSByZWdpc3RlciBjYWNoZSB1c2VkIGR1cmluZyB0aGUgY29tcGlsYXRpb24uXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSByZW5kZXIgc3RhdGUgZm9yIHRoaXMgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gc3RhZ2UgVGhlIFN0YWdlIG9iamVjdCBjdXJyZW50bHkgdXNlZCBmb3IgcmVuZGVyaW5nLlxuXHQgKlxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpQWN0aXZhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCBzdGFnZTpTdGFnZSlcblx0e1xuXG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgcmVuZGVyIHN0YXRlIGZvciBhIHNpbmdsZSByZW5kZXJhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gdm8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVuZGVyYWJsZSBUaGUgcmVuZGVyYWJsZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IGN1cnJlbnRseSB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSBmcm9tIHdoaWNoIHRoZSBzY2VuZSBpcyBjdXJyZW50bHkgcmVuZGVyZWQuXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlTZXRSZW5kZXJTdGF0ZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHJlbmRlciBzdGF0ZSBmb3IgdGhpcyBtZXRob2QuXG5cdCAqIEBwYXJhbSB2byBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IGN1cnJlbnRseSB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlEZWFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblxuXHR9XG5cblx0LyoqXG5cdCAqIE1hcmtzIHRoZSBzaGFkZXIgcHJvZ3JhbSBhcyBpbnZhbGlkLCBzbyBpdCB3aWxsIGJlIHJlY29tcGlsZWQgYmVmb3JlIHRoZSBuZXh0IHJlbmRlci5cblx0ICpcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgaUludmFsaWRhdGVTaGFkZXJQcm9ncmFtKClcblx0e1xuXHRcdHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgU2hhZGluZ01ldGhvZEV2ZW50KFNoYWRpbmdNZXRob2RFdmVudC5TSEFERVJfSU5WQUxJREFURUQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb3BpZXMgdGhlIHN0YXRlIGZyb20gYSBTaGFkaW5nTWV0aG9kQmFzZSBvYmplY3QgaW50byB0aGUgY3VycmVudCBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cdH1cbn1cblxuZXhwb3J0ID0gU2hhZGluZ01ldGhvZEJhc2U7Il19 \ No newline at end of file diff --git a/lib/materials/methods/ShadingMethodBase.ts b/lib/materials/methods/ShadingMethodBase.ts index 616ba48e..321c4b4f 100644 --- a/lib/materials/methods/ShadingMethodBase.ts +++ b/lib/materials/methods/ShadingMethodBase.ts @@ -2,8 +2,8 @@ import NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); diff --git a/lib/materials/methods/ShadowHardMethod.js b/lib/materials/methods/ShadowHardMethod.js index f57005c2..0fcfe596 100755 --- a/lib/materials/methods/ShadowHardMethod.js +++ b/lib/materials/methods/ShadowHardMethod.js @@ -65,4 +65,4 @@ var ShadowHardMethod = (function (_super) { })(ShadowMethodBase); module.exports = ShadowHardMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkb3doYXJkbWV0aG9kLnRzIl0sIm5hbWVzIjpbIlNoYWRvd0hhcmRNZXRob2QiLCJTaGFkb3dIYXJkTWV0aG9kLmNvbnN0cnVjdG9yIiwiU2hhZG93SGFyZE1ldGhvZC5fcEdldFBsYW5hckZyYWdtZW50Q29kZSIsIlNoYWRvd0hhcmRNZXRob2QuX3BHZXRQb2ludEZyYWdtZW50Q29kZSIsIlNoYWRvd0hhcmRNZXRob2QuX2lHZXRDYXNjYWRlRnJhZ21lbnRDb2RlIiwiU2hhZG93SGFyZE1ldGhvZC5pQWN0aXZhdGVGb3JDYXNjYWRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFPLGdCQUFnQixXQUFjLHVEQUF1RCxDQUFDLENBQUM7QUFFOUYsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUF5QkE7SUFFOUNBOztPQUVHQTtJQUNIQSxTQUxLQSxnQkFBZ0JBLENBS1RBLFlBQXNCQTtRQUVqQ0Msa0JBQU1BLFlBQVlBLENBQUNBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUVERDs7T0FFR0E7SUFDSUEsa0RBQXVCQSxHQUE5QkEsVUFBK0JBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsUUFBNEJBLEVBQUVBLGVBQWtDQTtRQUVsSkUsSUFBSUEsZ0JBQWdCQSxHQUF5QkEsUUFBUUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUMxRUEsSUFBSUEsTUFBTUEsR0FBeUJBLFFBQVFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFFdEVBLEFBQ0FBLDZDQUQ2Q0E7WUFDekNBLE9BQU9BLEdBQXlCQSxRQUFRQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRXZFQSxJQUFJQSxRQUFRQSxHQUF5QkEsUUFBUUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxDQUFDQTtRQUMxRUEsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLFFB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QUdBLGNBQWNBLEdBQUdBLE1BQU1BLEVBQUVBLGlCQUFpQkE7UUFFOUZBLFFBQVFBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0E7UUFFakRBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURIOztPQUVHQTtJQUNJQSxtREFBd0JBLEdBQS9CQSxVQUFnQ0EsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxjQUFvQ0EsRUFBRUEsWUFBa0NBLEVBQUVBLGVBQXFDQSxFQUFFQSxjQUFvQ0EsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUU3U0ksSUFBSUEsSUFBSUEsR0FBeUJBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDM0VBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLEdBQUdBLGVBQWVBLEdBQUdBLElBQUlBLEdBQUdBLFlBQVlBLEdBQUdBLHlCQUF5QkEsR0FDOUZBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLEdBQUdBLGNBQWNBLEdBQUdBLElBQUlBLEdBQzVEQSxNQUFNQSxHQUFHQSxjQUFjQSxHQUFHQSxNQUFNQSxHQUFHQSxlQUFlQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxFQUFFQSxpQkFBaUJBO0lBQ2hHQSxDQUFDQSxHQUQ2RUE7SUFHOUVKOztPQUVHQTtJQUNJQSw4Q0FBbUJBLEdBQTFCQSxVQUEyQkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtJQUV4RkssQ0FBQ0E7SUFDRkwsdUJBQUNBO0FBQURBLENBcEZBLEFBb0ZDQSxFQXBGOEIsZ0JBQWdCLEVBb0Y5QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9TaGFkb3dIYXJkTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWdodEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGlnaHRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgU2hhZG93TWV0aG9kQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRvd01ldGhvZEJhc2VcIik7XG5cbi8qKlxuICogU2hhZG93SGFyZE1ldGhvZCBwcm92aWRlcyB0aGUgY2hlYXBlc3Qgc2hhZG93IG1hcCBtZXRob2QgYnkgdXNpbmcgYSBzaW5nbGUgdGFwIHdpdGhvdXQgYW55IGZpbHRlcmluZy5cbiAqL1xuY2xhc3MgU2hhZG93SGFyZE1ldGhvZCBleHRlbmRzIFNoYWRvd01ldGhvZEJhc2Vcbntcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgU2hhZG93SGFyZE1ldGhvZCBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihjYXN0aW5nTGlnaHQ6TGlnaHRCYXNlKVxuXHR7XG5cdFx0c3VwZXIoY2FzdGluZ0xpZ2h0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9wR2V0UGxhbmFyRnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBkZXB0aE1hcFJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0dmFyIGRlY1JlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXG5cdFx0Ly8gbmVlZHMgdG8gYmUgcmVzZXJ2ZWQgYW55d2F5LiBETyBOT1QgUkVNT1ZFXG5cdFx0dmFyIGRhdGFSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdHZhciBkZXB0aENvbDpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBkZWNSZWcuaW5kZXgqNDtcblx0XHRtZXRob2RWTy50ZXh0dXJlc0luZGV4ID0gZGVwdGhNYXBSZWdpc3Rlci5pbmRleDtcblxuXHRcdGNvZGUgKz0gXCJ0ZXggXCIgKyBkZXB0aENvbCArIFwiLCBcIiArIHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnICsgXCIsIFwiICsgZGVwdGhNYXBSZWdpc3RlciArIFwiIDwyZCwgbmVhcmVzdCwgY2xhbXA+XFxuXCIgK1xuXHRcdFx0XCJkcDQgXCIgKyBkZXB0aENvbCArIFwiLnosIFwiICsgZGVwdGhDb2wgKyBcIiwgXCIgKyBkZWNSZWcgKyBcIlxcblwiICtcblx0XHRcdFwic2x0IFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyArIFwiLnosIFwiICsgZGVwdGhDb2wgKyBcIi56XFxuXCI7IC8vIDAgaWYgaW4gc2hhZG93XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9wR2V0UG9pbnRGcmFnbWVudENvZGUobWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ0NhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGRlcHRoTWFwUmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblx0XHR2YXIgZGVjUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0dmFyIGVwc1JlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdHZhciBwb3NSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgZGVwdGhTYW1wbGVDb2w6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHJlZ0NhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyhkZXB0aFNhbXBsZUNvbCwgMSk7XG5cdFx0dmFyIGxpZ2h0RGlyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXG5cdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGRlY1JlZy5pbmRleCo0O1xuXHRcdG1ldGhvZFZPLnRleHR1cmVzSW5kZXggPSBkZXB0aE1hcFJlZ2lzdGVyLmluZGV4O1xuXG5cdFx0Y29kZSArPSBcInN1YiBcIiArIGxpZ2h0RGlyICsgXCIsIFwiICsgc2hhcmVkUmVnaXN0ZXJzLmdsb2JhbFBvc2l0aW9uVmFyeWluZyArIFwiLCBcIiArIHBvc1JlZyArIFwiXFxuXCIgK1xuXHRcdFx0XCJkcDMgXCIgKyBsaWdodERpciArIFwiLncsIFwiICsgbGlnaHREaXIgKyBcIi54eXosIFwiICsgbGlnaHREaXIgKyBcIi54eXpcXG5cIiArXG5cdFx0XHRcIm11bCBcIiArIGxpZ2h0RGlyICsgXCIudywgXCIgKyBsaWdodERpciArIFwiLncsIFwiICsgcG9zUmVnICsgXCIud1xcblwiICtcblx0XHRcdFwibnJtIFwiICsgbGlnaHREaXIgKyBcIi54eXosIFwiICsgbGlnaHREaXIgKyBcIi54eXpcXG5cIiArXG5cblx0XHRcdFwidGV4IFwiICsgZGVwdGhTYW1wbGVDb2wgKyBcIiwgXCIgKyBsaWdodERpciArIFwiLCBcIiArIGRlcHRoTWFwUmVnaXN0ZXIgKyBcIiA8Y3ViZSwgbmVhcmVzdCwgY2xhbXA+XFxuXCIgK1xuXHRcdFx0XCJkcDQgXCIgKyBkZXB0aFNhbXBsZUNvbCArIFwiLnosIFwiICsgZGVwdGhTYW1wbGVDb2wgKyBcIiwgXCIgKyBkZWNSZWcgKyBcIlxcblwiICtcblx0XHRcdFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyBsaWdodERpciArIFwiLncsIFwiICsgZXBzUmVnICsgXCIueFxcblwiICsgICAgLy8gb2Zmc2V0IGJ5IGVwc2lsb25cblxuXHRcdFx0XCJzbHQgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgZGVwdGhTYW1wbGVDb2wgKyBcIi56XFxuXCI7IC8vIDAgaWYgaW4gc2hhZG93XG5cblx0XHRyZWdDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZShkZXB0aFNhbXBsZUNvbCk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0Q2FzY2FkZUZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIGRlY29kZVJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgZGVwdGhUZXh0dXJlOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgZGVwdGhQcm9qZWN0aW9uOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgdGFyZ2V0UmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIHRlbXA6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmV0dXJuIFwidGV4IFwiICsgdGVtcCArIFwiLCBcIiArIGRlcHRoUHJvamVjdGlvbiArIFwiLCBcIiArIGRlcHRoVGV4dHVyZSArIFwiIDwyZCwgbmVhcmVzdCwgY2xhbXA+XFxuXCIgK1xuXHRcdFx0XCJkcDQgXCIgKyB0ZW1wICsgXCIueiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgZGVjb2RlUmVnaXN0ZXIgKyBcIlxcblwiICtcblx0XHRcdFwic2x0IFwiICsgdGFyZ2V0UmVnaXN0ZXIgKyBcIi53LCBcIiArIGRlcHRoUHJvamVjdGlvbiArIFwiLnosIFwiICsgdGVtcCArIFwiLnpcXG5cIjsgLy8gMCBpZiBpbiBzaGFkb3dcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlBY3RpdmF0ZUZvckNhc2NhZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCBzdGFnZTpTdGFnZSlcblx0e1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRvd0hhcmRNZXRob2Q7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkb3doYXJkbWV0aG9kLnRzIl0sIm5hbWVzIjpbIlNoYWRvd0hhcmRNZXRob2QiLCJTaGFkb3dIYXJkTWV0aG9kLmNvbnN0cnVjdG9yIiwiU2hhZG93SGFyZE1ldGhvZC5fcEdldFBsYW5hckZyYWdtZW50Q29kZSIsIlNoYWRvd0hhcmRNZXRob2QuX3BHZXRQb2ludEZyYWdtZW50Q29kZSIsIlNoYWRvd0hhcmRNZXRob2QuX2lHZXRDYXNjYWRlRnJhZ21lbnRDb2RlIiwiU2hhZG93SGFyZE1ldGhvZC5pQWN0aXZhdGVGb3JDYXNjYWRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFPLGdCQUFnQixXQUFjLHVEQUF1RCxDQUFDLENBQUM7QUFFOUYsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUF5QkE7SUFFOUNBOztPQUVHQTtJQUNIQSxTQUxLQSxnQkFBZ0JBLENBS1RBLFlBQXNCQTtRQUVqQ0Msa0JBQU1BLFlBQVlBLENBQUNBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUVERDs7T0FFR0E7SUFDSUEsa0RBQXVCQSxHQUE5QkEsVUFBK0JBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsUUFBNEJBLEVBQUVBLGVBQWtDQTtRQUVsSkUsSUFBSUEsZ0JBQWdCQSxHQUF5QkEsUUFBUUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUMxRUEsSUFBSUEsTUFBTUEsR0FBeUJBLFFBQVFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFFdEVBLEFBQ0FBLDZDQUQ2Q0E7WUFDekNBLE9BQU9BLEdBQXlCQSxRQUFRQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRXZFQSxJQUFJQSxRQUFRQSxHQUF5QkEsUUFBUUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxDQUFDQTtRQUMxRUEsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLFFB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QUdBLGNBQWNBLEdBQUdBLE1BQU1BLEVBQUVBLGlCQUFpQkE7UUFFOUZBLFFBQVFBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0E7UUFFakRBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURIOztPQUVHQTtJQUNJQSxtREFBd0JBLEdBQS9CQSxVQUFnQ0EsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxjQUFvQ0EsRUFBRUEsWUFBa0NBLEVBQUVBLGVBQXFDQSxFQUFFQSxjQUFvQ0EsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUU3U0ksSUFBSUEsSUFBSUEsR0FBeUJBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDM0VBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLEdBQUdBLGVBQWVBLEdBQUdBLElBQUlBLEdBQUdBLFlBQVlBLEdBQUdBLHlCQUF5QkEsR0FDOUZBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLElBQUlBLEdBQUdBLGNBQWNBLEdBQUdBLElBQUlBLEdBQzVEQSxNQUFNQSxHQUFHQSxjQUFjQSxHQUFHQSxNQUFNQSxHQUFHQSxlQUFlQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxHQUFHQSxNQUFNQSxFQUFFQSxpQkFBaUJBO0lBQ2hHQSxDQUFDQSxHQUQ2RUE7SUFHOUVKOztPQUVHQTtJQUNJQSw4Q0FBbUJBLEdBQTFCQSxVQUEyQkEsWUFBNkJBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtJQUV4RkssQ0FBQ0E7SUFDRkwsdUJBQUNBO0FBQURBLENBcEZBLEFBb0ZDQSxFQXBGOEIsZ0JBQWdCLEVBb0Y5QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvbWV0aG9kcy9TaGFkb3dIYXJkTWV0aG9kLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWdodEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGlnaHRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IFNoYWRvd01ldGhvZEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TaGFkb3dNZXRob2RCYXNlXCIpO1xuXG4vKipcbiAqIFNoYWRvd0hhcmRNZXRob2QgcHJvdmlkZXMgdGhlIGNoZWFwZXN0IHNoYWRvdyBtYXAgbWV0aG9kIGJ5IHVzaW5nIGEgc2luZ2xlIHRhcCB3aXRob3V0IGFueSBmaWx0ZXJpbmcuXG4gKi9cbmNsYXNzIFNoYWRvd0hhcmRNZXRob2QgZXh0ZW5kcyBTaGFkb3dNZXRob2RCYXNlXG57XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNoYWRvd0hhcmRNZXRob2Qgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FzdGluZ0xpZ2h0OkxpZ2h0QmFzZSlcblx0e1xuXHRcdHN1cGVyKGNhc3RpbmdMaWdodCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfcEdldFBsYW5hckZyYWdtZW50Q29kZShtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgZGVwdGhNYXBSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXHRcdHZhciBkZWNSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdC8vIG5lZWRzIHRvIGJlIHJlc2VydmVkIGFueXdheS4gRE8gTk9UIFJFTU9WRVxuXHRcdHZhciBkYXRhUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHR2YXIgZGVwdGhDb2w6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHRtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4ID0gZGVjUmVnLmluZGV4KjQ7XG5cdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IGRlcHRoTWFwUmVnaXN0ZXIuaW5kZXg7XG5cblx0XHRjb2RlICs9IFwidGV4IFwiICsgZGVwdGhDb2wgKyBcIiwgXCIgKyB0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyArIFwiLCBcIiArIGRlcHRoTWFwUmVnaXN0ZXIgKyBcIiA8MmQsIG5lYXJlc3QsIGNsYW1wPlxcblwiICtcblx0XHRcdFwiZHA0IFwiICsgZGVwdGhDb2wgKyBcIi56LCBcIiArIGRlcHRoQ29sICsgXCIsIFwiICsgZGVjUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcInNsdCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgdGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgKyBcIi56LCBcIiArIGRlcHRoQ29sICsgXCIuelxcblwiOyAvLyAwIGlmIGluIHNoYWRvd1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfcEdldFBvaW50RnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBkZXB0aE1hcFJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0dmFyIGRlY1JlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdHZhciBlcHNSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgcG9zUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0dmFyIGRlcHRoU2FtcGxlQ29sOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXMoZGVwdGhTYW1wbGVDb2wsIDEpO1xuXHRcdHZhciBsaWdodERpcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBkZWNSZWcuaW5kZXgqNDtcblx0XHRtZXRob2RWTy50ZXh0dXJlc0luZGV4ID0gZGVwdGhNYXBSZWdpc3Rlci5pbmRleDtcblxuXHRcdGNvZGUgKz0gXCJzdWIgXCIgKyBsaWdodERpciArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZhcnlpbmcgKyBcIiwgXCIgKyBwb3NSZWcgKyBcIlxcblwiICtcblx0XHRcdFwiZHAzIFwiICsgbGlnaHREaXIgKyBcIi53LCBcIiArIGxpZ2h0RGlyICsgXCIueHl6LCBcIiArIGxpZ2h0RGlyICsgXCIueHl6XFxuXCIgK1xuXHRcdFx0XCJtdWwgXCIgKyBsaWdodERpciArIFwiLncsIFwiICsgbGlnaHREaXIgKyBcIi53LCBcIiArIHBvc1JlZyArIFwiLndcXG5cIiArXG5cdFx0XHRcIm5ybSBcIiArIGxpZ2h0RGlyICsgXCIueHl6LCBcIiArIGxpZ2h0RGlyICsgXCIueHl6XFxuXCIgK1xuXG5cdFx0XHRcInRleCBcIiArIGRlcHRoU2FtcGxlQ29sICsgXCIsIFwiICsgbGlnaHREaXIgKyBcIiwgXCIgKyBkZXB0aE1hcFJlZ2lzdGVyICsgXCIgPGN1YmUsIG5lYXJlc3QsIGNsYW1wPlxcblwiICtcblx0XHRcdFwiZHA0IFwiICsgZGVwdGhTYW1wbGVDb2wgKyBcIi56LCBcIiArIGRlcHRoU2FtcGxlQ29sICsgXCIsIFwiICsgZGVjUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcImFkZCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgbGlnaHREaXIgKyBcIi53LCBcIiArIGVwc1JlZyArIFwiLnhcXG5cIiArICAgIC8vIG9mZnNldCBieSBlcHNpbG9uXG5cblx0XHRcdFwic2x0IFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIGRlcHRoU2FtcGxlQ29sICsgXCIuelxcblwiOyAvLyAwIGlmIGluIHNoYWRvd1xuXG5cdFx0cmVnQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UoZGVwdGhTYW1wbGVDb2wpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldENhc2NhZGVGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCBkZWNvZGVSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIGRlcHRoVGV4dHVyZTpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIGRlcHRoUHJvamVjdGlvbjpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHRhcmdldFJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciB0ZW1wOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHJldHVybiBcInRleCBcIiArIHRlbXAgKyBcIiwgXCIgKyBkZXB0aFByb2plY3Rpb24gKyBcIiwgXCIgKyBkZXB0aFRleHR1cmUgKyBcIiA8MmQsIG5lYXJlc3QsIGNsYW1wPlxcblwiICtcblx0XHRcdFwiZHA0IFwiICsgdGVtcCArIFwiLnosIFwiICsgdGVtcCArIFwiLCBcIiArIGRlY29kZVJlZ2lzdGVyICsgXCJcXG5cIiArXG5cdFx0XHRcInNsdCBcIiArIHRhcmdldFJlZ2lzdGVyICsgXCIudywgXCIgKyBkZXB0aFByb2plY3Rpb24gKyBcIi56LCBcIiArIHRlbXAgKyBcIi56XFxuXCI7IC8vIDAgaWYgaW4gc2hhZG93XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpQWN0aXZhdGVGb3JDYXNjYWRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0fVxufVxuXG5leHBvcnQgPSBTaGFkb3dIYXJkTWV0aG9kOyJdfQ== \ No newline at end of file diff --git a/lib/materials/methods/ShadowHardMethod.ts b/lib/materials/methods/ShadowHardMethod.ts index 5629907e..9121a9b2 100644 --- a/lib/materials/methods/ShadowHardMethod.ts +++ b/lib/materials/methods/ShadowHardMethod.ts @@ -1,6 +1,6 @@ import LightBase = require("awayjs-display/lib/base/LightBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/methods/ShadowMethodBase.js b/lib/materials/methods/ShadowMethodBase.js index 3281a56b..323b5e2c 100755 --- a/lib/materials/methods/ShadowMethodBase.js +++ b/lib/materials/methods/ShadowMethodBase.js @@ -198,4 +198,4 @@ var ShadowMethodBase = (function (_super) { })(ShadowMapMethodBase); module.exports = ShadowMethodBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkb3dtZXRob2RiYXNlLnRzIl0sIm5hbWVzIjpbIlNoYWRvd01ldGhvZEJhc2UiLCJTaGFkb3dNZXRob2RCYXNlLmNvbnN0cnVjdG9yIiwiU2hhZG93TWV0aG9kQmFzZS5pSW5pdFZPIiwiU2hhZG93TWV0aG9kQmFzZS5pSW5pdENvbnN0YW50cyIsIlNoYWRvd01ldGhvZEJhc2UuX2lEZXB0aE1hcENvb3JkUmVnIiwiU2hhZG93TWV0aG9kQmFzZS5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJTaGFkb3dNZXRob2RCYXNlLmlHZXRWZXJ0ZXhDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5fcEdldFBvaW50VmVydGV4Q29kZSIsIlNoYWRvd01ldGhvZEJhc2UucEdldFBsYW5hclZlcnRleENvZGUiLCJTaGFkb3dNZXRob2RCYXNlLmlHZXRGcmFnbWVudENvZGUiLCJTaGFkb3dNZXRob2RCYXNlLl9wR2V0UGxhbmFyRnJhZ21lbnRDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5fcEdldFBvaW50RnJhZ21lbnRDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5pU2V0UmVuZGVyU3RhdGUiLCJTaGFkb3dNZXRob2RCYXNlLl9pR2V0Q2FzY2FkZUZyYWdtZW50Q29kZSIsIlNoYWRvd01ldGhvZEJhc2UuaUFjdGl2YXRlIiwiU2hhZG93TWV0aG9kQmFzZS5pQWN0aXZhdGVGb3JDYXNjYWRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFPLG1CQUFtQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFPckYsSUFBTyxVQUFVLFdBQWUsd0NBQXdDLENBQUMsQ0FBQztBQVkxRSxJQUFPLG1CQUFtQixXQUFhLDBEQUEwRCxDQUFDLENBQUM7QUFFbkcsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUE0QkE7SUFLakRBOzs7T0FHR0E7SUFDSEEsU0FUS0EsZ0JBQWdCQSxDQVNUQSxZ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QTtJQUNySkEsQ0FBQ0E7SUFFRGQ7O09BRUdBO0lBQ0lBLDhDQUFtQkEsR0FBMUJBLFVBQTJCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLEtBQVdBO1FBRXZGZSxNQUFNQSxJQUFJQSxLQUFLQSxDQUFDQSx5REFBeURBLENBQUNBLENBQUNBO0lBQzVFQSxDQUFDQTtJQUNGZix1QkFBQ0E7QUFBREEsQ0FsT0EsQUFrT0NBLEVBbE84QixtQkFBbUIsRUFrT2pEO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NoYWRvd01ldGhvZEJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBMaWdodEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGlnaHRCYXNlXCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgUG9pbnRMaWdodFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvUG9pbnRMaWdodFwiKTtcbmltcG9ydCBEaXJlY3Rpb25hbFNoYWRvd01hcHBlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL3NoYWRvd21hcHBlcnMvRGlyZWN0aW9uYWxTaGFkb3dNYXBwZXJcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyTGlnaHRpbmdPYmplY3RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckxpZ2h0aW5nT2JqZWN0XCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBTaGFkb3dNYXBNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRvd01hcE1ldGhvZEJhc2VcIik7XG5cbi8qKlxuICogU2hhZG93TWV0aG9kQmFzZSBwcm92aWRlcyBhbiBhYnN0cmFjdCBtZXRob2QgZm9yIHNpbXBsZSAobm9uLXdyYXBwaW5nKSBzaGFkb3cgbWFwIG1ldGhvZHMuXG4gKi9cbmNsYXNzIFNoYWRvd01ldGhvZEJhc2UgZXh0ZW5kcyBTaGFkb3dNYXBNZXRob2RCYXNlXG57XG5cdHB1YmxpYyBfcERlcHRoTWFwQ29vcmRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRwdWJsaWMgX3BVc2VQb2ludDpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNoYWRvd01ldGhvZEJhc2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gY2FzdGluZ0xpZ2h0IFRoZSBsaWdodCB1c2VkIHRvIGNhc3Qgc2hhZG93cy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhc3RpbmdMaWdodDpMaWdodEJhc2UpXG5cdHtcblx0XHR0aGlzLl9wVXNlUG9pbnQgPSAoY2FzdGluZ0xpZ2h0IGluc3RhbmNlb2YgUG9pbnRMaWdodCk7XG5cblx0XHRzdXBlcihjYXN0aW5nTGlnaHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRWTyhzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ubmVlZHNWaWV3ID0gdHJ1ZTtcblx0XHRtZXRob2RWTy5uZWVkc0dsb2JhbFZlcnRleFBvcyA9IHRydWU7XG5cdFx0bWV0aG9kVk8ubmVlZHNHbG9iYWxGcmFnbWVudFBvcyA9IHRoaXMuX3BVc2VQb2ludDtcblx0XHRtZXRob2RWTy5uZWVkc05vcm1hbHMgPSBzaGFkZXJPYmplY3QubnVtTGlnaHRzID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlJbml0Q29uc3RhbnRzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTylcblx0e1xuXHRcdHZhciBmcmFnbWVudERhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblx0XHR2YXIgdmVydGV4RGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YTtcblx0XHR2YXIgaW5kZXg6bnVtYmVyIC8qaW50Ki8gPSBtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleF0gPSAxLjA7XG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgMV0gPSAxLzI1NS4wO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDJdID0gMS82NTAyNS4wO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDNdID0gMS8xNjU4MTM3NS4wO1xuXG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgNl0gPSAwO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDddID0gMTtcblxuXHRcdGlmICh0aGlzLl9wVXNlUG9pbnQpIHtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDhdID0gMDtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDldID0gMDtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDEwXSA9IDA7XG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyAxMV0gPSAxO1xuXHRcdH1cblxuXHRcdGluZGV4ID0gbWV0aG9kVk8udmVydGV4Q29uc3RhbnRzSW5kZXg7XG5cdFx0aWYgKGluZGV4ICE9IC0xKSB7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4XSA9IC41O1xuXHRcdFx0dmVydGV4RGF0YVtpbmRleCArIDFdID0gLjU7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4ICsgMl0gPSAwLjA7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4ICsgM10gPSAxLjA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdyYXBwZXJzIHRoYXQgb3ZlcnJpZGUgdGhlIHZlcnRleCBzaGFkZXIgbmVlZCB0byBzZXQgdGhpcyBleHBsaWNpdGx5XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pRGVwdGhNYXBDb29yZFJlZygpOlNoYWRlclJlZ2lzdGVyRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnO1xuXHR9XG5cblx0cHVibGljIHNldCBfaURlcHRoTWFwQ29vcmRSZWcodmFsdWU6U2hhZGVyUmVnaXN0ZXJFbGVtZW50KVxuXHR7XG5cdFx0dGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblxuXHRcdHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcFVzZVBvaW50PyB0aGlzLl9wR2V0UG9pbnRWZXJ0ZXhDb2RlKG1ldGhvZFZPLCByZWdDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTp0aGlzLnBHZXRQbGFuYXJWZXJ0ZXhDb2RlKG1ldGhvZFZPLCByZWdDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2ZXJ0ZXggY29kZSBmb3Igc2hhZG93IG1hcHBpbmcgd2l0aCBhIHBvaW50IGxpZ2h0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBfcEdldFBvaW50VmVydGV4Q29kZShtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRtZXRob2RWTy52ZXJ0ZXhDb25zdGFudHNJbmRleCA9IC0xO1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZlcnRleCBjb2RlIGZvciBzaGFkb3cgbWFwcGluZyB3aXRoIGEgcGxhbmFyIHNoYWRvdyBtYXAgKGZlOiBkaXJlY3Rpb25hbCBsaWdodHMpLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBwR2V0UGxhbmFyVmVydGV4Q29kZShtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0ZW1wOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVWZXJ0ZXhWZWN0b3JUZW1wKCk7XG5cdFx0dmFyIGRhdGFSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cdFx0dmFyIGRlcHRoTWFwUHJvajpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHR0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyA9IHJlZ0NhY2hlLmdldEZyZWVWYXJ5aW5nKCk7XG5cdFx0bWV0aG9kVk8udmVydGV4Q29uc3RhbnRzSW5kZXggPSBkYXRhUmVnLmluZGV4KjQ7XG5cblx0XHQvLyB0b2RvOiBjYW4gZXBzaWxvbiBiZSBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBmcmFnbWVudCBzaGFkZXI/XG5cblx0XHRjb2RlICs9IFwibTQ0IFwiICsgdGVtcCArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZlcnRleCArIFwiLCBcIiArIGRlcHRoTWFwUHJvaiArIFwiXFxuXCIgKyBcImRpdiBcIiArIHRlbXAgKyBcIiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgdGVtcCArIFwiLndcXG5cIiArIFwibXVsIFwiICsgdGVtcCArIFwiLnh5LCBcIiArIHRlbXAgKyBcIi54eSwgXCIgKyBkYXRhUmVnICsgXCIueHlcXG5cIiArIFwiYWRkIFwiICsgdGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgKyBcIiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgZGF0YVJlZyArIFwiLnh4d3pcXG5cIjtcblx0XHQvL1wic3ViIFwiICsgdGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgKyBcIi56LCBcIiArIHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnICsgXCIueiwgXCIgKyB0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyArIFwiLndcXG5cIjtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSB0aGlzLl9wVXNlUG9pbnQ/IHRoaXMuX3BHZXRQb2ludEZyYWdtZW50Q29kZShtZXRob2RWTywgdGFyZ2V0UmVnLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpOnRoaXMuX3BHZXRQbGFuYXJGcmFnbWVudENvZGUobWV0aG9kVk8sIHRhcmdldFJlZywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0XHRjb2RlICs9IFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBmY1wiICsgKG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXgvNCArIDEpICsgXCIueVxcblwiICsgXCJzYXQgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIHRhcmdldFJlZyArIFwiLndcXG5cIjtcblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmcmFnbWVudCBjb2RlIGZvciBzaGFkb3cgbWFwcGluZyB3aXRoIGEgcGxhbmFyIHNoYWRvdyBtYXAuXG5cdCAqIEBwYXJhbSBtZXRob2RWTyBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSByZWdDYWNoZSBUaGUgcmVnaXN0ZXIgY2FjaGUgdXNlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UmVnIFRoZSByZWdpc3RlciB0byBjb250YWluIHRoZSBzaGFkb3cgY292ZXJhZ2Vcblx0ICogQHJldHVyblxuXHQgKi9cblx0cHVibGljIF9wR2V0UGxhbmFyRnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZnJhZ21lbnQgY29kZSBmb3Igc2hhZG93IG1hcHBpbmcgd2l0aCBhIHBvaW50IGxpZ2h0LlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICogQHBhcmFtIHRhcmdldFJlZyBUaGUgcmVnaXN0ZXIgdG8gY29udGFpbiB0aGUgc2hhZG93IGNvdmVyYWdlXG5cdCAqIEByZXR1cm5cblx0ICovXG5cdHB1YmxpYyBfcEdldFBvaW50RnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpU2V0UmVuZGVyU3RhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdGlmICghdGhpcy5fcFVzZVBvaW50KVxuXHRcdFx0KDxEaXJlY3Rpb25hbFNoYWRvd01hcHBlcj4gdGhpcy5fcFNoYWRvd01hcHBlcikuaURlcHRoUHJvamVjdGlvbi5jb3B5UmF3RGF0YVRvKHNoYWRlck9iamVjdC52ZXJ0ZXhDb25zdGFudERhdGEsIG1ldGhvZFZPLnZlcnRleENvbnN0YW50c0luZGV4ICsgNCwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZnJhZ21lbnQgY29kZSBmb3IgY29tYmluaW5nIHRoaXMgbWV0aG9kIHdpdGggYSBjYXNjYWRlZCBzaGFkb3cgbWFwIG1ldGhvZC5cblx0ICogQHBhcmFtIG1ldGhvZFZPIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHJlZ0NhY2hlIFRoZSByZWdpc3RlciBjYWNoZSB1c2VkIGR1cmluZyB0aGUgY29tcGlsYXRpb24uXG5cdCAqIEBwYXJhbSBkZWNvZGVSZWdpc3RlciBUaGUgcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBkZWNvZGUgdGhlIHNoYWRvdyBtYXAgZGVwdGggdmFsdWUuXG5cdCAqIEBwYXJhbSBkZXB0aFRleHR1cmUgVGhlIHRleHR1cmUgY29udGFpbmluZyB0aGUgc2hhZG93IG1hcC5cblx0ICogQHBhcmFtIGRlcHRoUHJvamVjdGlvbiBUaGUgcHJvamVjdGlvbiBvZiB0aGUgZnJhZ21lbnQgcmVsYXRpdmUgdG8gdGhlIGxpZ2h0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0UmVnaXN0ZXIgVGhlIHJlZ2lzdGVyIHRvIGNvbnRhaW4gdGhlIHNoYWRvdyBjb3ZlcmFnZVxuXHQgKiBAcmV0dXJuXG5cdCAqL1xuXHRwdWJsaWMgX2lHZXRDYXNjYWRlRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgZGVjb2RlUmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBkZXB0aFRleHR1cmU6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBkZXB0aFByb2plY3Rpb246U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB0YXJnZXRSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNoYWRvdyBtZXRob2QgaXMgaW5jb21wYXRpYmxlIHdpdGggY2FzY2FkZSBzaGFkb3dzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR2YXIgZnJhZ21lbnREYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0dmFyIGluZGV4Om51bWJlciAvKmludCovID0gbWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleDtcblxuXHRcdGlmICh0aGlzLl9wVXNlUG9pbnQpXG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyA0XSA9IC1NYXRoLnBvdygxLygoPFBvaW50TGlnaHQ+IHRoaXMuX3BDYXN0aW5nTGlnaHQpLmZhbGxPZmYqdGhpcy5fcEVwc2lsb24pLCAyKTtcblx0XHRlbHNlXG5cdFx0XHRzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhW21ldGhvZFZPLnZlcnRleENvbnN0YW50c0luZGV4ICsgM10gPSAtMS8oKDxEaXJlY3Rpb25hbFNoYWRvd01hcHBlcj4gdGhpcy5fcFNoYWRvd01hcHBlcikuZGVwdGgqdGhpcy5fcEVwc2lsb24pO1xuXG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgNV0gPSAxIC0gdGhpcy5fcEFscGhhO1xuXG5cdFx0aWYgKHRoaXMuX3BVc2VQb2ludCkge1xuXHRcdFx0dmFyIHBvczpWZWN0b3IzRCA9IHRoaXMuX3BDYXN0aW5nTGlnaHQuc2NlbmVQb3NpdGlvbjtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDhdID0gcG9zLng7XG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyA5XSA9IHBvcy55O1xuXHRcdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgMTBdID0gcG9zLno7XG5cdFx0XHQvLyB1c2VkIHRvIGRlY29tcHJlc3MgZGlzdGFuY2Vcblx0XHRcdHZhciBmOm51bWJlciA9ICg8UG9pbnRMaWdodD4gdGhpcy5fcENhc3RpbmdMaWdodCkuZmFsbE9mZjtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDExXSA9IDEvKDIqZipmKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX3BVc2VQb2ludClcblx0XHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5hY3RpdmF0ZVJlbmRlclRleHR1cmUobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgPFRleHR1cmUyREJhc2U+IHRoaXMuX3BDYXN0aW5nTGlnaHQuc2hhZG93TWFwcGVyLmRlcHRoTWFwKTtcblx0XHQvL2Vsc2Vcblx0XHQvL1x0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlQ3ViZVJlbmRlclRleHR1cmUobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgPEN1YmVUZXh0dXJlQmFzZT4gdGhpcy5fcENhc3RpbmdMaWdodC5zaGFkb3dNYXBwZXIuZGVwdGhNYXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1ldGhvZCBzdGF0ZSBmb3IgY2FzY2FkZSBzaGFkb3cgbWFwcGluZy5cblx0ICovXG5cdHB1YmxpYyBpQWN0aXZhdGVGb3JDYXNjYWRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNoYWRvdyBtZXRob2QgaXMgaW5jb21wYXRpYmxlIHdpdGggY2FzY2FkZSBzaGFkb3dzXCIpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRvd01ldGhvZEJhc2U7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zaGFkb3dtZXRob2RiYXNlLnRzIl0sIm5hbWVzIjpbIlNoYWRvd01ldGhvZEJhc2UiLCJTaGFkb3dNZXRob2RCYXNlLmNvbnN0cnVjdG9yIiwiU2hhZG93TWV0aG9kQmFzZS5pSW5pdFZPIiwiU2hhZG93TWV0aG9kQmFzZS5pSW5pdENvbnN0YW50cyIsIlNoYWRvd01ldGhvZEJhc2UuX2lEZXB0aE1hcENvb3JkUmVnIiwiU2hhZG93TWV0aG9kQmFzZS5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJTaGFkb3dNZXRob2RCYXNlLmlHZXRWZXJ0ZXhDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5fcEdldFBvaW50VmVydGV4Q29kZSIsIlNoYWRvd01ldGhvZEJhc2UucEdldFBsYW5hclZlcnRleENvZGUiLCJTaGFkb3dNZXRob2RCYXNlLmlHZXRGcmFnbWVudENvZGUiLCJTaGFkb3dNZXRob2RCYXNlLl9wR2V0UGxhbmFyRnJhZ21lbnRDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5fcEdldFBvaW50RnJhZ21lbnRDb2RlIiwiU2hhZG93TWV0aG9kQmFzZS5pU2V0UmVuZGVyU3RhdGUiLCJTaGFkb3dNZXRob2RCYXNlLl9pR2V0Q2FzY2FkZUZyYWdtZW50Q29kZSIsIlNoYWRvd01ldGhvZEJhc2UuaUFjdGl2YXRlIiwiU2hhZG93TWV0aG9kQmFzZS5pQWN0aXZhdGVGb3JDYXNjYWRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFPLG1CQUFtQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFPckYsSUFBTyxVQUFVLFdBQWUsd0NBQXdDLENBQUMsQ0FBQztBQVkxRSxJQUFPLG1CQUFtQixXQUFhLDBEQUEwRCxDQUFDLENBQUM7QUFFbkcsQUFHQTs7R0FERztJQUNHLGdCQUFnQjtJQUFTQSxVQUF6QkEsZ0JBQWdCQSxVQUE0QkE7SUFLakRBOzs7T0FHR0E7SUFDSEEsU0FUS0EsZ0JBQWdCQSxDQVNUQSxZ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QTtJQUNySkEsQ0FBQ0E7SUFFRGQ7O09BRUdBO0lBQ0lBLDhDQUFtQkEsR0FBMUJBLFVBQTJCQSxZQUE2QkEsRUFBRUEsUUFBaUJBLEVBQUVBLEtBQVdBO1FBRXZGZSxNQUFNQSxJQUFJQSxLQUFLQSxDQUFDQSx5REFBeURBLENBQUNBLENBQUNBO0lBQzVFQSxDQUFDQTtJQUNGZix1QkFBQ0E7QUFBREEsQ0FsT0EsQUFrT0NBLEVBbE84QixtQkFBbUIsRUFrT2pEO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NoYWRvd01ldGhvZEJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcbmltcG9ydCBDdWJlVGV4dHVyZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9DdWJlVGV4dHVyZUJhc2VcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBMaWdodEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGlnaHRCYXNlXCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgUG9pbnRMaWdodFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvUG9pbnRMaWdodFwiKTtcbmltcG9ydCBEaXJlY3Rpb25hbFNoYWRvd01hcHBlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL3NoYWRvd21hcHBlcnMvRGlyZWN0aW9uYWxTaGFkb3dNYXBwZXJcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBNZXRob2RWT1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vTWV0aG9kVk9cIik7XG5pbXBvcnQgU2hhZGVyTGlnaHRpbmdPYmplY3RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlckxpZ2h0aW5nT2JqZWN0XCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBTaGFkb3dNYXBNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRvd01hcE1ldGhvZEJhc2VcIik7XG5cbi8qKlxuICogU2hhZG93TWV0aG9kQmFzZSBwcm92aWRlcyBhbiBhYnN0cmFjdCBtZXRob2QgZm9yIHNpbXBsZSAobm9uLXdyYXBwaW5nKSBzaGFkb3cgbWFwIG1ldGhvZHMuXG4gKi9cbmNsYXNzIFNoYWRvd01ldGhvZEJhc2UgZXh0ZW5kcyBTaGFkb3dNYXBNZXRob2RCYXNlXG57XG5cdHB1YmxpYyBfcERlcHRoTWFwQ29vcmRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRwdWJsaWMgX3BVc2VQb2ludDpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNoYWRvd01ldGhvZEJhc2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gY2FzdGluZ0xpZ2h0IFRoZSBsaWdodCB1c2VkIHRvIGNhc3Qgc2hhZG93cy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhc3RpbmdMaWdodDpMaWdodEJhc2UpXG5cdHtcblx0XHR0aGlzLl9wVXNlUG9pbnQgPSAoY2FzdGluZ0xpZ2h0IGluc3RhbmNlb2YgUG9pbnRMaWdodCk7XG5cblx0XHRzdXBlcihjYXN0aW5nTGlnaHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRWTyhzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ubmVlZHNWaWV3ID0gdHJ1ZTtcblx0XHRtZXRob2RWTy5uZWVkc0dsb2JhbFZlcnRleFBvcyA9IHRydWU7XG5cdFx0bWV0aG9kVk8ubmVlZHNHbG9iYWxGcmFnbWVudFBvcyA9IHRoaXMuX3BVc2VQb2ludDtcblx0XHRtZXRob2RWTy5uZWVkc05vcm1hbHMgPSBzaGFkZXJPYmplY3QubnVtTGlnaHRzID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlJbml0Q29uc3RhbnRzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTylcblx0e1xuXHRcdHZhciBmcmFnbWVudERhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblx0XHR2YXIgdmVydGV4RGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LnZlcnRleENvbnN0YW50RGF0YTtcblx0XHR2YXIgaW5kZXg6bnVtYmVyIC8qaW50Ki8gPSBtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleF0gPSAxLjA7XG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgMV0gPSAxLzI1NS4wO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDJdID0gMS82NTAyNS4wO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDNdID0gMS8xNjU4MTM3NS4wO1xuXG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgNl0gPSAwO1xuXHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDddID0gMTtcblxuXHRcdGlmICh0aGlzLl9wVXNlUG9pbnQpIHtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDhdID0gMDtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDldID0gMDtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDEwXSA9IDA7XG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyAxMV0gPSAxO1xuXHRcdH1cblxuXHRcdGluZGV4ID0gbWV0aG9kVk8udmVydGV4Q29uc3RhbnRzSW5kZXg7XG5cdFx0aWYgKGluZGV4ICE9IC0xKSB7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4XSA9IC41O1xuXHRcdFx0dmVydGV4RGF0YVtpbmRleCArIDFdID0gLjU7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4ICsgMl0gPSAwLjA7XG5cdFx0XHR2ZXJ0ZXhEYXRhW2luZGV4ICsgM10gPSAxLjA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdyYXBwZXJzIHRoYXQgb3ZlcnJpZGUgdGhlIHZlcnRleCBzaGFkZXIgbmVlZCB0byBzZXQgdGhpcyBleHBsaWNpdGx5XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pRGVwdGhNYXBDb29yZFJlZygpOlNoYWRlclJlZ2lzdGVyRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnO1xuXHR9XG5cblx0cHVibGljIHNldCBfaURlcHRoTWFwQ29vcmRSZWcodmFsdWU6U2hhZGVyUmVnaXN0ZXJFbGVtZW50KVxuXHR7XG5cdFx0dGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblxuXHRcdHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcFVzZVBvaW50PyB0aGlzLl9wR2V0UG9pbnRWZXJ0ZXhDb2RlKG1ldGhvZFZPLCByZWdDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTp0aGlzLnBHZXRQbGFuYXJWZXJ0ZXhDb2RlKG1ldGhvZFZPLCByZWdDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2ZXJ0ZXggY29kZSBmb3Igc2hhZG93IG1hcHBpbmcgd2l0aCBhIHBvaW50IGxpZ2h0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBfcEdldFBvaW50VmVydGV4Q29kZShtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRtZXRob2RWTy52ZXJ0ZXhDb25zdGFudHNJbmRleCA9IC0xO1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZlcnRleCBjb2RlIGZvciBzaGFkb3cgbWFwcGluZyB3aXRoIGEgcGxhbmFyIHNoYWRvdyBtYXAgKGZlOiBkaXJlY3Rpb25hbCBsaWdodHMpLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBwR2V0UGxhbmFyVmVydGV4Q29kZShtZXRob2RWTzpNZXRob2RWTywgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0ZW1wOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ0NhY2hlLmdldEZyZWVWZXJ0ZXhWZWN0b3JUZW1wKCk7XG5cdFx0dmFyIGRhdGFSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnQ2FjaGUuZ2V0RnJlZVZlcnRleENvbnN0YW50KCk7XG5cdFx0dmFyIGRlcHRoTWFwUHJvajpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHRyZWdDYWNoZS5nZXRGcmVlVmVydGV4Q29uc3RhbnQoKTtcblx0XHR0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyA9IHJlZ0NhY2hlLmdldEZyZWVWYXJ5aW5nKCk7XG5cdFx0bWV0aG9kVk8udmVydGV4Q29uc3RhbnRzSW5kZXggPSBkYXRhUmVnLmluZGV4KjQ7XG5cblx0XHQvLyB0b2RvOiBjYW4gZXBzaWxvbiBiZSBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBmcmFnbWVudCBzaGFkZXI/XG5cblx0XHRjb2RlICs9IFwibTQ0IFwiICsgdGVtcCArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZlcnRleCArIFwiLCBcIiArIGRlcHRoTWFwUHJvaiArIFwiXFxuXCIgKyBcImRpdiBcIiArIHRlbXAgKyBcIiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgdGVtcCArIFwiLndcXG5cIiArIFwibXVsIFwiICsgdGVtcCArIFwiLnh5LCBcIiArIHRlbXAgKyBcIi54eSwgXCIgKyBkYXRhUmVnICsgXCIueHlcXG5cIiArIFwiYWRkIFwiICsgdGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgKyBcIiwgXCIgKyB0ZW1wICsgXCIsIFwiICsgZGF0YVJlZyArIFwiLnh4d3pcXG5cIjtcblx0XHQvL1wic3ViIFwiICsgdGhpcy5fcERlcHRoTWFwQ29vcmRSZWcgKyBcIi56LCBcIiArIHRoaXMuX3BEZXB0aE1hcENvb3JkUmVnICsgXCIueiwgXCIgKyB0aGlzLl9wRGVwdGhNYXBDb29yZFJlZyArIFwiLndcXG5cIjtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgbWV0aG9kVk86TWV0aG9kVk8sIHRhcmdldFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSB0aGlzLl9wVXNlUG9pbnQ/IHRoaXMuX3BHZXRQb2ludEZyYWdtZW50Q29kZShtZXRob2RWTywgdGFyZ2V0UmVnLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpOnRoaXMuX3BHZXRQbGFuYXJGcmFnbWVudENvZGUobWV0aG9kVk8sIHRhcmdldFJlZywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0XHRjb2RlICs9IFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBmY1wiICsgKG1ldGhvZFZPLmZyYWdtZW50Q29uc3RhbnRzSW5kZXgvNCArIDEpICsgXCIueVxcblwiICsgXCJzYXQgXCIgKyB0YXJnZXRSZWcgKyBcIi53LCBcIiArIHRhcmdldFJlZyArIFwiLndcXG5cIjtcblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmcmFnbWVudCBjb2RlIGZvciBzaGFkb3cgbWFwcGluZyB3aXRoIGEgcGxhbmFyIHNoYWRvdyBtYXAuXG5cdCAqIEBwYXJhbSBtZXRob2RWTyBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSByZWdDYWNoZSBUaGUgcmVnaXN0ZXIgY2FjaGUgdXNlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UmVnIFRoZSByZWdpc3RlciB0byBjb250YWluIHRoZSBzaGFkb3cgY292ZXJhZ2Vcblx0ICogQHJldHVyblxuXHQgKi9cblx0cHVibGljIF9wR2V0UGxhbmFyRnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZnJhZ21lbnQgY29kZSBmb3Igc2hhZG93IG1hcHBpbmcgd2l0aCBhIHBvaW50IGxpZ2h0LlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIE1ldGhvZFZPIG9iamVjdCBsaW5raW5nIHRoaXMgbWV0aG9kIHdpdGggdGhlIHBhc3MgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLlxuXHQgKiBAcGFyYW0gcmVnQ2FjaGUgVGhlIHJlZ2lzdGVyIGNhY2hlIHVzZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi5cblx0ICogQHBhcmFtIHRhcmdldFJlZyBUaGUgcmVnaXN0ZXIgdG8gY29udGFpbiB0aGUgc2hhZG93IGNvdmVyYWdlXG5cdCAqIEByZXR1cm5cblx0ICovXG5cdHB1YmxpYyBfcEdldFBvaW50RnJhZ21lbnRDb2RlKG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpU2V0UmVuZGVyU3RhdGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdGlmICghdGhpcy5fcFVzZVBvaW50KVxuXHRcdFx0KDxEaXJlY3Rpb25hbFNoYWRvd01hcHBlcj4gdGhpcy5fcFNoYWRvd01hcHBlcikuaURlcHRoUHJvamVjdGlvbi5jb3B5UmF3RGF0YVRvKHNoYWRlck9iamVjdC52ZXJ0ZXhDb25zdGFudERhdGEsIG1ldGhvZFZPLnZlcnRleENvbnN0YW50c0luZGV4ICsgNCwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZnJhZ21lbnQgY29kZSBmb3IgY29tYmluaW5nIHRoaXMgbWV0aG9kIHdpdGggYSBjYXNjYWRlZCBzaGFkb3cgbWFwIG1ldGhvZC5cblx0ICogQHBhcmFtIG1ldGhvZFZPIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHJlZ0NhY2hlIFRoZSByZWdpc3RlciBjYWNoZSB1c2VkIGR1cmluZyB0aGUgY29tcGlsYXRpb24uXG5cdCAqIEBwYXJhbSBkZWNvZGVSZWdpc3RlciBUaGUgcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBkZWNvZGUgdGhlIHNoYWRvdyBtYXAgZGVwdGggdmFsdWUuXG5cdCAqIEBwYXJhbSBkZXB0aFRleHR1cmUgVGhlIHRleHR1cmUgY29udGFpbmluZyB0aGUgc2hhZG93IG1hcC5cblx0ICogQHBhcmFtIGRlcHRoUHJvamVjdGlvbiBUaGUgcHJvamVjdGlvbiBvZiB0aGUgZnJhZ21lbnQgcmVsYXRpdmUgdG8gdGhlIGxpZ2h0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0UmVnaXN0ZXIgVGhlIHJlZ2lzdGVyIHRvIGNvbnRhaW4gdGhlIHNoYWRvdyBjb3ZlcmFnZVxuXHQgKiBAcmV0dXJuXG5cdCAqL1xuXHRwdWJsaWMgX2lHZXRDYXNjYWRlRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgZGVjb2RlUmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBkZXB0aFRleHR1cmU6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBkZXB0aFByb2plY3Rpb246U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB0YXJnZXRSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNoYWRvdyBtZXRob2QgaXMgaW5jb21wYXRpYmxlIHdpdGggY2FzY2FkZSBzaGFkb3dzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR2YXIgZnJhZ21lbnREYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0dmFyIGluZGV4Om51bWJlciAvKmludCovID0gbWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleDtcblxuXHRcdGlmICh0aGlzLl9wVXNlUG9pbnQpXG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyA0XSA9IC1NYXRoLnBvdygxLygoPFBvaW50TGlnaHQ+IHRoaXMuX3BDYXN0aW5nTGlnaHQpLmZhbGxPZmYqdGhpcy5fcEVwc2lsb24pLCAyKTtcblx0XHRlbHNlXG5cdFx0XHRzaGFkZXJPYmplY3QudmVydGV4Q29uc3RhbnREYXRhW21ldGhvZFZPLnZlcnRleENvbnN0YW50c0luZGV4ICsgM10gPSAtMS8oKDxEaXJlY3Rpb25hbFNoYWRvd01hcHBlcj4gdGhpcy5fcFNoYWRvd01hcHBlcikuZGVwdGgqdGhpcy5fcEVwc2lsb24pO1xuXG5cdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgNV0gPSAxIC0gdGhpcy5fcEFscGhhO1xuXG5cdFx0aWYgKHRoaXMuX3BVc2VQb2ludCkge1xuXHRcdFx0dmFyIHBvczpWZWN0b3IzRCA9IHRoaXMuX3BDYXN0aW5nTGlnaHQuc2NlbmVQb3NpdGlvbjtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDhdID0gcG9zLng7XG5cdFx0XHRmcmFnbWVudERhdGFbaW5kZXggKyA5XSA9IHBvcy55O1xuXHRcdFx0ZnJhZ21lbnREYXRhW2luZGV4ICsgMTBdID0gcG9zLno7XG5cdFx0XHQvLyB1c2VkIHRvIGRlY29tcHJlc3MgZGlzdGFuY2Vcblx0XHRcdHZhciBmOm51bWJlciA9ICg8UG9pbnRMaWdodD4gdGhpcy5fcENhc3RpbmdMaWdodCkuZmFsbE9mZjtcblx0XHRcdGZyYWdtZW50RGF0YVtpbmRleCArIDExXSA9IDEvKDIqZipmKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX3BVc2VQb2ludClcblx0XHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5hY3RpdmF0ZVJlbmRlclRleHR1cmUobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgPFRleHR1cmUyREJhc2U+IHRoaXMuX3BDYXN0aW5nTGlnaHQuc2hhZG93TWFwcGVyLmRlcHRoTWFwKTtcblx0XHQvL2Vsc2Vcblx0XHQvL1x0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlQ3ViZVJlbmRlclRleHR1cmUobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgPEN1YmVUZXh0dXJlQmFzZT4gdGhpcy5fcENhc3RpbmdMaWdodC5zaGFkb3dNYXBwZXIuZGVwdGhNYXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1ldGhvZCBzdGF0ZSBmb3IgY2FzY2FkZSBzaGFkb3cgbWFwcGluZy5cblx0ICovXG5cdHB1YmxpYyBpQWN0aXZhdGVGb3JDYXNjYWRlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCBtZXRob2RWTzpNZXRob2RWTywgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNoYWRvdyBtZXRob2QgaXMgaW5jb21wYXRpYmxlIHdpdGggY2FzY2FkZSBzaGFkb3dzXCIpO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNoYWRvd01ldGhvZEJhc2U7Il19 \ No newline at end of file diff --git a/lib/materials/methods/ShadowMethodBase.ts b/lib/materials/methods/ShadowMethodBase.ts index ccce0907..65324f1a 100644 --- a/lib/materials/methods/ShadowMethodBase.ts +++ b/lib/materials/methods/ShadowMethodBase.ts @@ -9,9 +9,9 @@ import DirectionalLight = require("awayjs-display/lib/entities/DirectionalLig import PointLight = require("awayjs-display/lib/entities/PointLight"); import DirectionalShadowMapper = require("awayjs-display/lib/materials/shadowmappers/DirectionalShadowMapper"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); diff --git a/lib/materials/methods/SpecularBasicMethod.js b/lib/materials/methods/SpecularBasicMethod.js index 6977a215..eb0d073f 100755 --- a/lib/materials/methods/SpecularBasicMethod.js +++ b/lib/materials/methods/SpecularBasicMethod.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var LightingMethodBase = require("awayjs-stagegl/lib/materials/methods/LightingMethodBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -258,4 +258,4 @@ var SpecularBasicMethod = (function (_super) { })(LightingMethodBase); module.exports = SpecularBasicMethod; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zcGVjdWxhcmJhc2ljbWV0aG9kLnRzIl0sIm5hbWVzIjpbIlNwZWN1bGFyQmFzaWNNZXRob2QiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pSXNVc2VkIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pSW5pdFZPIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5nbG9zcyIsIlNwZWN1bGFyQmFzaWNNZXRob2Quc3BlY3VsYXIiLCJTcGVjdWxhckJhc2ljTWV0aG9kLnNwZWN1bGFyQ29sb3IiLCJTcGVjdWxhckJhc2ljTWV0aG9kLnRleHR1cmUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmNvcHlGcm9tIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSIsIlNwZWN1bGFyQmFzaWNNZXRob2QuaUdldEZyYWdtZW50Q29kZVBlckxpZ2h0IiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlBY3RpdmF0ZSIsIlNwZWN1bGFyQmFzaWNNZXRob2QudXBkYXRlU3BlY3VsYXIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQU8sa0JBQWtCLFdBQWEsb0RBQW9ELENBQUMsQ0FBQztBQUM1RixJQUFPLHNCQUFzQixXQUFZLHdEQUF3RCxDQUFDLENBQUM7QUFDbkcsSUFBTyxpQkFBaUIsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBTzFGLElBQU8sa0JBQWtCLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVqRyxJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFJQTs7O0dBREc7SUFDRyxtQkFBbUI7SUFBU0EsVUFBNUJBLG1CQUFtQkEsVUFBMkJBO0lBa0JuREE7O09BRUdBO0lBQ0hBLFNBckJLQSxtQkFBbUJBO1FBdUJ2QkMsaUJBQU9BLENBQUNBO1FBYkRBLFdBQU1BLEdBQVVBLEVBQUVBLENBQUNBO1FBQ25CQSxjQUFTQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNyQkEsbUJBQWNBLEdBQVVBLFFBQVFBLENBQUNBO1FBQ2xDQSxnQkFBV0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDdkJBLGdCQUFXQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUN2QkEsZ0JBQVdBLEdBQVVBLENBQUNBLENBQUNBO0lBUzlCQSxDQUFDQTtJQUVNRCxxQ0FBT0EsR0FBZEEsVUFBZUEsWUFBaUNBO1FBRS9DRSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxZQUFZQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUMzQkEsTUFBTUEsQ0FBQ0EsS0FBS0EsQ0FBQ0E7UUFFZEEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFREY7O09BRUdBO0lBQ0lBLHFDQUFPQSxHQUFkQSxVQUFlQSxZQUFpQ0EsRUFBRUEsUUFBaUJBO1FBRWxFRyxRQUFRQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQTtRQUNyQ0EsUUFBUUEsQ0FBQ0EsWUFBWUEsR0FBR0EsWUFBWUEsQ0FBQ0EsU0FBU0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDbkRBLFFBQVFBLENBQUNBLFNBQVNBLEdBQUdBLFlBQVlBLENBQUNBLFNBQVNBLEdBQUdBLENBQUNBLENBQUNBO0lBQ2pEQSxDQUFDQTtJQUtESCxzQkFBV0Esc0NBQUtBO1FBSGhCQTs7V0FFR0E7YUFDSEE7WUFFQ0ksTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDcEJBLENBQUNBO2FBRURKLFVBQWlCQSxLQUFZQTtZQUU1QkksSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDckJBLENBQUNBOzs7T0FMQUo7SUFVREEsc0JBQVdBLHlDQUFRQTtRQUhuQkE7O1dBRUdBO2FBQ0hBO1lBRUNLLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1FBQ3ZCQSxDQUFDQTthQUVETCxVQUFvQkEsS0FBWUE7WUFFL0JLLEVBQUVBLENBQUNBLENBQUNBLEtBQUtBLElBQUlBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO2dCQUMzQkEsTUFBTUEsQ0FBQ0E7WUFFUkEsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDdkJBLElBQUlBLENBQUNBLGNBQWNBLEVBQUVBLENBQUNBO1FBQ3ZCQSxDQUFDQTs7O09BVEFMO0lBY0RBLHNCQUFXQSw4Q0FBYUE7UUFIeEJBOztXQUVHQTthQUNIQTtZQUVDTSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7YUFFRE4sVUFBeUJBLEtBQVlBO1lBRXBDTSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxJQUFJQSxLQUFLQSxDQUFDQTtnQkFDaENBLE1BQU1BLENBQUNBO1lBRVJBLEFBQ0FBLDZDQUQ2Q0E7WUFDN0NBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLElBQUlBLENBQUNBLElBQUlBLEtBQUtBLElBQUlBLENBQUNBLENBQUNBO2dCQUMxQ0EsSUFBSUEsQ0FBQ0Esd0JBQXdCQSxFQUFFQSxDQUFDQTtZQUVqQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDNUJBLElBQUlBLENBQUNBLGNBQWNBLEVBQUVBLENBQUNBO1FBQ3ZCQSxDQUFDQTs7O09BYkFOO0lBb0JEQSxzQkFBV0Esd0NBQU9BO1FBTGxCQTs7OztXQUlHQTthQUNIQTtZQUVDTyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUN0QkEsQ0FBQ0E7YUFFRFAsVUFBbUJBLEtBQW1CQTtZQUVyQ08sSUFBSUEsQ0FBQ0EsR0FBV0EsQ0FBRUEsS0FBS0EsSUFBSUEsSUFBSUEsQ0FBRUEsQ0FBQ0E7WUFFbENBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLElBQUlBLENBQUNBLFlBQVlBLElBQUlBLENBQUNBLEtBQUtBLElBQUlBLElBQUlBLENBQUNBLFFBQVFBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFVBQVVBLElBQUlBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFVBQVVBLElBQUlBLEtBQUtBLENBQUNBLE1BQU1BLElBQUlBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO2dCQUNoSkEsSUFBSUEsQ0FBQ0Esd0JBQXdCQSxFQUFFQSxDQUFDQTtZQUVqQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDdEJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLEtBQUtBLENBQUNBO1FBRXZCQSxDQUFDQTs7O09BWkFQO0lBY0RBOztPQUVHQTtJQUNJQSxzQ0FBUUEsR0FBZkEsVUFBZ0JBLE1BQXdCQTtRQUd2Q1EsSUFBSUEsQ0FBQ0EsR0FBT0EsTUFBTUEsQ0FBQ0E7UUFDbkJBLElBQUlBLEdBQUdBLEdBQTZDQSxNQUFNQSxDQUFDQTtRQUUzREEsSUFBSUEsSUFBSUEsR0FBdUJBLEdBQUdBLEVBQUNBLDhCQUE4QkE7UUFDakVBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUM5QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDeENBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVEUjs7T0FFR0E7SUFDSUEsbURBQXFCQSxHQUE1QkE7UUFFQ1MsZ0JBQUtBLENBQUNBLHFCQUFxQkEsV0FBRUEsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDakNBLElBQUlBLENBQUNBLHlCQUF5QkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDdENBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDcENBLENBQUNBO0lBRURUOztPQUVHQTtJQUNJQSx5REFBMkJBLEdBQWxDQSxVQUFtQ0EsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRTdKVSxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUVyQkEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFM0JBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxFQUFFQSxDQUFDQTtRQUN0RUEsUUFBUUEsQ0FBQ0Esc0JBQXNCQSxHQUFHQSxJQUFJQSxDQUFDQSxzQkFBc0JBLENBQUNBLEtBQUtBLEdBQUNBLENBQUNBLENBQUNBO1FBRXRFQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUV2QkEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxhQUFhQSxDQUFDQSx5QkFBeUJBLEVBQUVBLENBQUNBO1lBQ25FQSxhQUFhQSxDQUFDQSxxQkFBcUJBLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDL0RBLElBQUlBLENBQUNBLHlCQUF5QkEsR0FBR0EsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtZQUNuRUEsUUFBUUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsQ0FBQ0EseUJBQXlCQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUM5REEsSUFBSUEsR0FBR0Esb0JBQW9CQSxDQUFDQSxrQkFBa0JBLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsRUFBRUEsZUFBZUEsRUFBRUEsSUFBSUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxJQUFJQSxDQUFDQSxRQUFRQSxFQUFFQSxZQUFZQSxDQUFDQSxpQkFBaUJBLEVBQUVBLFlBQVlBLENBQUNBLGNBQWNBLEVBQUVBLFlBQVlBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBO1FBRWpPQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUVQQSxJQUFJQSxDQUFDQSx5QkFBeUJBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3ZDQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDdEVBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUVsRUEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDYkEsQ0FBQ0E7SUFFRFY7O09BRUdBO0lBQ0lBLHNEQUF3QkEsR0FBL0JBLFVBQWdDQSxZQUFpQ0EsRUFBRUEsUUFBaUJBLEVBQUVBLFdBQWlDQSxFQUFFQSxXQUFpQ0EsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUVoT1csSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFDckJBLElBQUlBLENBQXVCQSxDQUFDQTtRQUU1QkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDekJBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDL0JBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLENBQUNBLEdBQUdBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7WUFDOUNBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDM0NBLENBQUNBO1FBRURBLElBQUlBLFVBQVVBLEdBQXlCQSxlQUFlQSxDQUFDQSxlQUFlQSxDQUFDQTtRQUN2RUEsSUFBSUEsU0FBU0EsR0FBeUJBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBO1FBRXJFQSxBQUNBQSxnQ0FEZ0NBO1FBQ2hDQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxXQUFXQSxHQUFHQSxJQUFJQSxHQUFHQSxVQUFVQSxHQUFHQSxJQUFJQSxHQUNoRUEsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsUUFBUUEsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsR0FDaENBLE1BQU1BLEdBQUdBLENBQUNBLEdBQUdBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLEdBQ2pEQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxDQUFDQTtRQUVuQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLEFBQ0FBLHNDQURzQ0E7WUFDdENBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxzQkFBc0JBLEdBQUdBLE1BQU1BLEdBQ3ZIQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxpQkFBaUJBLEdBQUdBLE1BQU1BLENBQUNBO1FBQ3RFQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUNQQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxzQkFBc0JBLEdBQUdBLE1BQU1BLENBQUNBO1FBQ2pGQSxDQUFDQTtRQUVEQSxBQUNBQSxZQURZQTtRQUNaQSxFQUFFQSxDQUFDQSxDQUFDQSxZQUFZQSxDQUFDQSxnQkFBZ0JBLENBQUNBO1lBQ2pDQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxXQUFXQSxHQUFHQSxNQUFNQSxDQUFDQTtRQUVqRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUNqQ0EsSUFBSUEsSUFBSUEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxFQUFFQSxRQUFRQSxFQUFFQSxDQUFDQSxFQUFFQSxhQUFhQSxFQUFFQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUUxRkEsSUFBSUEsSUFBSUEsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsUUFBUUEsR0FBR0EsV0FBV0EsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsR0FBR0EsTUFBTUEsQ0FBQ0E7UUFFaEVBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLENBQUNBLENBQUNBO1lBQzFCQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7WUFDcEdBLGFBQWFBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDMUNBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLEtBQUtBLENBQUNBO1FBRTVCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUVEWDs7T0FFR0E7SUFDSUEsc0RBQXdCQSxHQUEvQkEsVUFBZ0NBLFlBQWlDQSxFQUFFQSxRQUFpQkEsRUFBRUEsVUFBZ0NBLEVBQUVBLGNBQXFCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRW5OWSxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNyQkEsSUFBSUEsQ0FBdUJBLENBQUNBO1FBRTVCQSxBQUNBQSwrRUFEK0VBO1FBQy9FQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUN6QkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQTtRQUMvQkEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsQ0FBQ0EsR0FBR0EsYUFBYUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxDQUFDQTtZQUM5Q0EsYUFBYUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMzQ0EsQ0FBQ0E7UUFFREEsSUFBSUEsU0FBU0EsR0FBeUJBLGVBQWVBLENBQUNBLGNBQWNBLENBQUNBO1FBQ3JFQSxJQUFJQSxVQUFVQSxHQUF5QkEsZUFBZUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7UUFFdkVBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLENBQUNBLEdBQUdBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLFVBQVVBLEdBQUdBLElBQUlBLEdBQ2hFQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxNQUFNQSxHQUM3Q0EsTUFBTUEsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsR0FBR0EsQ0FBQ0EsR0FBR0EsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsSUFBSUEsR0FDakRBLE1BQU1BLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLEdBQUdBLFVBQVVBLEdBQUdBLElBQUlBLEdBQ2hEQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxVQUFVQSxHQUFHQSxTQUFTQSxHQUFHQSxDQUFDQSxZQUFZQSxDQUFDQSxpQkFBaUJBLEdBQUVBLFFBQVFBLEdBQUNBLFNBQVNBLENBQUNBLEdBQUdBLGVBQWVBLEdBQzlIQSxNQUFNQSxHQUFHQSxDQUFDQSxHQUFHQSxRQUFRQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxHQUFHQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUzREEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUNqQ0EsSUFBSUEsSUFBSUEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxFQUFFQSxRQUFRQSxFQUFFQSxDQUFDQSxFQUFFQSxhQUFhQSxFQUFFQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUUxRkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDMUJBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUNwR0EsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMxQ0EsQ0FBQ0E7UUFFREEsSUFBSUEsQ0FBQ0EsY0FBY0EsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFFNUJBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2JBLENBQUNBO0lBRURaOztPQUVHQTtJQUNJQSwwREFBNEJBLEdBQW5DQSxVQUFvQ0EsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxTQUErQkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUUvTGEsSUFBSUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFFckJBLEVBQUVBLENBQUNBLENBQUNBLGVBQWVBLENBQUNBLFlBQVlBLENBQUNBO1lBQ2hDQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FBR0EsZUFBZUEsQ0FBQ0EsWUFBWUEsR0FBR0EsTUFBTUEsQ0FBQ0E7UUFFbElBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBLENBQUNBO1lBQ3ZCQSxBQUNBQSx5Q0FEeUNBO1lBQ3pDQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxNQUFNQSxDQUFDQTtZQUMzSEEsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBO1FBQy9EQSxDQUFDQTtRQUVEQSxBQUNBQSx1Q0FEdUNBO1FBQ3ZDQSxJQUFJQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxvQkFBb0JBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxHQUFHQSxJQUFJQSxHQUM1SEEsTUFBTUEsR0FBR0EsU0FBU0EsR0FBR0EsUUFBUUEsR0FBR0EsU0FBU0EsR0FBR0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNyRkEsYUFBYUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBO1FBRWpFQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUVEYjs7T0FFR0E7SUFDSUEsdUNBQVNBLEdBQWhCQSxVQUFpQkEsWUFBaUNBLEVBQUVBLFFBQWlCQSxFQUFFQSxLQUFXQTtRQUVqRmMsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDSkEsS0FBS0EsQ0FBQ0EsT0FBUUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxRQUFRQSxDQUFDQSxhQUFhQSxFQUFFQSxZQUFZQSxDQUFDQSxjQUFjQSxHQUFFQSxpQkFBaUJBLENBQUNBLE1BQU1BLEdBQUNBLGlCQUFpQkEsQ0FBQ0EsS0FBS0EsRUFBRUEsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxHQUFFQSxzQkFBc0JBLENBQUNBLE1BQU1BLEdBQUNBLHNCQUFzQkEsQ0FBQ0EsT0FBT0EsRUFBRUEsWUFBWUEsQ0FBQ0EsYUFBYUEsR0FBRUEsa0JBQWtCQSxDQUFDQSxTQUFTQSxHQUFDQSxrQkFBa0JBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1lBQzNUQSxLQUFLQSxDQUFDQSxPQUFRQSxDQUFDQSxlQUFlQSxDQUFDQSxRQUFRQSxDQUFDQSxhQUFhQSxFQUFFQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUMxRkEsQ0FBQ0E7UUFFREEsSUFBSUEsS0FBS0EsR0FBVUEsUUFBUUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtRQUNuREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBO1FBQy9CQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUNuQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFDbkNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO0lBQy9CQSxDQUFDQTtJQUVEZDs7T0FFR0E7SUFDS0EsNENBQWNBLEdBQXRCQTtRQUVDZSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxDQUFDQSxDQUFFQSxJQUFJQSxDQUFDQSxjQUFjQSxJQUFJQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxHQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUM3RUEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsQ0FBQ0EsQ0FBRUEsSUFBSUEsQ0FBQ0EsY0FBY0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFDNUVBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLENBQUVBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLEdBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO0lBQ3RFQSxDQUFDQTtJQUNGZiwwQkFBQ0E7QUFBREEsQ0E3VEEsQUE2VENBLEVBN1RpQyxrQkFBa0IsRUE2VG5EO0FBRUQsQUFBNkIsaUJBQXBCLG1CQUFtQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NwZWN1bGFyQmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xXcmFwTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IE1ldGhvZFZPXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9NZXRob2RWT1wiKTtcbmltcG9ydCBTaGFkZXJMaWdodGluZ09iamVjdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyTGlnaHRpbmdPYmplY3RcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgTGlnaHRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0xpZ2h0aW5nTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBTaGFkaW5nTWV0aG9kQmFzZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TaGFkaW5nTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJDb21waWxlckhlbHBlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvU2hhZGVyQ29tcGlsZXJIZWxwZXJcIik7XG5cbi8qKlxuICogU3BlY3VsYXJCYXNpY01ldGhvZCBwcm92aWRlcyB0aGUgZGVmYXVsdCBzaGFkaW5nIG1ldGhvZCBmb3IgQmxpbm4tUGhvbmcgc3BlY3VsYXIgaGlnaGxpZ2h0cyAoYW4gb3B0aW1pemVkIGJ1dCBhcHByb3hpbWF0ZWRcbiAqIHZlcnNpb24gb2YgUGhvbmcgc3BlY3VsYXJpdHkpLlxuICovXG5jbGFzcyBTcGVjdWxhckJhc2ljTWV0aG9kIGV4dGVuZHMgTGlnaHRpbmdNZXRob2RCYXNlXG57XG5cdHB1YmxpYyBfcFVzZVRleHR1cmU6Ym9vbGVhbjtcblx0cHVibGljIF9wVG90YWxMaWdodENvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblx0cHVibGljIF9wU3BlY3VsYXJUZXh0dXJlUmVnaXN0ZXI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRwdWJsaWMgX3BTcGVjdWxhclRleERhdGE6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRwdWJsaWMgX3BTcGVjdWxhckRhdGFSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0cHJpdmF0ZSBfdGV4dHVyZTpUZXh0dXJlMkRCYXNlO1xuXG5cdHByaXZhdGUgX2dsb3NzOm51bWJlciA9IDUwO1xuXHRwcml2YXRlIF9zcGVjdWxhcjpudW1iZXIgPSAxO1xuXHRwcml2YXRlIF9zcGVjdWxhckNvbG9yOm51bWJlciA9IDB4ZmZmZmZmO1xuXHRwdWJsaWMgX2lTcGVjdWxhclI6bnVtYmVyID0gMTtcblx0cHVibGljIF9pU3BlY3VsYXJHOm51bWJlciA9IDE7XG5cdHB1YmxpYyBfaVNwZWN1bGFyQjpudW1iZXIgPSAxO1xuXHRwdWJsaWMgX3BJc0ZpcnN0TGlnaHQ6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBTcGVjdWxhckJhc2ljTWV0aG9kIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgaUlzVXNlZChzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QpOmJvb2xlYW5cblx0e1xuXHRcdGlmICghc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUluaXRWTyhzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ubmVlZHNVViA9IHRoaXMuX3BVc2VUZXh0dXJlO1xuXHRcdG1ldGhvZFZPLm5lZWRzTm9ybWFscyA9IHNoYWRlck9iamVjdC5udW1MaWdodHMgPiAwO1xuXHRcdG1ldGhvZFZPLm5lZWRzVmlldyA9IHNoYWRlck9iamVjdC5udW1MaWdodHMgPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzaGFycG5lc3Mgb2YgdGhlIHNwZWN1bGFyIGhpZ2hsaWdodC5cblx0ICovXG5cdHB1YmxpYyBnZXQgZ2xvc3MoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9nbG9zcztcblx0fVxuXG5cdHB1YmxpYyBzZXQgZ2xvc3ModmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fZ2xvc3MgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgb3ZlcmFsbCBzdHJlbmd0aCBvZiB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0cy5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXIoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9zcGVjdWxhcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgc3BlY3VsYXIodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHZhbHVlID09IHRoaXMuX3NwZWN1bGFyKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fc3BlY3VsYXIgPSB2YWx1ZTtcblx0XHR0aGlzLnVwZGF0ZVNwZWN1bGFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNvbG91ciBvZiB0aGUgc3BlY3VsYXIgcmVmbGVjdGlvbiBvZiB0aGUgc3VyZmFjZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXJDb2xvcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyQ29sb3I7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNwZWN1bGFyQ29sb3IodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NwZWN1bGFyQ29sb3IgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHQvLyBzcGVjdWxhciBpcyBub3cgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWRcblx0XHRpZiAodGhpcy5fc3BlY3VsYXJDb2xvciA9PSAwIHx8IHZhbHVlID09IDApXG5cdFx0XHR0aGlzLmlJbnZhbGlkYXRlU2hhZGVyUHJvZ3JhbSgpO1xuXG5cdFx0dGhpcy5fc3BlY3VsYXJDb2xvciA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlU3BlY3VsYXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYml0bWFwRGF0YSB0aGF0IGVuY29kZXMgdGhlIHNwZWN1bGFyIGhpZ2hsaWdodCBzdHJlbmd0aCBwZXIgdGV4ZWwgaW4gdGhlIHJlZCBjaGFubmVsLCBhbmQgdGhlIHNoYXJwbmVzc1xuXHQgKiBpbiB0aGUgZ3JlZW4gY2hhbm5lbC4gWW91IGNhbiB1c2UgU3BlY3VsYXJCaXRtYXBUZXh0dXJlIGlmIHlvdSB3YW50IHRvIGVhc2lseSBzZXQgc3BlY3VsYXIgYW5kIGdsb3NzIG1hcHNcblx0ICogZnJvbSBncmF5c2NhbGUgaW1hZ2VzLCBidXQgcHJlcGFyZWQgaW1hZ2VzIGFyZSBwcmVmZXJyZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHRleHR1cmUoKTpUZXh0dXJlMkRCYXNlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgdGV4dHVyZSh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHR7XG5cdFx0dmFyIGI6Ym9vbGVhbiA9ICggdmFsdWUgIT0gbnVsbCApO1xuXG5cdFx0aWYgKGIgIT0gdGhpcy5fcFVzZVRleHR1cmUgfHwgKHZhbHVlICYmIHRoaXMuX3RleHR1cmUgJiYgKHZhbHVlLmhhc01pcG1hcHMgIT0gdGhpcy5fdGV4dHVyZS5oYXNNaXBtYXBzIHx8IHZhbHVlLmZvcm1hdCAhPSB0aGlzLl90ZXh0dXJlLmZvcm1hdCkpKVxuXHRcdFx0dGhpcy5pSW52YWxpZGF0ZVNoYWRlclByb2dyYW0oKTtcblxuXHRcdHRoaXMuX3BVc2VUZXh0dXJlID0gYjtcblx0XHR0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGNvcHlGcm9tKG1ldGhvZDpTaGFkaW5nTWV0aG9kQmFzZSlcblx0e1xuXG5cdFx0dmFyIG06YW55ID0gbWV0aG9kO1xuXHRcdHZhciBic206U3BlY3VsYXJCYXNpY01ldGhvZCA9IDxTcGVjdWxhckJhc2ljTWV0aG9kPiBtZXRob2Q7XG5cblx0XHR2YXIgc3BlYzpTcGVjdWxhckJhc2ljTWV0aG9kID0gYnNtOy8vU3BlY3VsYXJCYXNpY01ldGhvZChtZXRob2QpO1xuXHRcdHRoaXMudGV4dHVyZSA9IHNwZWMudGV4dHVyZTtcblx0XHR0aGlzLnNwZWN1bGFyID0gc3BlYy5zcGVjdWxhcjtcblx0XHR0aGlzLnNwZWN1bGFyQ29sb3IgPSBzcGVjLnNwZWN1bGFyQ29sb3I7XG5cdFx0dGhpcy5nbG9zcyA9IHNwZWMuZ2xvc3M7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpQ2xlYW5Db21waWxhdGlvbkRhdGEoKVxuXHR7XG5cdFx0c3VwZXIuaUNsZWFuQ29tcGlsYXRpb25EYXRhKCk7XG5cdFx0dGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyA9IG51bGw7XG5cdFx0dGhpcy5fcFNwZWN1bGFyVGV4dHVyZVJlZ2lzdGVyID0gbnVsbDtcblx0XHR0aGlzLl9wU3BlY3VsYXJUZXhEYXRhID0gbnVsbDtcblx0XHR0aGlzLl9wU3BlY3VsYXJEYXRhUmVnaXN0ZXIgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50UHJlTGlnaHRpbmdDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXG5cdFx0dGhpcy5fcElzRmlyc3RMaWdodCA9IHRydWU7XG5cblx0XHR0aGlzLl9wU3BlY3VsYXJEYXRhUmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cdFx0bWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IHRoaXMuX3BTcGVjdWxhckRhdGFSZWdpc3Rlci5pbmRleCo0O1xuXG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKSB7XG5cblx0XHRcdHRoaXMuX3BTcGVjdWxhclRleERhdGEgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHRoaXMuX3BTcGVjdWxhclRleERhdGEsIDEpO1xuXHRcdFx0dGhpcy5fcFNwZWN1bGFyVGV4dHVyZVJlZ2lzdGVyID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXHRcdFx0bWV0aG9kVk8udGV4dHVyZXNJbmRleCA9IHRoaXMuX3BTcGVjdWxhclRleHR1cmVSZWdpc3Rlci5pbmRleDtcblx0XHRcdGNvZGUgPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUodGhpcy5fcFNwZWN1bGFyVGV4RGF0YSwgc2hhcmVkUmVnaXN0ZXJzLCB0aGlzLl9wU3BlY3VsYXJUZXh0dXJlUmVnaXN0ZXIsIHRoaXMuX3RleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzLCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZyk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLl9wU3BlY3VsYXJUZXh0dXJlUmVnaXN0ZXIgPSBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnLCAxKTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZVBlckxpZ2h0KHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIGxpZ2h0RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgbGlnaHRDb2xSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHRpZiAodGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0dCA9IHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHQsIDEpO1xuXHRcdH1cblxuXHRcdHZhciB2aWV3RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQ7XG5cdFx0dmFyIG5vcm1hbFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSBzaGFyZWRSZWdpc3RlcnMubm9ybWFsRnJhZ21lbnQ7XG5cblx0XHQvLyBibGlubi1waG9uZyBoYWxmIHZlY3RvciBtb2RlbFxuXHRcdGNvZGUgKz0gXCJhZGQgXCIgKyB0ICsgXCIsIFwiICsgbGlnaHREaXJSZWcgKyBcIiwgXCIgKyB2aWV3RGlyUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwibnJtIFwiICsgdCArIFwiLnh5eiwgXCIgKyB0ICsgXCJcXG5cIiArXG5cdFx0XHRcdFwiZHAzIFwiICsgdCArIFwiLncsIFwiICsgbm9ybWFsUmVnICsgXCIsIFwiICsgdCArIFwiXFxuXCIgK1xuXHRcdFx0XHRcInNhdCBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53XFxuXCI7XG5cblx0XHRpZiAodGhpcy5fcFVzZVRleHR1cmUpIHtcblx0XHRcdC8vIGFwcGx5IGdsb3NzIG1vZHVsYXRpb24gZnJvbSB0ZXh0dXJlXG5cdFx0XHRjb2RlICs9IFwibXVsIFwiICsgdGhpcy5fcFNwZWN1bGFyVGV4RGF0YSArIFwiLncsIFwiICsgdGhpcy5fcFNwZWN1bGFyVGV4RGF0YSArIFwiLnksIFwiICsgdGhpcy5fcFNwZWN1bGFyRGF0YVJlZ2lzdGVyICsgXCIud1xcblwiICtcblx0XHRcdFx0XHRcInBvdyBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53LCBcIiArIHRoaXMuX3BTcGVjdWxhclRleERhdGEgKyBcIi53XFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvZGUgKz0gXCJwb3cgXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIudywgXCIgKyB0aGlzLl9wU3BlY3VsYXJEYXRhUmVnaXN0ZXIgKyBcIi53XFxuXCI7XG5cdFx0fVxuXG5cdFx0Ly8gYXR0ZW51YXRlXG5cdFx0aWYgKHNoYWRlck9iamVjdC51c2VzTGlnaHRGYWxsT2ZmKVxuXHRcdFx0Y29kZSArPSBcIm11bCBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53LCBcIiArIGxpZ2h0RGlyUmVnICsgXCIud1xcblwiO1xuXG5cdFx0aWYgKHRoaXMuX2lNb2R1bGF0ZU1ldGhvZCAhPSBudWxsKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pTW9kdWxhdGVNZXRob2Qoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgdCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0ICsgXCIueHl6LCBcIiArIGxpZ2h0Q29sUmVnICsgXCIsIFwiICsgdCArIFwiLndcXG5cIjtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudENvZGVQZXJQcm9iZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPLCBjdWJlTWFwUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgd2VpZ2h0UmVnaXN0ZXI6c3RyaW5nLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdDpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHQvLyB3cml0ZSBpbiB0ZW1wb3JhcnkgaWYgbm90IGZpcnN0IGxpZ2h0LCBzbyB3ZSBjYW4gYWRkIHRvIHRvdGFsIGRpZmZ1c2UgY29sb3VyXG5cdFx0aWYgKHRoaXMuX3BJc0ZpcnN0TGlnaHQpIHtcblx0XHRcdHQgPSB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0LCAxKTtcblx0XHR9XG5cblx0XHR2YXIgbm9ybWFsUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudDtcblx0XHR2YXIgdmlld0RpclJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSBzaGFyZWRSZWdpc3RlcnMudmlld0RpckZyYWdtZW50O1xuXG5cdFx0Y29kZSArPSBcImRwMyBcIiArIHQgKyBcIi53LCBcIiArIG5vcm1hbFJlZyArIFwiLCBcIiArIHZpZXdEaXJSZWcgKyBcIlxcblwiICtcblx0XHRcdFx0XCJhZGQgXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIudywgXCIgKyB0ICsgXCIud1xcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0ICsgXCIsIFwiICsgdCArIFwiLncsIFwiICsgbm9ybWFsUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwic3ViIFwiICsgdCArIFwiLCBcIiArIHQgKyBcIiwgXCIgKyB2aWV3RGlyUmVnICsgXCJcXG5cIiArXG5cdFx0XHRcdFwidGV4IFwiICsgdCArIFwiLCBcIiArIHQgKyBcIiwgXCIgKyBjdWJlTWFwUmVnICsgXCIgPGN1YmUsXCIgKyAoc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBcImxpbmVhclwiOlwibmVhcmVzdFwiKSArIFwiLG1pcGxpbmVhcj5cXG5cIiArXG5cdFx0XHRcdFwibXVsIFwiICsgdCArIFwiLnh5eiwgXCIgKyB0ICsgXCIsIFwiICsgd2VpZ2h0UmVnaXN0ZXIgKyBcIlxcblwiO1xuXG5cdFx0aWYgKHRoaXMuX2lNb2R1bGF0ZU1ldGhvZCAhPSBudWxsKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pTW9kdWxhdGVNZXRob2Qoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgdCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGlmICghdGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHQgKyBcIlxcblwiO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAoc2hhcmVkUmVnaXN0ZXJzLnNoYWRvd1RhcmdldClcblx0XHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIueHl6LCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0ICsgXCIud1xcblwiO1xuXG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKSB7XG5cdFx0XHQvLyBhcHBseSBzdHJlbmd0aCBtb2R1bGF0aW9uIGZyb20gdGV4dHVyZVxuXHRcdFx0Y29kZSArPSBcIm11bCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHRoaXMuX3BTcGVjdWxhclRleERhdGEgKyBcIi54XFxuXCI7XG5cdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHRoaXMuX3BTcGVjdWxhclRleERhdGEpO1xuXHRcdH1cblxuXHRcdC8vIGFwcGx5IG1hdGVyaWFsJ3Mgc3BlY3VsYXIgcmVmbGVjdGlvblxuXHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIueHl6LCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIiwgXCIgKyB0aGlzLl9wU3BlY3VsYXJEYXRhUmVnaXN0ZXIgKyBcIlxcblwiICtcblx0XHRcdFwiYWRkIFwiICsgdGFyZ2V0UmVnICsgXCIueHl6LCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIlxcblwiO1xuXHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlBY3RpdmF0ZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdGlmICh0aGlzLl9wVXNlVGV4dHVyZSkge1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLnNldFNhbXBsZXJTdGF0ZUF0KG1ldGhvZFZPLnRleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcz8gQ29udGV4dEdMV3JhcE1vZGUuUkVQRUFUOkNvbnRleHRHTFdyYXBNb2RlLkNMQU1QLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXM/IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSOkNvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVI6Q29udGV4dEdMTWlwRmlsdGVyLk1JUE5PTkUpO1xuXHRcdFx0KDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQpLmFjdGl2YXRlVGV4dHVyZShtZXRob2RWTy50ZXh0dXJlc0luZGV4LCB0aGlzLl90ZXh0dXJlKTtcblx0XHR9XG5cblx0XHR2YXIgaW5kZXg6bnVtYmVyID0gbWV0aG9kVk8uZnJhZ21lbnRDb25zdGFudHNJbmRleDtcblx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdGRhdGFbaW5kZXhdID0gdGhpcy5faVNwZWN1bGFyUjtcblx0XHRkYXRhW2luZGV4ICsgMV0gPSB0aGlzLl9pU3BlY3VsYXJHO1xuXHRcdGRhdGFbaW5kZXggKyAyXSA9IHRoaXMuX2lTcGVjdWxhckI7XG5cdFx0ZGF0YVtpbmRleCArIDNdID0gdGhpcy5fZ2xvc3M7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgc3BlY3VsYXIgY29sb3IgZGF0YSB1c2VkIGJ5IHRoZSByZW5kZXIgc3RhdGUuXG5cdCAqL1xuXHRwcml2YXRlIHVwZGF0ZVNwZWN1bGFyKClcblx0e1xuXHRcdHRoaXMuX2lTcGVjdWxhclIgPSAoKCB0aGlzLl9zcGVjdWxhckNvbG9yID4+IDE2KSAmIDB4ZmYpLzB4ZmYqdGhpcy5fc3BlY3VsYXI7XG5cdFx0dGhpcy5faVNwZWN1bGFyRyA9ICgoIHRoaXMuX3NwZWN1bGFyQ29sb3IgPj4gOCkgJiAweGZmKS8weGZmKnRoaXMuX3NwZWN1bGFyO1xuXHRcdHRoaXMuX2lTcGVjdWxhckIgPSAoIHRoaXMuX3NwZWN1bGFyQ29sb3IgJiAweGZmKS8weGZmKnRoaXMuX3NwZWN1bGFyO1xuXHR9XG59XG5cbmV4cG9ydCA9IFNwZWN1bGFyQmFzaWNNZXRob2Q7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9zcGVjdWxhcmJhc2ljbWV0aG9kLnRzIl0sIm5hbWVzIjpbIlNwZWN1bGFyQmFzaWNNZXRob2QiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmNvbnN0cnVjdG9yIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pSXNVc2VkIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pSW5pdFZPIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5nbG9zcyIsIlNwZWN1bGFyQmFzaWNNZXRob2Quc3BlY3VsYXIiLCJTcGVjdWxhckJhc2ljTWV0aG9kLnNwZWN1bGFyQ29sb3IiLCJTcGVjdWxhckJhc2ljTWV0aG9kLnRleHR1cmUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmNvcHlGcm9tIiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pQ2xlYW5Db21waWxhdGlvbkRhdGEiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSIsIlNwZWN1bGFyQmFzaWNNZXRob2QuaUdldEZyYWdtZW50Q29kZVBlckxpZ2h0IiwiU3BlY3VsYXJCYXNpY01ldGhvZC5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUiLCJTcGVjdWxhckJhc2ljTWV0aG9kLmlBY3RpdmF0ZSIsIlNwZWN1bGFyQmFzaWNNZXRob2QudXBkYXRlU3BlY3VsYXIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQU8sa0JBQWtCLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUNwRixJQUFPLHNCQUFzQixXQUFZLGdEQUFnRCxDQUFDLENBQUM7QUFDM0YsSUFBTyxpQkFBaUIsV0FBYSwyQ0FBMkMsQ0FBQyxDQUFDO0FBT2xGLElBQU8sa0JBQWtCLFdBQWEseURBQXlELENBQUMsQ0FBQztBQUVqRyxJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcs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QSxDQUFDQSxjQUFjQSxJQUFJQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxHQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUM3RUEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsQ0FBQ0EsQ0FBRUEsSUFBSUEsQ0FBQ0EsY0FBY0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsSUFBSUEsR0FBQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFDNUVBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLENBQUVBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLEdBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO0lBQ3RFQSxDQUFDQTtJQUNGZiwwQkFBQ0E7QUFBREEsQ0E3VEEsQUE2VENBLEVBN1RpQyxrQkFBa0IsRUE2VG5EO0FBRUQsQUFBNkIsaUJBQXBCLG1CQUFtQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9tZXRob2RzL1NwZWN1bGFyQmFzaWNNZXRob2QuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZpbHRlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlckxpZ2h0aW5nT2JqZWN0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJMaWdodGluZ09iamVjdFwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBMaWdodGluZ01ldGhvZEJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvTGlnaHRpbmdNZXRob2RCYXNlXCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRpbmdNZXRob2RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBTcGVjdWxhckJhc2ljTWV0aG9kIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHNoYWRpbmcgbWV0aG9kIGZvciBCbGlubi1QaG9uZyBzcGVjdWxhciBoaWdobGlnaHRzIChhbiBvcHRpbWl6ZWQgYnV0IGFwcHJveGltYXRlZFxuICogdmVyc2lvbiBvZiBQaG9uZyBzcGVjdWxhcml0eSkuXG4gKi9cbmNsYXNzIFNwZWN1bGFyQmFzaWNNZXRob2QgZXh0ZW5kcyBMaWdodGluZ01ldGhvZEJhc2Vcbntcblx0cHVibGljIF9wVXNlVGV4dHVyZTpib29sZWFuO1xuXHRwdWJsaWMgX3BUb3RhbExpZ2h0Q29sb3JSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50O1xuXHRwdWJsaWMgX3BTcGVjdWxhclRleHR1cmVSZWdpc3RlcjpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cdHB1YmxpYyBfcFNwZWN1bGFyVGV4RGF0YTpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cdHB1YmxpYyBfcFNwZWN1bGFyRGF0YVJlZ2lzdGVyOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRwcml2YXRlIF90ZXh0dXJlOlRleHR1cmUyREJhc2U7XG5cblx0cHJpdmF0ZSBfZ2xvc3M6bnVtYmVyID0gNTA7XG5cdHByaXZhdGUgX3NwZWN1bGFyOm51bWJlciA9IDE7XG5cdHByaXZhdGUgX3NwZWN1bGFyQ29sb3I6bnVtYmVyID0gMHhmZmZmZmY7XG5cdHB1YmxpYyBfaVNwZWN1bGFyUjpudW1iZXIgPSAxO1xuXHRwdWJsaWMgX2lTcGVjdWxhckc6bnVtYmVyID0gMTtcblx0cHVibGljIF9pU3BlY3VsYXJCOm51bWJlciA9IDE7XG5cdHB1YmxpYyBfcElzRmlyc3RMaWdodDpib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFNwZWN1bGFyQmFzaWNNZXRob2Qgb2JqZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBpSXNVc2VkKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCk6Ym9vbGVhblxuXHR7XG5cdFx0aWYgKCFzaGFkZXJPYmplY3QubnVtTGlnaHRzKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpSW5pdFZPKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8pXG5cdHtcblx0XHRtZXRob2RWTy5uZWVkc1VWID0gdGhpcy5fcFVzZVRleHR1cmU7XG5cdFx0bWV0aG9kVk8ubmVlZHNOb3JtYWxzID0gc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cyA+IDA7XG5cdFx0bWV0aG9kVk8ubmVlZHNWaWV3ID0gc2hhZGVyT2JqZWN0Lm51bUxpZ2h0cyA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHNoYXJwbmVzcyBvZiB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0LlxuXHQgKi9cblx0cHVibGljIGdldCBnbG9zcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2dsb3NzO1xuXHR9XG5cblx0cHVibGljIHNldCBnbG9zcyh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9nbG9zcyA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBvdmVyYWxsIHN0cmVuZ3RoIG9mIHRoZSBzcGVjdWxhciBoaWdobGlnaHRzLlxuXHQgKi9cblx0cHVibGljIGdldCBzcGVjdWxhcigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3NwZWN1bGFyO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhcih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodmFsdWUgPT0gdGhpcy5fc3BlY3VsYXIpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9zcGVjdWxhciA9IHZhbHVlO1xuXHRcdHRoaXMudXBkYXRlU3BlY3VsYXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY29sb3VyIG9mIHRoZSBzcGVjdWxhciByZWZsZWN0aW9uIG9mIHRoZSBzdXJmYWNlLlxuXHQgKi9cblx0cHVibGljIGdldCBzcGVjdWxhckNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fc3BlY3VsYXJDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgc3BlY3VsYXJDb2xvcih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fc3BlY3VsYXJDb2xvciA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIHNwZWN1bGFyIGlzIG5vdyBlaXRoZXIgZW5hYmxlZCBvciBkaXNhYmxlZFxuXHRcdGlmICh0aGlzLl9zcGVjdWxhckNvbG9yID09IDAgfHwgdmFsdWUgPT0gMClcblx0XHRcdHRoaXMuaUludmFsaWRhdGVTaGFkZXJQcm9ncmFtKCk7XG5cblx0XHR0aGlzLl9zcGVjdWxhckNvbG9yID0gdmFsdWU7XG5cdFx0dGhpcy51cGRhdGVTcGVjdWxhcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBiaXRtYXBEYXRhIHRoYXQgZW5jb2RlcyB0aGUgc3BlY3VsYXIgaGlnaGxpZ2h0IHN0cmVuZ3RoIHBlciB0ZXhlbCBpbiB0aGUgcmVkIGNoYW5uZWwsIGFuZCB0aGUgc2hhcnBuZXNzXG5cdCAqIGluIHRoZSBncmVlbiBjaGFubmVsLiBZb3UgY2FuIHVzZSBTcGVjdWxhckJpdG1hcFRleHR1cmUgaWYgeW91IHdhbnQgdG8gZWFzaWx5IHNldCBzcGVjdWxhciBhbmQgZ2xvc3MgbWFwc1xuXHQgKiBmcm9tIGdyYXlzY2FsZSBpbWFnZXMsIGJ1dCBwcmVwYXJlZCBpbWFnZXMgYXJlIHByZWZlcnJlZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgdGV4dHVyZSgpOlRleHR1cmUyREJhc2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlO1xuXHR9XG5cblx0cHVibGljIHNldCB0ZXh0dXJlKHZhbHVlOlRleHR1cmUyREJhc2UpXG5cdHtcblx0XHR2YXIgYjpib29sZWFuID0gKCB2YWx1ZSAhPSBudWxsICk7XG5cblx0XHRpZiAoYiAhPSB0aGlzLl9wVXNlVGV4dHVyZSB8fCAodmFsdWUgJiYgdGhpcy5fdGV4dHVyZSAmJiAodmFsdWUuaGFzTWlwbWFwcyAhPSB0aGlzLl90ZXh0dXJlLmhhc01pcG1hcHMgfHwgdmFsdWUuZm9ybWF0ICE9IHRoaXMuX3RleHR1cmUuZm9ybWF0KSkpXG5cdFx0XHR0aGlzLmlJbnZhbGlkYXRlU2hhZGVyUHJvZ3JhbSgpO1xuXG5cdFx0dGhpcy5fcFVzZVRleHR1cmUgPSBiO1xuXHRcdHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgY29weUZyb20obWV0aG9kOlNoYWRpbmdNZXRob2RCYXNlKVxuXHR7XG5cblx0XHR2YXIgbTphbnkgPSBtZXRob2Q7XG5cdFx0dmFyIGJzbTpTcGVjdWxhckJhc2ljTWV0aG9kID0gPFNwZWN1bGFyQmFzaWNNZXRob2Q+IG1ldGhvZDtcblxuXHRcdHZhciBzcGVjOlNwZWN1bGFyQmFzaWNNZXRob2QgPSBic207Ly9TcGVjdWxhckJhc2ljTWV0aG9kKG1ldGhvZCk7XG5cdFx0dGhpcy50ZXh0dXJlID0gc3BlYy50ZXh0dXJlO1xuXHRcdHRoaXMuc3BlY3VsYXIgPSBzcGVjLnNwZWN1bGFyO1xuXHRcdHRoaXMuc3BlY3VsYXJDb2xvciA9IHNwZWMuc3BlY3VsYXJDb2xvcjtcblx0XHR0aGlzLmdsb3NzID0gc3BlYy5nbG9zcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIGlDbGVhbkNvbXBpbGF0aW9uRGF0YSgpXG5cdHtcblx0XHRzdXBlci5pQ2xlYW5Db21waWxhdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnID0gbnVsbDtcblx0XHR0aGlzLl9wU3BlY3VsYXJUZXh0dXJlUmVnaXN0ZXIgPSBudWxsO1xuXHRcdHRoaXMuX3BTcGVjdWxhclRleERhdGEgPSBudWxsO1xuXHRcdHRoaXMuX3BTcGVjdWxhckRhdGFSZWdpc3RlciA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRQcmVMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHR0aGlzLl9wSXNGaXJzdExpZ2h0ID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3BTcGVjdWxhckRhdGFSZWdpc3RlciA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHRtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4ID0gdGhpcy5fcFNwZWN1bGFyRGF0YVJlZ2lzdGVyLmluZGV4KjQ7XG5cblx0XHRpZiAodGhpcy5fcFVzZVRleHR1cmUpIHtcblxuXHRcdFx0dGhpcy5fcFNwZWN1bGFyVGV4RGF0YSA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModGhpcy5fcFNwZWN1bGFyVGV4RGF0YSwgMSk7XG5cdFx0XHR0aGlzLl9wU3BlY3VsYXJUZXh0dXJlUmVnaXN0ZXIgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0XHRtZXRob2RWTy50ZXh0dXJlc0luZGV4ID0gdGhpcy5fcFNwZWN1bGFyVGV4dHVyZVJlZ2lzdGVyLmluZGV4O1xuXHRcdFx0Y29kZSA9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSh0aGlzLl9wU3BlY3VsYXJUZXhEYXRhLCBzaGFyZWRSZWdpc3RlcnMsIHRoaXMuX3BTcGVjdWxhclRleHR1cmVSZWdpc3RlciwgdGhpcy5fdGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHRoaXMuX3BTcGVjdWxhclRleHR1cmVSZWdpc3RlciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcsIDEpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBpR2V0RnJhZ21lbnRDb2RlUGVyTGlnaHQoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCBtZXRob2RWTzpNZXRob2RWTywgbGlnaHREaXJSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBsaWdodENvbFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0OlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdGlmICh0aGlzLl9wSXNGaXJzdExpZ2h0KSB7XG5cdFx0XHR0ID0gdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModCwgMSk7XG5cdFx0fVxuXG5cdFx0dmFyIHZpZXdEaXJSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gc2hhcmVkUmVnaXN0ZXJzLnZpZXdEaXJGcmFnbWVudDtcblx0XHR2YXIgbm9ybWFsUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudDtcblxuXHRcdC8vIGJsaW5uLXBob25nIGhhbGYgdmVjdG9yIG1vZGVsXG5cdFx0Y29kZSArPSBcImFkZCBcIiArIHQgKyBcIiwgXCIgKyBsaWdodERpclJlZyArIFwiLCBcIiArIHZpZXdEaXJSZWcgKyBcIlxcblwiICtcblx0XHRcdFx0XCJucm0gXCIgKyB0ICsgXCIueHl6LCBcIiArIHQgKyBcIlxcblwiICtcblx0XHRcdFx0XCJkcDMgXCIgKyB0ICsgXCIudywgXCIgKyBub3JtYWxSZWcgKyBcIiwgXCIgKyB0ICsgXCJcXG5cIiArXG5cdFx0XHRcdFwic2F0IFwiICsgdCArIFwiLncsIFwiICsgdCArIFwiLndcXG5cIjtcblxuXHRcdGlmICh0aGlzLl9wVXNlVGV4dHVyZSkge1xuXHRcdFx0Ly8gYXBwbHkgZ2xvc3MgbW9kdWxhdGlvbiBmcm9tIHRleHR1cmVcblx0XHRcdGNvZGUgKz0gXCJtdWwgXCIgKyB0aGlzLl9wU3BlY3VsYXJUZXhEYXRhICsgXCIudywgXCIgKyB0aGlzLl9wU3BlY3VsYXJUZXhEYXRhICsgXCIueSwgXCIgKyB0aGlzLl9wU3BlY3VsYXJEYXRhUmVnaXN0ZXIgKyBcIi53XFxuXCIgK1xuXHRcdFx0XHRcdFwicG93IFwiICsgdCArIFwiLncsIFwiICsgdCArIFwiLncsIFwiICsgdGhpcy5fcFNwZWN1bGFyVGV4RGF0YSArIFwiLndcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29kZSArPSBcInBvdyBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53LCBcIiArIHRoaXMuX3BTcGVjdWxhckRhdGFSZWdpc3RlciArIFwiLndcXG5cIjtcblx0XHR9XG5cblx0XHQvLyBhdHRlbnVhdGVcblx0XHRpZiAoc2hhZGVyT2JqZWN0LnVzZXNMaWdodEZhbGxPZmYpXG5cdFx0XHRjb2RlICs9IFwibXVsIFwiICsgdCArIFwiLncsIFwiICsgdCArIFwiLncsIFwiICsgbGlnaHREaXJSZWcgKyBcIi53XFxuXCI7XG5cblx0XHRpZiAodGhpcy5faU1vZHVsYXRlTWV0aG9kICE9IG51bGwpXG5cdFx0XHRjb2RlICs9IHRoaXMuX2lNb2R1bGF0ZU1ldGhvZChzaGFkZXJPYmplY3QsIG1ldGhvZFZPLCB0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0Y29kZSArPSBcIm11bCBcIiArIHQgKyBcIi54eXosIFwiICsgbGlnaHRDb2xSZWcgKyBcIiwgXCIgKyB0ICsgXCIud1xcblwiO1xuXG5cdFx0aWYgKCF0aGlzLl9wSXNGaXJzdExpZ2h0KSB7XG5cdFx0XHRjb2RlICs9IFwiYWRkIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLnh5eiwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIsIFwiICsgdCArIFwiXFxuXCI7XG5cdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BJc0ZpcnN0TGlnaHQgPSBmYWxzZTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50Q29kZVBlclByb2JlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIGN1YmVNYXBSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB3ZWlnaHRSZWdpc3RlcjpzdHJpbmcsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0OlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdC8vIHdyaXRlIGluIHRlbXBvcmFyeSBpZiBub3QgZmlyc3QgbGlnaHQsIHNvIHdlIGNhbiBhZGQgdG8gdG90YWwgZGlmZnVzZSBjb2xvdXJcblx0XHRpZiAodGhpcy5fcElzRmlyc3RMaWdodCkge1xuXHRcdFx0dCA9IHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHQsIDEpO1xuXHRcdH1cblxuXHRcdHZhciBub3JtYWxSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50O1xuXHRcdHZhciB2aWV3RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQ7XG5cblx0XHRjb2RlICs9IFwiZHAzIFwiICsgdCArIFwiLncsIFwiICsgbm9ybWFsUmVnICsgXCIsIFwiICsgdmlld0RpclJlZyArIFwiXFxuXCIgK1xuXHRcdFx0XHRcImFkZCBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53LCBcIiArIHQgKyBcIi53XFxuXCIgK1xuXHRcdFx0XHRcIm11bCBcIiArIHQgKyBcIiwgXCIgKyB0ICsgXCIudywgXCIgKyBub3JtYWxSZWcgKyBcIlxcblwiICtcblx0XHRcdFx0XCJzdWIgXCIgKyB0ICsgXCIsIFwiICsgdCArIFwiLCBcIiArIHZpZXdEaXJSZWcgKyBcIlxcblwiICtcblx0XHRcdFx0XCJ0ZXggXCIgKyB0ICsgXCIsIFwiICsgdCArIFwiLCBcIiArIGN1YmVNYXBSZWcgKyBcIiA8Y3ViZSxcIiArIChzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXM/IFwibGluZWFyXCI6XCJuZWFyZXN0XCIpICsgXCIsbWlwbGluZWFyPlxcblwiICtcblx0XHRcdFx0XCJtdWwgXCIgKyB0ICsgXCIueHl6LCBcIiArIHQgKyBcIiwgXCIgKyB3ZWlnaHRSZWdpc3RlciArIFwiXFxuXCI7XG5cblx0XHRpZiAodGhpcy5faU1vZHVsYXRlTWV0aG9kICE9IG51bGwpXG5cdFx0XHRjb2RlICs9IHRoaXMuX2lNb2R1bGF0ZU1ldGhvZChzaGFkZXJPYmplY3QsIG1ldGhvZFZPLCB0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0aWYgKCF0aGlzLl9wSXNGaXJzdExpZ2h0KSB7XG5cdFx0XHRjb2RlICs9IFwiYWRkIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLnh5eiwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIsIFwiICsgdCArIFwiXFxuXCI7XG5cdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BJc0ZpcnN0TGlnaHQgPSBmYWxzZTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUdldEZyYWdtZW50UG9zdExpZ2h0aW5nQ29kZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIG1ldGhvZFZPOk1ldGhvZFZPLCB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmIChzaGFyZWRSZWdpc3RlcnMuc2hhZG93VGFyZ2V0KVxuXHRcdFx0Y29kZSArPSBcIm11bCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQgKyBcIi53XFxuXCI7XG5cblx0XHRpZiAodGhpcy5fcFVzZVRleHR1cmUpIHtcblx0XHRcdC8vIGFwcGx5IHN0cmVuZ3RoIG1vZHVsYXRpb24gZnJvbSB0ZXh0dXJlXG5cdFx0XHRjb2RlICs9IFwibXVsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLnh5eiwgXCIgKyB0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnICsgXCIsIFwiICsgdGhpcy5fcFNwZWN1bGFyVGV4RGF0YSArIFwiLnhcXG5cIjtcblx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGhpcy5fcFNwZWN1bGFyVGV4RGF0YSk7XG5cdFx0fVxuXG5cdFx0Ly8gYXBwbHkgbWF0ZXJpYWwncyBzcGVjdWxhciByZWZsZWN0aW9uXG5cdFx0Y29kZSArPSBcIm11bCBcIiArIHRoaXMuX3BUb3RhbExpZ2h0Q29sb3JSZWcgKyBcIi54eXosIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiLCBcIiArIHRoaXMuX3BTcGVjdWxhckRhdGFSZWdpc3RlciArIFwiXFxuXCIgK1xuXHRcdFx0XCJhZGQgXCIgKyB0YXJnZXRSZWcgKyBcIi54eXosIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGhpcy5fcFRvdGFsTGlnaHRDb2xvclJlZyArIFwiXFxuXCI7XG5cdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZSh0aGlzLl9wVG90YWxMaWdodENvbG9yUmVnKTtcblxuXHRcdHJldHVybiBjb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgaUFjdGl2YXRlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbWV0aG9kVk86TWV0aG9kVk8sIHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BVc2VUZXh0dXJlKSB7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuc2V0U2FtcGxlclN0YXRlQXQobWV0aG9kVk8udGV4dHVyZXNJbmRleCwgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzPyBDb250ZXh0R0xXcmFwTW9kZS5SRVBFQVQ6Q29udGV4dEdMV3JhcE1vZGUuQ0xBTVAsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcz8gQ29udGV4dEdMVGV4dHVyZUZpbHRlci5MSU5FQVI6Q29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNULCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUjpDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVUZXh0dXJlKG1ldGhvZFZPLnRleHR1cmVzSW5kZXgsIHRoaXMuX3RleHR1cmUpO1xuXHRcdH1cblxuXHRcdHZhciBpbmRleDpudW1iZXIgPSBtZXRob2RWTy5mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdHZhciBkYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0ZGF0YVtpbmRleF0gPSB0aGlzLl9pU3BlY3VsYXJSO1xuXHRcdGRhdGFbaW5kZXggKyAxXSA9IHRoaXMuX2lTcGVjdWxhckc7XG5cdFx0ZGF0YVtpbmRleCArIDJdID0gdGhpcy5faVNwZWN1bGFyQjtcblx0XHRkYXRhW2luZGV4ICsgM10gPSB0aGlzLl9nbG9zcztcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBzcGVjdWxhciBjb2xvciBkYXRhIHVzZWQgYnkgdGhlIHJlbmRlciBzdGF0ZS5cblx0ICovXG5cdHByaXZhdGUgdXBkYXRlU3BlY3VsYXIoKVxuXHR7XG5cdFx0dGhpcy5faVNwZWN1bGFyUiA9ICgoIHRoaXMuX3NwZWN1bGFyQ29sb3IgPj4gMTYpICYgMHhmZikvMHhmZip0aGlzLl9zcGVjdWxhcjtcblx0XHR0aGlzLl9pU3BlY3VsYXJHID0gKCggdGhpcy5fc3BlY3VsYXJDb2xvciA+PiA4KSAmIDB4ZmYpLzB4ZmYqdGhpcy5fc3BlY3VsYXI7XG5cdFx0dGhpcy5faVNwZWN1bGFyQiA9ICggdGhpcy5fc3BlY3VsYXJDb2xvciAmIDB4ZmYpLzB4ZmYqdGhpcy5fc3BlY3VsYXI7XG5cdH1cbn1cblxuZXhwb3J0ID0gU3BlY3VsYXJCYXNpY01ldGhvZDsiXX0= \ No newline at end of file diff --git a/lib/materials/methods/SpecularBasicMethod.ts b/lib/materials/methods/SpecularBasicMethod.ts index 2565d9aa..82ae019e 100644 --- a/lib/materials/methods/SpecularBasicMethod.ts +++ b/lib/materials/methods/SpecularBasicMethod.ts @@ -1,10 +1,10 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/passes/DepthMapPass.js b/lib/materials/passes/DepthMapPass.js index f6bdd99a..5f3d64e4 100755 --- a/lib/materials/passes/DepthMapPass.js +++ b/lib/materials/passes/DepthMapPass.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -94,4 +94,4 @@ var DepthMapPass = (function (_super) { })(MaterialPassBase); module.exports = DepthMapPass; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL2RlcHRobWFwcGFzcy50cyJdLCJuYW1lcyI6WyJEZXB0aE1hcFBhc3MiLCJEZXB0aE1hcFBhc3MuY29uc3RydWN0b3IiLCJEZXB0aE1hcFBhc3MuX2lJbml0Q29uc3RhbnREYXRhIiwiRGVwdGhNYXBQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIkRlcHRoTWFwUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIkRlcHRoTWFwUGFzcy5faVJlbmRlciIsIkRlcHRoTWFwUGFzcy5faUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFPLGtCQUFrQixXQUFhLG9EQUFvRCxDQUFDLENBQUM7QUFDNUYsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBQ25HLElBQU8saUJBQWlCLFdBQWEsbURBQW1ELENBQUMsQ0FBQztBQVExRixJQUFPLGdCQUFnQixXQUFjLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxvQkFBb0IsV0FBYSx5REFBeUQsQ0FBQyxDQUFDO0FBRW5HLEFBSUE7OztHQURHO0lBQ0csWUFBWTtJQUFTQSxVQUFyQkEsWUFBWUEsVUFBeUJBO0lBSzFDQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxZQUFZQTtRQVloQkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBRUREOztPQUVHQTtJQUNJQSx5Q0FBa0JBLEdBQXpCQSxVQUEwQkEsWUFBNkJBO1FBRXRERSxnQkFBS0EsQ0FBQ0Esa0JBQWtCQSxZQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV2Q0EsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtRQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDMUJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFVBQVVBLENBQUNBO1FBQzdCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFDQSxLQUFLQSxDQUFDQTtRQUM1QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsR0FBR0EsR0FBQ0EsS0FBS0EsQ0FBQ0E7UUFDNUJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUNBLEtBQUtBLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxDQUFDQTtJQUN2QkEsQ0FBQ0E7SUFFTUYsNENBQXFCQSxHQUE1QkEsVUFBNkJBLFlBQTZCQTtRQUV6REcsWUFBWUEsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxDQUFDQTtRQUV0Q0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDbkNBLFlBQVlBLENBQUNBLGNBQWNBLEVBQUVBLENBQUNBO0lBQ2hDQSxDQUFDQTtJQUVESDs7T0FFR0E7SUFDSUEsd0NBQWlCQSxHQUF4QkEsVUFBeUJBLFlBQTZCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRTVISSxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNyQkEsSUFBSUEsU0FBU0EsR0FBeUJBLGVBQWVBLENBQUNBLFlBQVlBLENBQUNBO1FBQ25FQSxJQUFJQSxlQUFlQSxHQUF5QkEsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUM5RUEsSUFBSUEsUUFBUUEsR0FBeUJBLGFBQWFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFDN0VBLElBQUlBLFFBQVFBLEdBQXlCQSxhQUFhQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRTdFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLEdBQUdBLFFBQVFBLENBQUNBLEtBQUtBLEdBQUNBLENBQUNBLENBQUNBO1FBRWhEQSxJQUFJQSxLQUFLQSxHQUF5QkEsYUFBYUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxDQUFDQTtRQUM1RUEsYUFBYUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM5Q0EsSUFBSUEsS0FBS0EsR0FBeUJBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDNUVBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsS0FBS0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFOUNBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLGVBQWVBLENBQUNBLGtCQUFrQkEsR0FBR0EsSUFBSUEsR0FBR0EsZUFBZUEsQ0FBQ0Esa0JBQWtCQSxHQUFHQSxNQUFNQSxHQUN0SEEsTUFBTUEsR0FBR0EsS0FBS0EsR0FBR0EsSUFBSUEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsR0FBR0EsS0FBS0EsR0FBR0EsTUFBTUEsR0FDeERBLE1BQU1BLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQ3BDQSxNQUFNQSxHQUFHQSxLQUFLQSxHQUFHQSxJQUFJQSxHQUFHQSxLQUFLQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUU3REEsQUFHQUEsa0NBSGtDQTtRQUNsQ0EsNEJBQTRCQTtRQUU1QkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckNBLGVBQWVBLEdBQUdBLGFBQWFBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FB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aWFscy9wYXNzZXMvRGVwdGhNYXBQYXNzLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IE1hdHJpeDNEVXRpbHNcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEVXRpbHNcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTE1pcEZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRmlsdGVyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgQ29udGV4dEdMUHJvZ3JhbVR5cGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFByb2dyYW1UeXBlXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGb3JtYXRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xUZXh0dXJlRm9ybWF0XCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIERlcHRoTWFwUGFzcyBpcyBhIHBhc3MgdGhhdCB3cml0ZXMgZGVwdGggdmFsdWVzIHRvIGEgZGVwdGggbWFwIGFzIGEgMzItYml0IHZhbHVlIGV4cGxvZGVkIG92ZXIgdGhlIDQgdGV4dHVyZSBjaGFubmVscy5cbiAqIFRoaXMgaXMgdXNlZCB0byByZW5kZXIgc2hhZG93IG1hcHMsIGRlcHRoIG1hcHMsIGV0Yy5cbiAqL1xuY2xhc3MgRGVwdGhNYXBQYXNzIGV4dGVuZHMgTWF0ZXJpYWxQYXNzQmFzZVxue1xuXHRwcml2YXRlIF9mcmFnbWVudENvbnN0YW50c0luZGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGVwdGhNYXBQYXNzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byB3aGljaCB0aGlzIHBhc3MgYmVsb25ncy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHVuY2hhbmdpbmcgY29uc3RhbnQgZGF0YSBmb3IgdGhpcyBtYXRlcmlhbC5cblx0ICovXG5cdHB1YmxpYyBfaUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHRzdXBlci5faUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0KTtcblxuXHRcdHZhciBpbmRleDpudW1iZXIgPSB0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdHZhciBkYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0ZGF0YVtpbmRleF0gPSAxLjA7XG5cdFx0ZGF0YVtpbmRleCArIDFdID0gMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDJdID0gNjUwMjUuMDtcblx0XHRkYXRhW2luZGV4ICsgM10gPSAxNjU4MTM3NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA0XSA9IDEuMC8yNTUuMDtcblx0XHRkYXRhW2luZGV4ICsgNV0gPSAxLjAvMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDZdID0gMS4wLzI1NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA3XSA9IDAuMDtcblx0fVxuXG5cdHB1YmxpYyBfaUluY2x1ZGVEZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHRzaGFkZXJPYmplY3QucHJvamVjdGlvbkRlcGVuZGVuY2llcysrO1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRzaGFkZXJPYmplY3QudXZEZXBlbmRlbmNpZXMrKztcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQ7XG5cdFx0dmFyIGRpZmZ1c2VJbnB1dFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0dmFyIGRhdGFSZWcxOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgZGF0YVJlZzI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXG5cdFx0dGhpcy5fZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGRhdGFSZWcxLmluZGV4KjQ7XG5cblx0XHR2YXIgdGVtcDE6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModGVtcDEsIDEpO1xuXHRcdHZhciB0ZW1wMjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0ZW1wMiwgMSk7XG5cblx0XHRjb2RlICs9IFwiZGl2IFwiICsgdGVtcDEgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMucHJvamVjdGlvbkZyYWdtZW50ICsgXCIsIFwiICsgc2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCArIFwiLndcXG5cIiArIC8vXCJzdWIgZnQyLnosIGZjMC54LCBmdDIuelxcblwiICsgICAgLy9pbnZlcnRcblx0XHRcdFwibXVsIFwiICsgdGVtcDEgKyBcIiwgXCIgKyBkYXRhUmVnMSArIFwiLCBcIiArIHRlbXAxICsgXCIuelxcblwiICtcblx0XHRcdFwiZnJjIFwiICsgdGVtcDEgKyBcIiwgXCIgKyB0ZW1wMSArIFwiXFxuXCIgK1xuXHRcdFx0XCJtdWwgXCIgKyB0ZW1wMiArIFwiLCBcIiArIHRlbXAxICsgXCIueXp3dywgXCIgKyBkYXRhUmVnMiArIFwiXFxuXCI7XG5cblx0XHQvL2NvZGVGICs9IFwibW92IGZ0MS53LCBmYzEud1x0XFxuXCIgK1xuXHRcdC8vICAgIFwibW92IGZ0MC53LCBmYzAueFx0XFxuXCI7XG5cblx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0ZGlmZnVzZUlucHV0UmVnID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0XHR0aGlzLl90ZXh0dXJlc0luZGV4ID0gZGlmZnVzZUlucHV0UmVnLmluZGV4O1xuXG5cdFx0XHR2YXIgYWxiZWRvOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdFx0Y29kZSArPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUoYWxiZWRvLCBzaGFyZWRSZWdpc3RlcnMsIGRpZmZ1c2VJbnB1dFJlZywgc2hhZGVyT2JqZWN0LnRleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzLCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZyk7XG5cblx0XHRcdHZhciBjdXRPZmZSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXG5cdFx0XHRjb2RlICs9IFwic3ViIFwiICsgYWxiZWRvICsgXCIudywgXCIgKyBhbGJlZG8gKyBcIi53LCBcIiArIGN1dE9mZlJlZyArIFwiLnhcXG5cIiArXG5cdFx0XHRcdFwia2lsIFwiICsgYWxiZWRvICsgXCIud1xcblwiO1xuXHRcdH1cblxuXHRcdGNvZGUgKz0gXCJzdWIgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyB0ZW1wMSArIFwiLCBcIiArIHRlbXAyICsgXCJcXG5cIjtcblxuXHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGVtcDEpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGVtcDIpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHRwdWJsaWMgX2lSZW5kZXIocGFzczpNYXRlcmlhbFBhc3NEYXRhLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHQvL3RoaXMuc2V0UmVuZGVyU3RhdGUocGFzcywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSwgdmlld1Byb2plY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0c3VwZXIuX2lBY3RpdmF0ZShwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlID0gcGFzcy5zaGFkZXJPYmplY3Q7XG5cblx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0Y29udGV4dC5zZXRTYW1wbGVyU3RhdGVBdCh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXM/IENvbnRleHRHTFdyYXBNb2RlLlJFUEVBVDpDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUiA6IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVIgOiBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlVGV4dHVyZSh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QudGV4dHVyZSk7XG5cblx0XHRcdHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4ICsgOF0gPSBwYXNzLnNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZDtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0ID0gRGVwdGhNYXBQYXNzOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL2RlcHRobWFwcGFzcy50cyJdLCJuYW1lcyI6WyJEZXB0aE1hcFBhc3MiLCJEZXB0aE1hcFBhc3MuY29uc3RydWN0b3IiLCJEZXB0aE1hcFBhc3MuX2lJbml0Q29uc3RhbnREYXRhIiwiRGVwdGhNYXBQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIkRlcHRoTWFwUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIkRlcHRoTWFwUGFzcy5faVJlbmRlciIsIkRlcHRoTWFwUGFzcy5faUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFPLGtCQUFrQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFDcEYsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBQzNGLElBQU8saUJBQWlCLFdBQWEsMkNBQTJDLENBQUMsQ0FBQztBQVFsRixJQUFPLGdCQUFnQixXQUFjLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxvQkFBb0IsV0FBYSx5REFBeUQsQ0FBQyxDQUFDO0FBRW5HLEFBSUE7OztHQURHO0lBQ0csWUFBWTtJQUFTQSxVQUFyQkEsWUFBWUEsVUFBeUJBO0lBSzFDQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxZQUFZQTtRQVloQkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBRUREOztPQUVHQTtJQUNJQSx5Q0FBa0JBLEdBQXpCQSxVQUEwQkEsWUFBNkJBO1FBRXRERSxnQkFBS0EsQ0FBQ0Esa0JBQWtCQSxZQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV2Q0EsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtRQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDMUJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLFVBQVVBLENBQUNBO1FBQzdCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFDQSxLQUFLQSxDQUFDQTtRQUM1QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsR0FBR0EsR0FBQ0EsS0FBS0EsQ0FBQ0E7UUFDNUJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUNBLEtBQUtBLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxDQUFDQTtJQUN2QkEsQ0FBQ0E7SUFFTUYsNENBQXFCQSxHQUE1QkEsVUFBNkJBLFlBQTZCQTtRQUV6REcsWUFBWUEsQ0FBQ0Esc0JBQXNCQSxFQUFFQSxDQUFDQTtRQUV0Q0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDbkNBLFlBQVlBLENBQUNBLGNBQWNBLEVBQUVBLENBQUNBO0lBQ2hDQSxDQUFDQTtJQUVESDs7T0FFR0E7SUFDSUEsd0NBQWlCQSxHQUF4QkEsVUFBeUJBLFlBQTZCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRTVISSxJQUFJQSxJQUFJQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNyQkEsSUFBSUEsU0FBU0EsR0FBeUJBLGVBQWVBLENBQUNBLFlBQVlBLENBQUNBO1FBQ25FQSxJQUFJQSxlQUFlQSxHQUF5QkEsYUFBYUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUM5RUEsSUFBSUEsUUFBUUEsR0FBeUJBLGFBQWFBLENBQUNBLHVCQUF1QkEsRUFBRUEsQ0FBQ0E7UUFDN0VBLElBQUlBLFFBQVFBLEdBQXlCQSxhQUFhQSxDQUFDQSx1QkFBdUJBLEVBQUVBLENBQUNBO1FBRTdFQSxJQUFJQSxDQUFDQSx1QkFBdUJBLEdBQUdBLFFBQVFBLENBQUNBLEtBQUtBLEdBQUNBLENBQUNBLENBQUNBO1FBRWhEQSxJQUFJQSxLQUFLQSxHQUF5QkEsYUFBYUEsQ0FBQ0EseUJBQXlCQSxFQUFFQSxDQUFDQTtRQUM1RUEsYUFBYUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM5Q0EsSUFBSUEsS0FBS0EsR0FBeUJBLGFBQWFBLENBQUNBLHlCQUF5QkEsRUFBRUEsQ0FBQ0E7UUFDNUVBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsS0FBS0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFOUNBLElBQUlBLElBQUlBLE1BQU1BLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLGVBQWVBLENBQUNBLGtCQUFrQkEsR0FBR0EsSUFBSUEsR0FBR0EsZUFBZUEsQ0FBQ0Esa0JBQWtCQSxHQUFHQSxNQUFNQSxHQUN0SEEsTUFBTUEsR0FBR0EsS0FBS0EsR0FBR0EsSUFBSUEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsR0FBR0EsS0FBS0EsR0FBR0EsTUFBTUEsR0FDeERBLE1BQU1BLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQ3BDQSxNQUFNQSxHQUFHQSxLQUFLQSxHQUFHQSxJQUFJQSxHQUFHQSxLQUFLQSxHQUFHQSxTQUFTQSxHQUFHQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUU3REEsQUFHQUEsa0NBSGtDQTtRQUNsQ0EsNEJBQTRCQTtRQUU1QkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckNBLGVBQWVBLEdBQUdBLGFBQWFBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FB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aWFscy9wYXNzZXMvRGVwdGhNYXBQYXNzLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IE1hdHJpeDNEVXRpbHNcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEVXRpbHNcIik7XG5pbXBvcnQgVGV4dHVyZTJEQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmUyREJhc2VcIik7XG5cbmltcG9ydCBDYW1lcmFcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQ2FtZXJhXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xNaXBGaWx0ZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZpbHRlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMV3JhcE1vZGVcIik7XG5pbXBvcnQgQ29udGV4dEdMUHJvZ3JhbVR5cGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xQcm9ncmFtVHlwZVwiKTtcbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFRleHR1cmVGb3JtYXRcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIERlcHRoTWFwUGFzcyBpcyBhIHBhc3MgdGhhdCB3cml0ZXMgZGVwdGggdmFsdWVzIHRvIGEgZGVwdGggbWFwIGFzIGEgMzItYml0IHZhbHVlIGV4cGxvZGVkIG92ZXIgdGhlIDQgdGV4dHVyZSBjaGFubmVscy5cbiAqIFRoaXMgaXMgdXNlZCB0byByZW5kZXIgc2hhZG93IG1hcHMsIGRlcHRoIG1hcHMsIGV0Yy5cbiAqL1xuY2xhc3MgRGVwdGhNYXBQYXNzIGV4dGVuZHMgTWF0ZXJpYWxQYXNzQmFzZVxue1xuXHRwcml2YXRlIF9mcmFnbWVudENvbnN0YW50c0luZGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGVwdGhNYXBQYXNzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byB3aGljaCB0aGlzIHBhc3MgYmVsb25ncy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHVuY2hhbmdpbmcgY29uc3RhbnQgZGF0YSBmb3IgdGhpcyBtYXRlcmlhbC5cblx0ICovXG5cdHB1YmxpYyBfaUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHRzdXBlci5faUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0KTtcblxuXHRcdHZhciBpbmRleDpudW1iZXIgPSB0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdHZhciBkYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0ZGF0YVtpbmRleF0gPSAxLjA7XG5cdFx0ZGF0YVtpbmRleCArIDFdID0gMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDJdID0gNjUwMjUuMDtcblx0XHRkYXRhW2luZGV4ICsgM10gPSAxNjU4MTM3NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA0XSA9IDEuMC8yNTUuMDtcblx0XHRkYXRhW2luZGV4ICsgNV0gPSAxLjAvMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDZdID0gMS4wLzI1NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA3XSA9IDAuMDtcblx0fVxuXG5cdHB1YmxpYyBfaUluY2x1ZGVEZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHRzaGFkZXJPYmplY3QucHJvamVjdGlvbkRlcGVuZGVuY2llcysrO1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRzaGFkZXJPYmplY3QudXZEZXBlbmRlbmNpZXMrKztcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblx0XHR2YXIgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQ7XG5cdFx0dmFyIGRpZmZ1c2VJbnB1dFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0dmFyIGRhdGFSZWcxOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgZGF0YVJlZzI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXG5cdFx0dGhpcy5fZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGRhdGFSZWcxLmluZGV4KjQ7XG5cblx0XHR2YXIgdGVtcDE6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModGVtcDEsIDEpO1xuXHRcdHZhciB0ZW1wMjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0ZW1wMiwgMSk7XG5cblx0XHRjb2RlICs9IFwiZGl2IFwiICsgdGVtcDEgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMucHJvamVjdGlvbkZyYWdtZW50ICsgXCIsIFwiICsgc2hhcmVkUmVnaXN0ZXJzLnByb2plY3Rpb25GcmFnbWVudCArIFwiLndcXG5cIiArIC8vXCJzdWIgZnQyLnosIGZjMC54LCBmdDIuelxcblwiICsgICAgLy9pbnZlcnRcblx0XHRcdFwibXVsIFwiICsgdGVtcDEgKyBcIiwgXCIgKyBkYXRhUmVnMSArIFwiLCBcIiArIHRlbXAxICsgXCIuelxcblwiICtcblx0XHRcdFwiZnJjIFwiICsgdGVtcDEgKyBcIiwgXCIgKyB0ZW1wMSArIFwiXFxuXCIgK1xuXHRcdFx0XCJtdWwgXCIgKyB0ZW1wMiArIFwiLCBcIiArIHRlbXAxICsgXCIueXp3dywgXCIgKyBkYXRhUmVnMiArIFwiXFxuXCI7XG5cblx0XHQvL2NvZGVGICs9IFwibW92IGZ0MS53LCBmYzEud1x0XFxuXCIgK1xuXHRcdC8vICAgIFwibW92IGZ0MC53LCBmYzAueFx0XFxuXCI7XG5cblx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0ZGlmZnVzZUlucHV0UmVnID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0XHR0aGlzLl90ZXh0dXJlc0luZGV4ID0gZGlmZnVzZUlucHV0UmVnLmluZGV4O1xuXG5cdFx0XHR2YXIgYWxiZWRvOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdFx0Y29kZSArPSBTaGFkZXJDb21waWxlckhlbHBlci5nZXRUZXgyRFNhbXBsZUNvZGUoYWxiZWRvLCBzaGFyZWRSZWdpc3RlcnMsIGRpZmZ1c2VJbnB1dFJlZywgc2hhZGVyT2JqZWN0LnRleHR1cmUsIHNoYWRlck9iamVjdC51c2VTbW9vdGhUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnJlcGVhdFRleHR1cmVzLCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZyk7XG5cblx0XHRcdHZhciBjdXRPZmZSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXG5cdFx0XHRjb2RlICs9IFwic3ViIFwiICsgYWxiZWRvICsgXCIudywgXCIgKyBhbGJlZG8gKyBcIi53LCBcIiArIGN1dE9mZlJlZyArIFwiLnhcXG5cIiArXG5cdFx0XHRcdFwia2lsIFwiICsgYWxiZWRvICsgXCIud1xcblwiO1xuXHRcdH1cblxuXHRcdGNvZGUgKz0gXCJzdWIgXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyB0ZW1wMSArIFwiLCBcIiArIHRlbXAyICsgXCJcXG5cIjtcblxuXHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGVtcDEpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UodGVtcDIpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHRwdWJsaWMgX2lSZW5kZXIocGFzczpNYXRlcmlhbFBhc3NEYXRhLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHQvL3RoaXMuc2V0UmVuZGVyU3RhdGUocGFzcywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSwgdmlld1Byb2plY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0c3VwZXIuX2lBY3RpdmF0ZShwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHN0YWdlLmNvbnRleHQ7XG5cdFx0dmFyIHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlID0gcGFzcy5zaGFkZXJPYmplY3Q7XG5cblx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0Y29udGV4dC5zZXRTYW1wbGVyU3RhdGVBdCh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXM/IENvbnRleHRHTFdyYXBNb2RlLlJFUEVBVDpDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUiA6IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVIgOiBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlVGV4dHVyZSh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QudGV4dHVyZSk7XG5cblx0XHRcdHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4ICsgOF0gPSBwYXNzLnNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZDtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0ID0gRGVwdGhNYXBQYXNzOyJdfQ== \ No newline at end of file diff --git a/lib/materials/passes/DepthMapPass.ts b/lib/materials/passes/DepthMapPass.ts index b60f444c..47b2acb1 100644 --- a/lib/materials/passes/DepthMapPass.ts +++ b/lib/materials/passes/DepthMapPass.ts @@ -4,15 +4,15 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import ContextGLProgramType = require("awayjs-stagegl/lib/core/stagegl/ContextGLProgramType"); -import ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import ContextGLProgramType = require("awayjs-stagegl/lib/base/ContextGLProgramType"); +import ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); diff --git a/lib/materials/passes/DistanceMapPass.js b/lib/materials/passes/DistanceMapPass.js index 93ee6a08..d0841208 100755 --- a/lib/materials/passes/DistanceMapPass.js +++ b/lib/materials/passes/DistanceMapPass.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -95,4 +95,4 @@ var DistanceMapPass = (function (_super) { })(MaterialPassBase); module.exports = DistanceMapPass; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL2Rpc3RhbmNlbWFwcGFzcy50cyJdLCJuYW1lcyI6WyJEaXN0YW5jZU1hcFBhc3MiLCJEaXN0YW5jZU1hcFBhc3MuY29uc3RydWN0b3IiLCJEaXN0YW5jZU1hcFBhc3MuX2lJbml0Q29uc3RhbnREYXRhIiwiRGlzdGFuY2VNYXBQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIkRpc3RhbmNlTWFwUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIkRpc3RhbmNlTWFwUGFzcy5faUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFPLGtCQUFrQixXQUFhLG9EQUFvRCxDQUFDLENBQUM7QUFDNUYsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBQ25HLElBQU8saUJBQWlCLFdBQWEsbURBQW1ELENBQUMsQ0FBQztBQU0xRixJQUFPLGdCQUFnQixXQUFjLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxvQkFBb0IsV0FBYSx5REFBeUQsQ0FBQyxDQUFDO0FBRW5HLEFBSUE7OztHQURHO0lBQ0csZUFBZTtJQUFTQSxVQUF4QkEsZUFBZUEsVUFBeUJBO0lBSzdDQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxlQUFlQTtRQVluQkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBRUREOztPQUVHQTtJQUNJQSw0Q0FBa0JBLEdBQXpCQSxVQUEwQkEsWUFBNkJBO1FBRXRERSxnQkFBS0EsQ0FBQ0Esa0JBQWtCQSxZQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV2Q0EsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtRQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUNBLEtBQUtBLENBQUNBO1FBQzVC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O1FBQ3BEQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGTCxzQkFBQ0E7QUFBREEsQ0FoSEEsQUFnSENBLEVBaEg2QixnQkFBZ0IsRUFnSDdDO0FBRUQsQUFBeUIsaUJBQWhCLGVBQWUsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL0Rpc3RhbmNlTWFwUGFzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xNaXBGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMVGV4dHVyZUZpbHRlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFRleHR1cmVGaWx0ZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMV3JhcE1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5pbXBvcnQgU2hhZGVyQ29tcGlsZXJIZWxwZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL1NoYWRlckNvbXBpbGVySGVscGVyXCIpO1xuXG4vKipcbiAqIERpc3RhbmNlTWFwUGFzcyBpcyBhIHBhc3MgdGhhdCB3cml0ZXMgZGlzdGFuY2UgdmFsdWVzIHRvIGEgZGVwdGggbWFwIGFzIGEgMzItYml0IHZhbHVlIGV4cGxvZGVkIG92ZXIgdGhlIDQgdGV4dHVyZSBjaGFubmVscy5cbiAqIFRoaXMgaXMgdXNlZCB0byByZW5kZXIgb21uaWRpcmVjdGlvbmFsIHNoYWRvdyBtYXBzLlxuICovXG5jbGFzcyBEaXN0YW5jZU1hcFBhc3MgZXh0ZW5kcyBNYXRlcmlhbFBhc3NCYXNlXG57XG5cdHByaXZhdGUgX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXg6bnVtYmVyO1xuXHRwcml2YXRlIF90ZXh0dXJlc0luZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBEaXN0YW5jZU1hcFBhc3Mgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWF0ZXJpYWwgVGhlIG1hdGVyaWFsIHRvIHdoaWNoIHRoaXMgcGFzcyBiZWxvbmdzLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdW5jaGFuZ2luZyBjb25zdGFudCBkYXRhIGZvciB0aGlzIG1hdGVyaWFsLlxuXHQgKi9cblx0cHVibGljIF9pSW5pdENvbnN0YW50RGF0YShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSlcblx0e1xuXHRcdHN1cGVyLl9pSW5pdENvbnN0YW50RGF0YShzaGFkZXJPYmplY3QpO1xuXG5cdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0dmFyIGRhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblx0XHRkYXRhW2luZGV4ICsgNF0gPSAxLjAvMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDVdID0gMS4wLzI1NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA2XSA9IDEuMC8yNTUuMDtcblx0XHRkYXRhW2luZGV4ICsgN10gPSAwLjA7XG5cdH1cblxuXHRwdWJsaWMgX2lJbmNsdWRlRGVwZW5kZW5jaWVzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKVxuXHR7XG5cdFx0c2hhZGVyT2JqZWN0LnByb2plY3Rpb25EZXBlbmRlbmNpZXMrKztcblx0XHRzaGFkZXJPYmplY3Qudmlld0RpckRlcGVuZGVuY2llcysrO1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRzaGFkZXJPYmplY3QudXZEZXBlbmRlbmNpZXMrKztcblxuXHRcdHNoYWRlck9iamVjdC5hZGRXb3JsZFNwYWNlRGVwZW5kZW5jaWVzKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nO1xuXHRcdHZhciB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldDtcblx0XHR2YXIgZGlmZnVzZUlucHV0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblx0XHR2YXIgZGF0YVJlZzE6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdHZhciBkYXRhUmVnMjpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KClcblxuXHRcdHRoaXMuX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXggPSBkYXRhUmVnMS5pbmRleCo0O1xuXG5cdFx0dmFyIHRlbXAxOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHRlbXAxLCAxKTtcblx0XHR2YXIgdGVtcDI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0cmVnaXN0ZXJDYWNoZS5hZGRGcmFnbWVudFRlbXBVc2FnZXModGVtcDIsIDEpO1xuXG5cdFx0Ly8gc3F1YXJlZCBkaXN0YW5jZSB0byB2aWV3XG5cdFx0Y29kZSA9IFwiZHAzIFwiICsgdGVtcDEgKyBcIi56LCBcIiArIHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyVmFyeWluZyArIFwiLnh5eiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMudmlld0RpclZhcnlpbmcgKyBcIi54eXpcXG5cIiArXG5cdFx0XHQgICBcIm11bCBcIiArIHRlbXAxICsgXCIsIFwiICsgZGF0YVJlZzEgKyBcIiwgXCIgKyB0ZW1wMSArIFwiLnpcXG5cIiArXG5cdFx0XHQgICBcImZyYyBcIiArIHRlbXAxICsgXCIsIFwiICsgdGVtcDEgKyBcIlxcblwiICtcblx0XHRcdCAgIFwibXVsIFwiICsgdGVtcDIgKyBcIiwgXCIgKyB0ZW1wMSArIFwiLnl6d3csIFwiICsgZGF0YVJlZzIgKyBcIlxcblwiO1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApIHtcblx0XHRcdGRpZmZ1c2VJbnB1dFJlZyA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZVRleHR1cmVSZWcoKTtcblxuXHRcdFx0dGhpcy5fdGV4dHVyZXNJbmRleCA9IGRpZmZ1c2VJbnB1dFJlZy5pbmRleDtcblxuXHRcdFx0dmFyIGFsYmVkbzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRcdGNvZGUgKz0gU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0VGV4MkRTYW1wbGVDb2RlKGFsYmVkbywgc2hhcmVkUmVnaXN0ZXJzLCBkaWZmdXNlSW5wdXRSZWcsIHNoYWRlck9iamVjdC50ZXh0dXJlLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXMsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcywgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmcpO1xuXG5cdFx0XHR2YXIgY3V0T2ZmUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0Y29kZSArPSBcInN1YiBcIiArIGFsYmVkbyArIFwiLncsIFwiICsgYWxiZWRvICsgXCIudywgXCIgKyBjdXRPZmZSZWcgKyBcIi54XFxuXCIgK1xuXHRcdFx0XHRcImtpbCBcIiArIGFsYmVkbyArIFwiLndcXG5cIjtcblx0XHR9XG5cblx0XHRjb2RlICs9IFwic3ViIFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdGVtcDEgKyBcIiwgXCIgKyB0ZW1wMiArIFwiXFxuXCI7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pQWN0aXZhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdHN1cGVyLl9pQWN0aXZhdGUocGFzcywgc3RhZ2UsIGNhbWVyYSk7XG5cblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0O1xuXHRcdHZhciBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSA9IHBhc3Muc2hhZGVyT2JqZWN0O1xuXG5cdFx0dmFyIGY6bnVtYmVyID0gY2FtZXJhLnByb2plY3Rpb24uZmFyO1xuXG5cdFx0ZiA9IDEvKDIqZipmKTtcblx0XHQvLyBzcXJ0KGYqZitmKmYpIGlzIGxhcmdlc3QgcG9zc2libGUgZGlzdGFuY2UgZm9yIGFueSBmcnVzdHVtLCBzbyB3ZSBuZWVkIHRvIGRpdmlkZSBieSBpdC4gUmFyZWx5IGEgdGlnaHQgZml0LCBidXQgd2l0aCAzMiBiaXRzIHByZWNpc2lvbiwgaXQncyBlbm91Z2guXG5cdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0dmFyIGRhdGE6QXJyYXk8bnVtYmVyPiA9IHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YTtcblx0XHRkYXRhW2luZGV4XSA9IDEuMCpmO1xuXHRcdGRhdGFbaW5kZXggKyAxXSA9IDI1NS4wKmY7XG5cdFx0ZGF0YVtpbmRleCArIDJdID0gNjUwMjUuMCpmO1xuXHRcdGRhdGFbaW5kZXggKyAzXSA9IDE2NTgxMzc1LjAqZjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQgPiAwKSB7XG5cdFx0XHRjb250ZXh0LnNldFNhbXBsZXJTdGF0ZUF0KHRoaXMuX3RleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC5yZXBlYXRUZXh0dXJlcz8gQ29udGV4dEdMV3JhcE1vZGUuUkVQRUFUOkNvbnRleHRHTFdyYXBNb2RlLkNMQU1QLCBzaGFkZXJPYmplY3QudXNlU21vb3RoVGV4dHVyZXM/IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTElORUFSIDogQ29udGV4dEdMVGV4dHVyZUZpbHRlci5ORUFSRVNULCBzaGFkZXJPYmplY3QudXNlTWlwbWFwcGluZz8gQ29udGV4dEdMTWlwRmlsdGVyLk1JUExJTkVBUiA6IENvbnRleHRHTE1pcEZpbHRlci5NSVBOT05FKTtcblx0XHRcdGNvbnRleHQuYWN0aXZhdGVUZXh0dXJlKHRoaXMuX3RleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC50ZXh0dXJlKTtcblxuXHRcdFx0ZGF0YVtpbmRleCArIDhdID0gcGFzcy5zaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQ7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCA9IERpc3RhbmNlTWFwUGFzczsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL2Rpc3RhbmNlbWFwcGFzcy50cyJdLCJuYW1lcyI6WyJEaXN0YW5jZU1hcFBhc3MiLCJEaXN0YW5jZU1hcFBhc3MuY29uc3RydWN0b3IiLCJEaXN0YW5jZU1hcFBhc3MuX2lJbml0Q29uc3RhbnREYXRhIiwiRGlzdGFuY2VNYXBQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIkRpc3RhbmNlTWFwUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIkRpc3RhbmNlTWFwUGFzcy5faUFjdGl2YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFPLGtCQUFrQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFDcEYsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBQzNGLElBQU8saUJBQWlCLFdBQWEsMkNBQTJDLENBQUMsQ0FBQztBQU1sRixJQUFPLGdCQUFnQixXQUFjLHNEQUFzRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxvQkFBb0IsV0FBYSx5REFBeUQsQ0FBQyxDQUFDO0FBRW5HLEFBSUE7OztHQURHO0lBQ0csZUFBZTtJQUFTQSxVQUF4QkEsZUFBZUEsVUFBeUJBO0lBSzdDQTs7OztPQUlHQTtJQUNIQSxTQVZLQSxlQUFlQTtRQVluQkMsaUJBQU9BLENBQUNBO0lBQ1RBLENBQUNBO0lBRUREOztPQUVHQTtJQUNJQSw0Q0FBa0JBLEdBQXpCQSxVQUEwQkEsWUFBNkJBO1FBRXRERSxnQkFBS0EsQ0FBQ0Esa0JBQWtCQSxZQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV2Q0EsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtRQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7UUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUNBLEtBQUtBLENBQUNBO1FBQzVC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O1FBQ3BEQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGTCxzQkFBQ0E7QUFBREEsQ0FoSEEsQUFnSENBLEVBaEg2QixnQkFBZ0IsRUFnSDdDO0FBRUQsQUFBeUIsaUJBQWhCLGVBQWUsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL0Rpc3RhbmNlTWFwUGFzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBNYXRyaXgzRFV0aWxzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFV0aWxzXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBEaXN0YW5jZU1hcFBhc3MgaXMgYSBwYXNzIHRoYXQgd3JpdGVzIGRpc3RhbmNlIHZhbHVlcyB0byBhIGRlcHRoIG1hcCBhcyBhIDMyLWJpdCB2YWx1ZSBleHBsb2RlZCBvdmVyIHRoZSA0IHRleHR1cmUgY2hhbm5lbHMuXG4gKiBUaGlzIGlzIHVzZWQgdG8gcmVuZGVyIG9tbmlkaXJlY3Rpb25hbCBzaGFkb3cgbWFwcy5cbiAqL1xuY2xhc3MgRGlzdGFuY2VNYXBQYXNzIGV4dGVuZHMgTWF0ZXJpYWxQYXNzQmFzZVxue1xuXHRwcml2YXRlIF9mcmFnbWVudENvbnN0YW50c0luZGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgRGlzdGFuY2VNYXBQYXNzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byB3aGljaCB0aGlzIHBhc3MgYmVsb25ncy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHVuY2hhbmdpbmcgY29uc3RhbnQgZGF0YSBmb3IgdGhpcyBtYXRlcmlhbC5cblx0ICovXG5cdHB1YmxpYyBfaUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblx0XHRzdXBlci5faUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0KTtcblxuXHRcdHZhciBpbmRleDpudW1iZXIgPSB0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdHZhciBkYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0ZGF0YVtpbmRleCArIDRdID0gMS4wLzI1NS4wO1xuXHRcdGRhdGFbaW5kZXggKyA1XSA9IDEuMC8yNTUuMDtcblx0XHRkYXRhW2luZGV4ICsgNl0gPSAxLjAvMjU1LjA7XG5cdFx0ZGF0YVtpbmRleCArIDddID0gMC4wO1xuXHR9XG5cblx0cHVibGljIF9pSW5jbHVkZURlcGVuZGVuY2llcyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSlcblx0e1xuXHRcdHNoYWRlck9iamVjdC5wcm9qZWN0aW9uRGVwZW5kZW5jaWVzKys7XG5cdFx0c2hhZGVyT2JqZWN0LnZpZXdEaXJEZXBlbmRlbmNpZXMrKztcblxuXHRcdGlmIChzaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQgPiAwKVxuXHRcdFx0c2hhZGVyT2JqZWN0LnV2RGVwZW5kZW5jaWVzKys7XG5cblx0XHRzaGFkZXJPYmplY3QuYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZztcblx0XHR2YXIgdGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQ7XG5cdFx0dmFyIGRpZmZ1c2VJbnB1dFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cdFx0dmFyIGRhdGFSZWcxOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblx0XHR2YXIgZGF0YVJlZzI6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpXG5cblx0XHR0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4ID0gZGF0YVJlZzEuaW5kZXgqNDtcblxuXHRcdHZhciB0ZW1wMTpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudFZlY3RvclRlbXAoKTtcblx0XHRyZWdpc3RlckNhY2hlLmFkZEZyYWdtZW50VGVtcFVzYWdlcyh0ZW1wMSwgMSk7XG5cdFx0dmFyIHRlbXAyOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IHJlZ2lzdGVyQ2FjaGUuZ2V0RnJlZUZyYWdtZW50VmVjdG9yVGVtcCgpO1xuXHRcdHJlZ2lzdGVyQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKHRlbXAyLCAxKTtcblxuXHRcdC8vIHNxdWFyZWQgZGlzdGFuY2UgdG8gdmlld1xuXHRcdGNvZGUgPSBcImRwMyBcIiArIHRlbXAxICsgXCIueiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMudmlld0RpclZhcnlpbmcgKyBcIi54eXosIFwiICsgc2hhcmVkUmVnaXN0ZXJzLnZpZXdEaXJWYXJ5aW5nICsgXCIueHl6XFxuXCIgK1xuXHRcdFx0ICAgXCJtdWwgXCIgKyB0ZW1wMSArIFwiLCBcIiArIGRhdGFSZWcxICsgXCIsIFwiICsgdGVtcDEgKyBcIi56XFxuXCIgK1xuXHRcdFx0ICAgXCJmcmMgXCIgKyB0ZW1wMSArIFwiLCBcIiArIHRlbXAxICsgXCJcXG5cIiArXG5cdFx0XHQgICBcIm11bCBcIiArIHRlbXAyICsgXCIsIFwiICsgdGVtcDEgKyBcIi55end3LCBcIiArIGRhdGFSZWcyICsgXCJcXG5cIjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QuYWxwaGFUaHJlc2hvbGQgPiAwKSB7XG5cdFx0XHRkaWZmdXNlSW5wdXRSZWcgPSByZWdpc3RlckNhY2hlLmdldEZyZWVUZXh0dXJlUmVnKCk7XG5cblx0XHRcdHRoaXMuX3RleHR1cmVzSW5kZXggPSBkaWZmdXNlSW5wdXRSZWcuaW5kZXg7XG5cblx0XHRcdHZhciBhbGJlZG86U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gcmVnaXN0ZXJDYWNoZS5nZXRGcmVlRnJhZ21lbnRWZWN0b3JUZW1wKCk7XG5cdFx0XHRjb2RlICs9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZShhbGJlZG8sIHNoYXJlZFJlZ2lzdGVycywgZGlmZnVzZUlucHV0UmVnLCBzaGFkZXJPYmplY3QudGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdFx0dmFyIGN1dE9mZlJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdpc3RlckNhY2hlLmdldEZyZWVGcmFnbWVudENvbnN0YW50KCk7XG5cblx0XHRcdGNvZGUgKz0gXCJzdWIgXCIgKyBhbGJlZG8gKyBcIi53LCBcIiArIGFsYmVkbyArIFwiLncsIFwiICsgY3V0T2ZmUmVnICsgXCIueFxcblwiICtcblx0XHRcdFx0XCJraWwgXCIgKyBhbGJlZG8gKyBcIi53XFxuXCI7XG5cdFx0fVxuXG5cdFx0Y29kZSArPSBcInN1YiBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHRlbXAxICsgXCIsIFwiICsgdGVtcDIgKyBcIlxcblwiO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUFjdGl2YXRlKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UsIGNhbWVyYTpDYW1lcmEpXG5cdHtcblx0XHRzdXBlci5faUFjdGl2YXRlKHBhc3MsIHN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblx0XHR2YXIgc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UgPSBwYXNzLnNoYWRlck9iamVjdDtcblxuXHRcdHZhciBmOm51bWJlciA9IGNhbWVyYS5wcm9qZWN0aW9uLmZhcjtcblxuXHRcdGYgPSAxLygyKmYqZik7XG5cdFx0Ly8gc3FydChmKmYrZipmKSBpcyBsYXJnZXN0IHBvc3NpYmxlIGRpc3RhbmNlIGZvciBhbnkgZnJ1c3R1bSwgc28gd2UgbmVlZCB0byBkaXZpZGUgYnkgaXQuIFJhcmVseSBhIHRpZ2h0IGZpdCwgYnV0IHdpdGggMzIgYml0cyBwcmVjaXNpb24sIGl0J3MgZW5vdWdoLlxuXHRcdHZhciBpbmRleDpudW1iZXIgPSB0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4O1xuXHRcdHZhciBkYXRhOkFycmF5PG51bWJlcj4gPSBzaGFkZXJPYmplY3QuZnJhZ21lbnRDb25zdGFudERhdGE7XG5cdFx0ZGF0YVtpbmRleF0gPSAxLjAqZjtcblx0XHRkYXRhW2luZGV4ICsgMV0gPSAyNTUuMCpmO1xuXHRcdGRhdGFbaW5kZXggKyAyXSA9IDY1MDI1LjAqZjtcblx0XHRkYXRhW2luZGV4ICsgM10gPSAxNjU4MTM3NS4wKmY7XG5cblx0XHRpZiAoc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkID4gMCkge1xuXHRcdFx0Y29udGV4dC5zZXRTYW1wbGVyU3RhdGVBdCh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXM/IENvbnRleHRHTFdyYXBNb2RlLlJFUEVBVDpDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUiA6IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVIgOiBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHRjb250ZXh0LmFjdGl2YXRlVGV4dHVyZSh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QudGV4dHVyZSk7XG5cblx0XHRcdGRhdGFbaW5kZXggKyA4XSA9IHBhc3Muc2hhZGVyT2JqZWN0LmFscGhhVGhyZXNob2xkO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBEaXN0YW5jZU1hcFBhc3M7Il19 \ No newline at end of file diff --git a/lib/materials/passes/DistanceMapPass.ts b/lib/materials/passes/DistanceMapPass.ts index cec7462b..3de8a878 100644 --- a/lib/materials/passes/DistanceMapPass.ts +++ b/lib/materials/passes/DistanceMapPass.ts @@ -4,13 +4,13 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); diff --git a/lib/materials/passes/MaterialPassBase.js b/lib/materials/passes/MaterialPassBase.js index cf704e6a..a698e59c 100755 --- a/lib/materials/passes/MaterialPassBase.js +++ b/lib/materials/passes/MaterialPassBase.js @@ -8,8 +8,8 @@ var NamedAssetBase = require("awayjs-core/lib/library/NamedAssetBase"); var ArgumentError = require("awayjs-core/lib/errors/ArgumentError"); var Event = require("awayjs-core/lib/events/Event"); var BlendMode = require("awayjs-display/lib/base/BlendMode"); -var ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -var ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); var ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); var MaterialPassMode = require("awayjs-stagegl/lib/materials/passes/MaterialPassMode"); /** @@ -466,4 +466,4 @@ var MaterialPassBase = (function (_super) { })(NamedAssetBase); module.exports = MaterialPassBase; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL21hdGVyaWFscGFzc2Jhc2UudHMiXSwibmFtZXMiOlsiTWF0ZXJpYWxQYXNzQmFzZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY29uc3RydWN0b3IiLCJNYXRlcmlhbFBhc3NCYXNlLnByZXNlcnZlQWxwaGEiLCJNYXRlcmlhbFBhc3NCYXNlLmluY2x1ZGVDYXN0ZXJzIiwiTWF0ZXJpYWxQYXNzQmFzZS5mb3JjZVNlcGFyYXRlTVZQIiwiTWF0ZXJpYWxQYXNzQmFzZS5kaXJlY3Rpb25hbExpZ2h0c09mZnNldCIsIk1hdGVyaWFsUGFzc0Jhc2UucG9pbnRMaWdodHNPZmZzZXQiLCJNYXRlcmlhbFBhc3NCYXNlLmxpZ2h0UHJvYmVzT2Zmc2V0IiwiTWF0ZXJpYWxQYXNzQmFzZS5wYXNzTW9kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY3JlYXRlU2hhZGVyT2JqZWN0IiwiTWF0ZXJpYWxQYXNzQmFzZS53cml0ZURlcHRoIiwiTWF0ZXJpYWxQYXNzQmFzZS5kZXB0aENvbXBhcmVNb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5kaXNwb3NlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faVJlbmRlciIsIk1hdGVyaWFsUGFzc0Jhc2Uuc2V0UmVuZGVyU3RhdGUiLCJNYXRlcmlhbFBhc3NCYXNlLnNldEJsZW5kTW9kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lBY3RpdmF0ZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lEZWFjdGl2YXRlIiwiTWF0ZXJpYWxQYXNzQmFzZS5fcEludmFsaWRhdGVQYXNzIiwiTWF0ZXJpYWxQYXNzQmFzZS5saWdodFBpY2tlciIsIk1hdGVyaWFsUGFzc0Jhc2Uub25MaWdodHNDaGFuZ2UiLCJNYXRlcmlhbFBhc3NCYXNlLnBVcGRhdGVMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lJbml0Q29uc3RhbnREYXRhIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldFByZUxpZ2h0aW5nVmVydGV4Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXRQcmVMaWdodGluZ0ZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXRWZXJ0ZXhDb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldEZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXROb3JtYWxWZXJ0ZXhDb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldE5vcm1hbEZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuaU51bVBvaW50TGlnaHRzIiwiTWF0ZXJpYWxQYXNzQmFzZS5pTnVtRGlyZWN0aW9uYWxMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLmlOdW1MaWdodFByb2JlcyIsIk1hdGVyaWFsUGFzc0Jhc2UuX3BPdXRwdXRzTm9ybWFscyIsIk1hdGVyaWFsUGFzc0Jhc2UuX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMiLCJNYXRlcmlhbFBhc3NCYXNlLl9wVXNlc1RhbmdlbnRTcGFjZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY2FsY3VsYXRlTnVtRGlyZWN0aW9uYWxMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLmNhbGN1bGF0ZU51bVBvaW50TGlnaHRzIiwiTWF0ZXJpYWxQYXNzQmFzZS5jYWxjdWxhdGVOdW1Qcm9iZXMiLCJNYXRlcmlhbFBhc3NCYXNlLl9pQWRkTWF0ZXJpYWxQYXNzRGF0YSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lSZW1vdmVNYXRlcmlhbFBhc3NEYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdFLElBQU8sYUFBYSxXQUFjLHNDQUFzQyxDQUFDLENBQUM7QUFDMUUsSUFBTyxLQUFLLFdBQWdCLDhCQUE4QixDQUFDLENBQUM7QUFFNUQsSUFBTyxTQUFTLFdBQWUsbUNBQW1DLENBQUMsQ0FBQztBQVFwRSxJQUFPLG9CQUFvQixXQUFhLHNEQUFzRCxDQUFDLENBQUM7QUFDaEcs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Q0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFDQSxXQUFXQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNoRkEsQ0FBQ0E7SUFFTXRDLGdEQUFxQkEsR0FBNUJBLFVBQTZCQSxnQkFBaUNBO1FBRTdEdUMsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLENBQUNBO1FBRTlDQSxNQUFNQSxDQUFDQSxnQkFBZ0JBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVNdkMsbURBQXdCQSxHQUEvQkEsVUFBZ0NBLGdCQUFpQ0E7UUFFaEV3QyxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUVuRkEsTUFBTUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFDRnhDLHVCQUFDQTtBQUFEQSxDQXRpQkEsQUFzaUJDQSxFQXRpQjhCLGNBQWMsRUFzaUI1QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgTWF0cml4M0RVdGlsc1x0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RVdGlsc1wiKTtcbmltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5pbXBvcnQgQXJndW1lbnRFcnJvclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9Bcmd1bWVudEVycm9yXCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcblxuaW1wb3J0IEJsZW5kTW9kZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9CbGVuZE1vZGVcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBMaWdodFBpY2tlckJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvbGlnaHRwaWNrZXJzL0xpZ2h0UGlja2VyQmFzZVwiKTtcbmltcG9ydCBJTWF0ZXJpYWxQYXNzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTWF0ZXJpYWxQYXNzXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xCbGVuZEZhY3Rvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMQmxlbmRGYWN0b3JcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgSU1hdGVyaWFsUGFzc1N0YWdlR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTWF0ZXJpYWxQYXNzU3RhZ2VHTFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NNb2RlXCIpO1xuXG4vKipcbiAqIE1hdGVyaWFsUGFzc0Jhc2UgcHJvdmlkZXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWF0ZXJpYWwgc2hhZGVyIHBhc3Nlcy4gQSBtYXRlcmlhbCBwYXNzIGNvbnN0aXR1dGVzIGF0IGxlYXN0XG4gKiBhIHJlbmRlciBjYWxsIHBlciByZXF1aXJlZCByZW5kZXJhYmxlLlxuICovXG5jbGFzcyBNYXRlcmlhbFBhc3NCYXNlIGV4dGVuZHMgTmFtZWRBc3NldEJhc2UgaW1wbGVtZW50cyBJTWF0ZXJpYWxQYXNzLCBJTWF0ZXJpYWxQYXNzU3RhZ2VHTFxue1xuXHRwcml2YXRlIF9tYXRlcmlhbFBhc3NEYXRhOkFycmF5PE1hdGVyaWFsUGFzc0RhdGE+ID0gbmV3IEFycmF5PE1hdGVyaWFsUGFzc0RhdGE+KCk7XG5cdHByaXZhdGUgX21heExpZ2h0czpudW1iZXIgPSAzO1xuXHRwcml2YXRlIF9wcmVzZXJ2ZUFscGhhOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9pbmNsdWRlQ2FzdGVyczpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfZm9yY2VTZXBhcmF0ZU1WUDpib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQ6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfcG9pbnRMaWdodHNPZmZzZXQ6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfbGlnaHRQcm9iZXNPZmZzZXQ6bnVtYmVyID0gMDtcblxuXHRwdWJsaWMgX3BOdW1Qb2ludExpZ2h0czpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1EaXJlY3Rpb25hbExpZ2h0czpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1MaWdodFByb2JlczpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1MaWdodHM6bnVtYmVyID0gMDtcblxuXHRwcml2YXRlIF9wYXNzTW9kZTpudW1iZXI7XG5cblx0cHJpdmF0ZSBfZGVwdGhDb21wYXJlTW9kZTpzdHJpbmcgPSBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMO1xuXG5cdHByaXZhdGUgX2JsZW5kRmFjdG9yU291cmNlOnN0cmluZyA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORTtcblx0cHJpdmF0ZSBfYmxlbmRGYWN0b3JEZXN0OnN0cmluZyA9IENvbnRleHRHTEJsZW5kRmFjdG9yLlpFUk87XG5cblx0cHVibGljIF9wRW5hYmxlQmxlbmRpbmc6Ym9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyAgX3BMaWdodFBpY2tlcjpMaWdodFBpY2tlckJhc2U7XG5cblx0cHJpdmF0ZSBfd3JpdGVEZXB0aDpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfb25MaWdodHNDaGFuZ2VEZWxlZ2F0ZTooZXZlbnQ6RXZlbnQpID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBvdXRwdXQgYWxwaGEgdmFsdWUgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG1hdGVyaWFsJ3Mgb3JpZ2luYWwgYWxwaGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHByZXNlcnZlQWxwaGEoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcHJlc2VydmVBbHBoYTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgcHJlc2VydmVBbHBoYSh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3ByZXNlcnZlQWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9wcmVzZXJ2ZUFscGhhID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgc2hhZG93IGNhc3RpbmcgbGlnaHRzIG5lZWQgdG8gYmUgaW5jbHVkZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGluY2x1ZGVDYXN0ZXJzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2luY2x1ZGVDYXN0ZXJzO1xuXHR9XG5cblx0cHVibGljIHNldCBpbmNsdWRlQ2FzdGVycyh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2luY2x1ZGVDYXN0ZXJzID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faW5jbHVkZUNhc3RlcnMgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzY3JlZW4gcHJvamVjdGlvbiBzaG91bGQgYmUgY2FsY3VsYXRlZCBieSBmb3JjaW5nIGEgc2VwYXJhdGUgc2NlbmUgbWF0cml4IGFuZFxuXHQgKiB2aWV3LXByb2plY3Rpb24gbWF0cml4LiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCByb3VuZGluZyBlcnJvcnMgd2hlbiB1c2luZyBtdWx0aXBsZSBwYXNzZXMgd2l0aCBkaWZmZXJlbnRcblx0ICogcHJvamVjdGlvbiBjb2RlLlxuXHQgKi9cblx0cHVibGljIGdldCBmb3JjZVNlcGFyYXRlTVZQKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2ZvcmNlU2VwYXJhdGVNVlA7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGZvcmNlU2VwYXJhdGVNVlAodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdGlmICh0aGlzLl9mb3JjZVNlcGFyYXRlTVZQID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZm9yY2VTZXBhcmF0ZU1WUCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBkaXJlY3Rpb25hbCBsaWdodCB2ZWN0b3IgZm9yIHdoaWNoIHRvIHN0YXJ0IGluY2x1ZGluZyBsaWdodHMuXG5cdCAqIFRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgbGlnaHQgcGlja2VyIGlzIGFzc2lnbmVkLlxuXHQgKi9cblx0cHVibGljIGdldCBkaXJlY3Rpb25hbExpZ2h0c09mZnNldCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRzT2Zmc2V0O1xuXHR9XG5cblx0cHVibGljIHNldCBkaXJlY3Rpb25hbExpZ2h0c09mZnNldCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaXJlY3Rpb25hbExpZ2h0c09mZnNldCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBwb2ludCBsaWdodCB2ZWN0b3IgZm9yIHdoaWNoIHRvIHN0YXJ0IGluY2x1ZGluZyBsaWdodHMuXG5cdCAqIFRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgbGlnaHQgcGlja2VyIGlzIGFzc2lnbmVkLlxuXHQgKi9cblx0cHVibGljIGdldCBwb2ludExpZ2h0c09mZnNldCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BvaW50TGlnaHRzT2Zmc2V0O1xuXHR9XG5cblx0cHVibGljIHNldCBwb2ludExpZ2h0c09mZnNldCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wb2ludExpZ2h0c09mZnNldCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBsaWdodCBwcm9iZXMgdmVjdG9yIGZvciB3aGljaCB0byBzdGFydCBpbmNsdWRpbmcgbGlnaHRzLlxuXHQgKiBUaGlzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIGxpZ2h0IHBpY2tlciBpcyBhc3NpZ25lZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbGlnaHRQcm9iZXNPZmZzZXQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9saWdodFByb2Jlc09mZnNldDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbGlnaHRQcm9iZXNPZmZzZXQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fbGlnaHRQcm9iZXNPZmZzZXQgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCBwYXNzTW9kZSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Bhc3NNb2RlO1xuXHR9XG5cblx0cHVibGljIHNldCBwYXNzTW9kZSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wYXNzTW9kZSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBNYXRlcmlhbFBhc3NCYXNlIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhc3NNb2RlOm51bWJlciA9IDB4MDMpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcGFzc01vZGUgPSBwYXNzTW9kZTtcblxuXHRcdHRoaXMuX29uTGlnaHRzQ2hhbmdlRGVsZWdhdGUgPSAoZXZlbnQ6RXZlbnQpID0+IHRoaXMub25MaWdodHNDaGFuZ2UoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIHNoYWRlciBvYmplY3QgZm9yIHRoaXMgcGFzcy5cblx0ICpcblx0ICogQHBhcmFtIHByb2ZpbGUgVGhlIGNvbXBhdGliaWxpdHkgcHJvZmlsZSB1c2VkIGJ5IHRoZSByZW5kZXJlci5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVTaGFkZXJPYmplY3QocHJvZmlsZTpzdHJpbmcpOlNoYWRlck9iamVjdEJhc2Vcblx0e1xuXHRcdHJldHVybiBuZXcgU2hhZGVyT2JqZWN0QmFzZShwcm9maWxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgcGFzcyBzaG91bGQgd3JpdGUgdG8gdGhlIGRlcHRoIGJ1ZmZlciBvciBub3QuIElnbm9yZWQgd2hlbiBibGVuZGluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0cHVibGljIGdldCB3cml0ZURlcHRoKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3dyaXRlRGVwdGg7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHdyaXRlRGVwdGgodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdHRoaXMuX3dyaXRlRGVwdGggPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVwdGggY29tcGFyZSBtb2RlIHVzZWQgdG8gcmVuZGVyIHRoZSByZW5kZXJhYmxlcyB1c2luZyB0aGlzIG1hdGVyaWFsLlxuXHQgKlxuXHQgKiBAc2VlIGF3YXkuc3RhZ2VnbC5Db250ZXh0R0xDb21wYXJlTW9kZVxuXHQgKi9cblx0cHVibGljIGdldCBkZXB0aENvbXBhcmVNb2RlKCk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGVwdGhDb21wYXJlTW9kZSh2YWx1ZTpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9kZXB0aENvbXBhcmVNb2RlID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY3VycmVudCBvYmplY3QuXG5cdCAqIEBwYXJhbSBkZWVwIEluZGljYXRlcyB3aGV0aGVyIG90aGVyIHJlc291cmNlcyBzaG91bGQgYmUgY2xlYW5lZCB1cCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBzaGFyZWQgYWNyb3NzIGRpZmZlcmVudCBpbnN0YW5jZXMuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyKVxuXHRcdFx0dGhpcy5fcExpZ2h0UGlja2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnQuQ0hBTkdFLCB0aGlzLl9vbkxpZ2h0c0NoYW5nZURlbGVnYXRlKTtcblxuXHRcdHdoaWxlICh0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmxlbmd0aClcblx0XHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFbMF0uZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fbWF0ZXJpYWxQYXNzRGF0YSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVycyBhbiBvYmplY3QgdG8gdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfaVJlbmRlcihwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHRoaXMuc2V0UmVuZGVyU3RhdGUocGFzcywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSwgdmlld1Byb2plY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlXG5cdCAqIEBwYXJhbSBzdGFnZVxuXHQgKiBAcGFyYW0gY2FtZXJhXG5cdCAqL1xuXHRwdWJsaWMgc2V0UmVuZGVyU3RhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHRwYXNzLnNoYWRlck9iamVjdC5zZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJsZW5kIG1vZGUgdG8gdXNlIHdoZW4gZHJhd2luZyB0aGlzIHJlbmRlcmFibGUuIFRoZSBmb2xsb3dpbmcgYmxlbmQgbW9kZXMgYXJlIHN1cHBvcnRlZDpcblx0ICogPHVsPlxuXHQgKiA8bGk+QmxlbmRNb2RlLk5PUk1BTDogTm8gYmxlbmRpbmcsIHVubGVzcyB0aGUgbWF0ZXJpYWwgaW5oZXJlbnRseSBuZWVkcyBpdDwvbGk+XG5cdCAqIDxsaT5CbGVuZE1vZGUuTEFZRVI6IEZvcmNlIGJsZW5kaW5nLiBUaGlzIHdpbGwgZHJhdyB0aGUgb2JqZWN0IHRoZSBzYW1lIGFzIE5PUk1BTCwgYnV0IHdpdGhvdXQgd3JpdGluZyBkZXB0aCB3cml0ZXMuPC9saT5cblx0ICogPGxpPkJsZW5kTW9kZS5NVUxUSVBMWTwvbGk+XG5cdCAqIDxsaT5CbGVuZE1vZGUuQUREPC9saT5cblx0ICogPGxpPkJsZW5kTW9kZS5BTFBIQTwvbGk+XG5cdCAqIDwvdWw+XG5cdCAqL1xuXHRwdWJsaWMgc2V0QmxlbmRNb2RlKHZhbHVlOnN0cmluZylcblx0e1xuXHRcdHN3aXRjaCAodmFsdWUpIHtcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuTk9STUFMOlxuXG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yU291cmNlID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FO1xuXHRcdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRlc3QgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPO1xuXHRcdFx0XHR0aGlzLl9wRW5hYmxlQmxlbmRpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuTEFZRVI6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGVzdCA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORV9NSU5VU19TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX3BFbmFibGVCbGVuZGluZyA9IHRydWU7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQmxlbmRNb2RlLk1VTFRJUExZOlxuXG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yU291cmNlID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTztcblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEZXN0ID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuU09VUkNFX0NPTE9SO1xuXHRcdFx0XHR0aGlzLl9wRW5hYmxlQmxlbmRpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEJsZW5kTW9kZS5BREQ6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGVzdCA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORTtcblx0XHRcdFx0dGhpcy5fcEVuYWJsZUJsZW5kaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuQUxQSEE6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPO1xuXHRcdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRlc3QgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX3BFbmFibGVCbGVuZGluZyA9IHRydWU7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0dGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoXCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIVwiKTtcblxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSByZW5kZXIgc3RhdGUgZm9yIHRoZSBwYXNzIHRoYXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHJlbmRlcmVkIG9iamVjdC4gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlXG5cdCAqIGNhbGxpbmcgcmVuZGVyUGFzcy4gQmVmb3JlIGFjdGl2YXRpbmcgYSBwYXNzLCB0aGUgcHJldmlvdXNseSB1c2VkIHBhc3MgbmVlZHMgdG8gYmUgZGVhY3RpdmF0ZWQuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IHdoaWNoIGlzIGN1cnJlbnRseSB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSBmcm9tIHdoaWNoIHRoZSBzY2VuZSBpcyB2aWV3ZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdGNvbnRleHQuc2V0RGVwdGhUZXN0KCggdGhpcy5fd3JpdGVEZXB0aCAmJiAhdGhpcy5fcEVuYWJsZUJsZW5kaW5nICksIHRoaXMuX2RlcHRoQ29tcGFyZU1vZGUpO1xuXG5cdFx0aWYgKHRoaXMuX3BFbmFibGVCbGVuZGluZylcblx0XHRcdGNvbnRleHQuc2V0QmxlbmRGYWN0b3JzKHRoaXMuX2JsZW5kRmFjdG9yU291cmNlLCB0aGlzLl9ibGVuZEZhY3RvckRlc3QpO1xuXG5cdFx0Y29udGV4dC5hY3RpdmF0ZU1hdGVyaWFsUGFzcyhwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHJlbmRlciBzdGF0ZSBmb3IgdGhlIHBhc3MuIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBhY3RpdmF0aW5nIGFub3RoZXIgcGFzcy5cblx0ICogQHBhcmFtIHN0YWdlIFRoZSBTdGFnZSB1c2VkIGZvciByZW5kZXJpbmdcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfaURlYWN0aXZhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5kZWFjdGl2YXRlTWF0ZXJpYWxQYXNzKHBhc3MsIHN0YWdlKTtcblxuXHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5zZXREZXB0aFRlc3QodHJ1ZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTCk7IC8vIFRPRE8gOiBpbWVwbGVtZW50XG5cdH1cblxuXHQvKipcblx0ICogTWFya3MgdGhlIHNoYWRlciBwcm9ncmFtIGFzIGludmFsaWQsIHNvIGl0IHdpbGwgYmUgcmVjb21waWxlZCBiZWZvcmUgdGhlIG5leHQgcmVuZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gdXBkYXRlTWF0ZXJpYWwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGludmFsaWRhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBlbnRpcmUgbWF0ZXJpYWwuIFNob3VsZCBhbHdheXMgcGFzcyBcInRydWVcIiB1bmxlc3MgaXQncyBjYWxsZWQgZnJvbSB0aGUgbWF0ZXJpYWwgaXRzZWxmLlxuXHQgKi9cblx0cHVibGljIF9wSW52YWxpZGF0ZVBhc3MoKVxuXHR7XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47IGkrKylcblx0XHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFbaV0uaW52YWxpZGF0ZSgpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5DSEFOR0UpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGlnaHQgcGlja2VyIHVzZWQgYnkgdGhlIG1hdGVyaWFsIHRvIHByb3ZpZGUgbGlnaHRzIHRvIHRoZSBtYXRlcmlhbCBpZiBpdCBzdXBwb3J0cyBsaWdodGluZy5cblx0ICpcblx0ICogQHNlZSBhd2F5Lm1hdGVyaWFscy5MaWdodFBpY2tlckJhc2Vcblx0ICogQHNlZSBhd2F5Lm1hdGVyaWFscy5TdGF0aWNMaWdodFBpY2tlclxuXHQgKi9cblx0cHVibGljIGdldCBsaWdodFBpY2tlcigpOkxpZ2h0UGlja2VyQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BMaWdodFBpY2tlcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbGlnaHRQaWNrZXIodmFsdWU6TGlnaHRQaWNrZXJCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BMaWdodFBpY2tlcilcblx0XHRcdHRoaXMuX3BMaWdodFBpY2tlci5yZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50LkNIQU5HRSwgdGhpcy5fb25MaWdodHNDaGFuZ2VEZWxlZ2F0ZSk7XG5cblx0XHR0aGlzLl9wTGlnaHRQaWNrZXIgPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLl9wTGlnaHRQaWNrZXIpXG5cdFx0XHR0aGlzLl9wTGlnaHRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5DSEFOR0UsIHRoaXMuX29uTGlnaHRzQ2hhbmdlRGVsZWdhdGUpO1xuXG5cdFx0dGhpcy5wVXBkYXRlTGlnaHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGxpZ2h0IHBpY2tlcidzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblx0ICovXG5cdHByaXZhdGUgb25MaWdodHNDaGFuZ2UoZXZlbnQ6RXZlbnQpXG5cdHtcblx0XHR0aGlzLnBVcGRhdGVMaWdodHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGlmIHRoZSBwYXNzIHVzZXMgbGlnaHRzIHRvIHVwZGF0ZSB0aGUgc2hhZGVyLlxuXHQgKi9cblx0cHVibGljIHBVcGRhdGVMaWdodHMoKVxuXHR7XG5cdFx0dmFyIG51bURpcmVjdGlvbmFsTGlnaHRzT2xkOm51bWJlciA9IHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHR2YXIgbnVtUG9pbnRMaWdodHNPbGQ6bnVtYmVyID0gdGhpcy5fcE51bVBvaW50TGlnaHRzO1xuXHRcdHZhciBudW1MaWdodFByb2Jlc09sZDpudW1iZXIgPSB0aGlzLl9wTnVtTGlnaHRQcm9iZXM7XG5cblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyICYmICh0aGlzLl9wYXNzTW9kZSAmIE1hdGVyaWFsUGFzc01vZGUuTElHSFRJTkcpKSB7XG5cdFx0XHR0aGlzLl9wTnVtRGlyZWN0aW9uYWxMaWdodHMgPSB0aGlzLmNhbGN1bGF0ZU51bURpcmVjdGlvbmFsTGlnaHRzKHRoaXMuX3BMaWdodFBpY2tlci5udW1EaXJlY3Rpb25hbExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9wTnVtUG9pbnRMaWdodHMgPSB0aGlzLmNhbGN1bGF0ZU51bVBvaW50TGlnaHRzKHRoaXMuX3BMaWdodFBpY2tlci5udW1Qb2ludExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9wTnVtTGlnaHRQcm9iZXMgPSB0aGlzLmNhbGN1bGF0ZU51bVByb2Jlcyh0aGlzLl9wTGlnaHRQaWNrZXIubnVtTGlnaHRQcm9iZXMpO1xuXG5cdFx0XHRpZiAodGhpcy5faW5jbHVkZUNhc3RlcnMpIHtcblx0XHRcdFx0dGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzICs9IHRoaXMuX3BMaWdodFBpY2tlci5udW1DYXN0aW5nRGlyZWN0aW9uYWxMaWdodHM7XG5cdFx0XHRcdHRoaXMuX3BOdW1Qb2ludExpZ2h0cyArPSB0aGlzLl9wTGlnaHRQaWNrZXIubnVtQ2FzdGluZ1BvaW50TGlnaHRzO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cyA9IDA7XG5cdFx0XHR0aGlzLl9wTnVtUG9pbnRMaWdodHMgPSAwO1xuXHRcdFx0dGhpcy5fcE51bUxpZ2h0UHJvYmVzID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLl9wTnVtTGlnaHRzID0gdGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzICsgdGhpcy5fcE51bVBvaW50TGlnaHRzO1xuXG5cdFx0aWYgKG51bURpcmVjdGlvbmFsTGlnaHRzT2xkICE9IHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cyB8fCBudW1Qb2ludExpZ2h0c09sZCAhPSB0aGlzLl9wTnVtUG9pbnRMaWdodHMgfHwgbnVtTGlnaHRQcm9iZXNPbGQgIT0gdGhpcy5fcE51bUxpZ2h0UHJvYmVzKVxuXHRcdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHRwdWJsaWMgX2lJbmNsdWRlRGVwZW5kZW5jaWVzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2ZvcmNlU2VwYXJhdGVNVlApXG5cdFx0XHRzaGFkZXJPYmplY3QuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzKys7XG5cblx0XHRzaGFkZXJPYmplY3Qub3V0cHV0c05vcm1hbHMgPSB0aGlzLl9wT3V0cHV0c05vcm1hbHMoc2hhZGVyT2JqZWN0KTtcblx0XHRzaGFkZXJPYmplY3Qub3V0cHV0c1RhbmdlbnROb3JtYWxzID0gc2hhZGVyT2JqZWN0Lm91dHB1dHNOb3JtYWxzICYmIHRoaXMuX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0KTtcblx0XHRzaGFkZXJPYmplY3QudXNlc1RhbmdlbnRTcGFjZSA9IHNoYWRlck9iamVjdC5vdXRwdXRzVGFuZ2VudE5vcm1hbHMgJiYgdGhpcy5fcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0KTtcblxuXHRcdGlmICghc2hhZGVyT2JqZWN0LnVzZXNUYW5nZW50U3BhY2UpXG5cdFx0XHRzaGFkZXJPYmplY3QuYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhCb29sZWFuKHRoaXMuX3Bhc3NNb2RlICYgTWF0ZXJpYWxQYXNzTW9kZS5FRkZFQ1RTKSk7XG5cdH1cblxuXG5cdHB1YmxpYyBfaUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIF9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQcmVMaWdodGluZ0ZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0cHVibGljIF9pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXROb3JtYWxWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXROb3JtYWxGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGF0IG5lZWQgdG8gYmUgc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldCBpTnVtUG9pbnRMaWdodHMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wTnVtUG9pbnRMaWdodHM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkaXJlY3Rpb25hbCBsaWdodHMgdGhhdCBuZWVkIHRvIGJlIHN1cHBvcnRlZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgaU51bURpcmVjdGlvbmFsTGlnaHRzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgbGlnaHQgcHJvYmVzIHRoYXQgbmVlZCB0byBiZSBzdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGlOdW1MaWdodFByb2JlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BOdW1MaWdodFByb2Jlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgY2FsY3VsYXRlZCBhdCBhbGwuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzTm9ybWFscyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBub3JtYWxzIGFyZSBjYWxjdWxhdGVkIGluIHRhbmdlbnQgc3BhY2UuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgYWxsb3dlZCBpbiB0YW5nZW50IHNwYWNlLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgbm8gb2JqZWN0LXNwYWNlXG5cdCAqIGRlcGVuZGVuY2llcyBleGlzdC5cblx0ICovXG5cdHB1YmxpYyBfcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgb2YgZGlyZWN0aW9uYWwgbGlnaHRzIHRoaXMgbWF0ZXJpYWwgd2lsbCBzdXBwb3J0LlxuXHQgKiBAcGFyYW0gbnVtRGlyZWN0aW9uYWxMaWdodHMgVGhlIG1heGltdW0gYW1vdW50IG9mIGRpcmVjdGlvbmFsIGxpZ2h0cyB0byBzdXBwb3J0LlxuXHQgKiBAcmV0dXJuIFRoZSBhbW91bnQgb2YgZGlyZWN0aW9uYWwgbGlnaHRzIHRoaXMgbWF0ZXJpYWwgd2lsbCBzdXBwb3J0LCBib3VuZGVkIGJ5IHRoZSBhbW91bnQgbmVjZXNzYXJ5LlxuXHQgKi9cblx0cHJpdmF0ZSBjYWxjdWxhdGVOdW1EaXJlY3Rpb25hbExpZ2h0cyhudW1EaXJlY3Rpb25hbExpZ2h0czpudW1iZXIpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIE1hdGgubWluKG51bURpcmVjdGlvbmFsTGlnaHRzIC0gdGhpcy5fZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQsIHRoaXMuX21heExpZ2h0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydC5cblx0ICogQHBhcmFtIG51bURpcmVjdGlvbmFsTGlnaHRzIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBwb2ludCBsaWdodHMgdG8gc3VwcG9ydC5cblx0ICogQHJldHVybiBUaGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydCwgYm91bmRlZCBieSB0aGUgYW1vdW50IG5lY2Vzc2FyeS5cblx0ICovXG5cdHByaXZhdGUgY2FsY3VsYXRlTnVtUG9pbnRMaWdodHMobnVtUG9pbnRMaWdodHM6bnVtYmVyKTpudW1iZXJcblx0e1xuXHRcdHZhciBudW1GcmVlOm51bWJlciA9IHRoaXMuX21heExpZ2h0cyAtIHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHRyZXR1cm4gTWF0aC5taW4obnVtUG9pbnRMaWdodHMgLSB0aGlzLl9wb2ludExpZ2h0c09mZnNldCwgbnVtRnJlZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpZ2h0IHByb2JlcyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydC5cblx0ICogQHBhcmFtIG51bURpcmVjdGlvbmFsTGlnaHRzIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBsaWdodCBwcm9iZXMgdG8gc3VwcG9ydC5cblx0ICogQHJldHVybiBUaGUgYW1vdW50IG9mIGxpZ2h0IHByb2JlcyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydCwgYm91bmRlZCBieSB0aGUgYW1vdW50IG5lY2Vzc2FyeS5cblx0ICovXG5cdHByaXZhdGUgY2FsY3VsYXRlTnVtUHJvYmVzKG51bUxpZ2h0UHJvYmVzOm51bWJlcik6bnVtYmVyXG5cdHtcblx0XHR2YXIgbnVtQ2hhbm5lbHM6bnVtYmVyID0gMDtcblx0XHQvL1x0XHRcdGlmICgodGhpcy5fcFNwZWN1bGFyTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLlBST0JFUykgIT0gMClcblx0XHQvL1x0XHRcdFx0KytudW1DaGFubmVscztcblx0XHQvL1xuXHRcdC8vXHRcdFx0aWYgKCh0aGlzLl9wRGlmZnVzZUxpZ2h0U291cmNlcyAmIExpZ2h0U291cmNlcy5QUk9CRVMpICE9IDApXG5cdFx0Ly9cdFx0XHRcdCsrbnVtQ2hhbm5lbHM7XG5cblx0XHQvLyA0IGNoYW5uZWxzIGF2YWlsYWJsZVxuXHRcdHJldHVybiBNYXRoLm1pbihudW1MaWdodFByb2JlcyAtIHRoaXMuX2xpZ2h0UHJvYmVzT2Zmc2V0LCAoNC9udW1DaGFubmVscykgfCAwKTtcblx0fVxuXG5cdHB1YmxpYyBfaUFkZE1hdGVyaWFsUGFzc0RhdGEobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKTpNYXRlcmlhbFBhc3NEYXRhXG5cdHtcblx0XHR0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLnB1c2gobWF0ZXJpYWxQYXNzRGF0YSk7XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWxQYXNzRGF0YTtcblx0fVxuXG5cdHB1YmxpYyBfaVJlbW92ZU1hdGVyaWFsUGFzc0RhdGEobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKTpNYXRlcmlhbFBhc3NEYXRhXG5cdHtcblx0XHR0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLnNwbGljZSh0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmluZGV4T2YobWF0ZXJpYWxQYXNzRGF0YSksIDEpO1xuXG5cdFx0cmV0dXJuIG1hdGVyaWFsUGFzc0RhdGE7XG5cdH1cbn1cblxuZXhwb3J0ID0gTWF0ZXJpYWxQYXNzQmFzZTsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL21hdGVyaWFscGFzc2Jhc2UudHMiXSwibmFtZXMiOlsiTWF0ZXJpYWxQYXNzQmFzZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY29uc3RydWN0b3IiLCJNYXRlcmlhbFBhc3NCYXNlLnByZXNlcnZlQWxwaGEiLCJNYXRlcmlhbFBhc3NCYXNlLmluY2x1ZGVDYXN0ZXJzIiwiTWF0ZXJpYWxQYXNzQmFzZS5mb3JjZVNlcGFyYXRlTVZQIiwiTWF0ZXJpYWxQYXNzQmFzZS5kaXJlY3Rpb25hbExpZ2h0c09mZnNldCIsIk1hdGVyaWFsUGFzc0Jhc2UucG9pbnRMaWdodHNPZmZzZXQiLCJNYXRlcmlhbFBhc3NCYXNlLmxpZ2h0UHJvYmVzT2Zmc2V0IiwiTWF0ZXJpYWxQYXNzQmFzZS5wYXNzTW9kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY3JlYXRlU2hhZGVyT2JqZWN0IiwiTWF0ZXJpYWxQYXNzQmFzZS53cml0ZURlcHRoIiwiTWF0ZXJpYWxQYXNzQmFzZS5kZXB0aENvbXBhcmVNb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5kaXNwb3NlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faVJlbmRlciIsIk1hdGVyaWFsUGFzc0Jhc2Uuc2V0UmVuZGVyU3RhdGUiLCJNYXRlcmlhbFBhc3NCYXNlLnNldEJsZW5kTW9kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lBY3RpdmF0ZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lEZWFjdGl2YXRlIiwiTWF0ZXJpYWxQYXNzQmFzZS5fcEludmFsaWRhdGVQYXNzIiwiTWF0ZXJpYWxQYXNzQmFzZS5saWdodFBpY2tlciIsIk1hdGVyaWFsUGFzc0Jhc2Uub25MaWdodHNDaGFuZ2UiLCJNYXRlcmlhbFBhc3NCYXNlLnBVcGRhdGVMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lJbml0Q29uc3RhbnREYXRhIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldFByZUxpZ2h0aW5nVmVydGV4Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXRQcmVMaWdodGluZ0ZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXRWZXJ0ZXhDb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldEZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lHZXROb3JtYWxWZXJ0ZXhDb2RlIiwiTWF0ZXJpYWxQYXNzQmFzZS5faUdldE5vcm1hbEZyYWdtZW50Q29kZSIsIk1hdGVyaWFsUGFzc0Jhc2UuaU51bVBvaW50TGlnaHRzIiwiTWF0ZXJpYWxQYXNzQmFzZS5pTnVtRGlyZWN0aW9uYWxMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLmlOdW1MaWdodFByb2JlcyIsIk1hdGVyaWFsUGFzc0Jhc2UuX3BPdXRwdXRzTm9ybWFscyIsIk1hdGVyaWFsUGFzc0Jhc2UuX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMiLCJNYXRlcmlhbFBhc3NCYXNlLl9wVXNlc1RhbmdlbnRTcGFjZSIsIk1hdGVyaWFsUGFzc0Jhc2UuY2FsY3VsYXRlTnVtRGlyZWN0aW9uYWxMaWdodHMiLCJNYXRlcmlhbFBhc3NCYXNlLmNhbGN1bGF0ZU51bVBvaW50TGlnaHRzIiwiTWF0ZXJpYWxQYXNzQmFzZS5jYWxjdWxhdGVOdW1Qcm9iZXMiLCJNYXRlcmlhbFBhc3NCYXNlLl9pQWRkTWF0ZXJpYWxQYXNzRGF0YSIsIk1hdGVyaWFsUGFzc0Jhc2UuX2lSZW1vdmVNYXRlcmlhbFBhc3NEYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzdFLElBQU8sYUFBYSxXQUFjLHNDQUFzQyxDQUFDLENBQUM7QUFDMUUsSUFBTyxLQUFLLFdBQWdCLDhCQUE4QixDQUFDLENBQUM7QUFFNUQsSUFBTyxTQUFTLFdBQWUsbUNBQW1DLENBQUMsQ0FBQztBQVFwRSxJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDeEYsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBRXhGLElBQU8sZ0JBQWdCLFdBQWMsMkRBQTJELENBQUMsQ0FBQztBQUlsRyxJQUFPLGdCQUFnQixXQUFjLHNEQUFzRCxDQUFDLENBQUM7QUFFN0YsQUFJQTs7O0dBREc7SUFDRyxnQkFBZ0I7SUFBU0EsVUFBekJBLGdCQUFnQkEsVUFBdUJBO0lBK0k1Q0E7O09BRUdBO0lBQ0hBLFNBbEpLQSxnQkFBZ0JBLENBa0pUQSxRQUFzQkE7UUFsSm5DQyxpQkFzaUJDQTtRQXBaWUEsd0JBQXNCQSxHQUF0QkEsZUFBc0JBO1FBRWpDQSxpQkFBT0EsQ0FBQ0E7UUFsSkRBLHNCQUFpQkEsR0FBMkJBLElBQUlBLEtBQUtBLEVBQW9CQSxDQUFDQTtRQUMxRUEsZUFBVUEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDdEJBLG1CQUFjQSxHQUFXQSxJQUFJQSxDQUFDQTtRQUM5QkEsb0JBQWVBLEdBQVdBLElBQUlBLENBQUNBO1FBQy9CQSxzQkFBaUJBLEdBQVdBLEtBQUtBLENBQUNBO1FBRWxDQSw2QkFBd0JBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3BDQSx1QkFBa0JBLEdBQVVBLENBQUNBLENBQUNBO1FBQzlCQSx1QkFBa0JBLEdBQVVBLENBQUNBLENBQUNBO1FBRS9CQSxxQkFBZ0JBLEdBQVVBLENBQUNBLENBQUNBO1FBQzVCQSwyQkFBc0JBLEdBQVVBLENBQUNBLENBQUNBO1FBQ2xDQSxxQkFBZ0JBLEdBQVVBLENBQUNBLENBQUNBO1FBQzVCQSxnQkFBV0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFJdEJBLHNCQUFpQkEsR0FBVUEsb0JBQW9CQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUUzREEsdUJBQWtCQSxHQUFVQSxvQkFBb0JBLENBQUNBLEdBQUdBLENBQUNBO1FBQ3JEQSxxQkFBZ0JBLEdBQVVBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFFckRBLHFCQUFnQkEsR0FBV0EsS0FBS0EsQ0FBQ0E7UUFJaENBLGdCQUFXQSxHQUFXQSxJQUFJQSxDQUFDQTtRQTBIbENBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLFFBQVFBLENBQUNBO1FBRTFCQSxJQUFJQSxDQUFDQSx1QkFBdUJBLEdBQUdBLFVBQUNBLEtBQVdBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLEVBQTFCQSxDQUEwQkEsQ0FBQ0E7SUFDNUVBLENBQUNBO0lBdkhERCxzQkFBV0EsMkNBQWFBO1FBSHhCQTs7V0FFR0E7YUFDSEE7WUFFQ0UsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0E7UUFDNUJBLENBQUNBO2FBRURGLFVBQXlCQSxLQUFhQTtZQUVyQ0UsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsY0FBY0EsSUFBSUEsS0FBS0EsQ0FBQ0E7Z0JBQ2hDQSxNQUFNQSxDQUFDQTtZQUVSQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUU1QkEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxDQUFDQTtRQUN6QkEsQ0FBQ0E7OztPQVZBRjtJQWVEQSxzQkFBV0EsNENBQWNBO1FBSHpCQTs7V0FFR0E7YUFDSEE7WUFFQ0csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7UUFDN0JBLENBQUNBO2FBRURILFVBQTBCQSxLQUFhQTtZQUV0Q0csRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsSUFBSUEsS0FBS0EsQ0FBQ0E7Z0JBQ2pDQSxNQUFNQSxDQUFDQTtZQUVSQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUU3QkEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxDQUFDQTtRQUN6QkEsQ0FBQ0E7OztPQVZBSDtJQWlCREEsc0JBQVdBLDhDQUFnQkE7UUFMM0JBOzs7O1dBSUdBO2FBQ0hBO1lBRUNJLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDL0JBLENBQUNBO2FBRURKLFVBQTRCQSxLQUFhQTtZQUV4Q0ksRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxJQUFJQSxLQUFLQSxDQUFDQTtnQkFDbkNBLE1BQU1BLENBQUNBO1lBRVJBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFFL0JBLElBQUlBLENBQUNBLGdCQUFnQkEsRUFBRUEsQ0FBQ0E7UUFDekJBLENBQUNBOzs7T0FWQUo7SUFlREEsc0JBQVdBLHFEQUF1QkE7UUFKbENBOzs7V0FHR0E7YUFDSEE7WUFFQ0ssTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0Esd0JBQXdCQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7YUFFREwsVUFBbUNBLEtBQVlBO1lBRTlDSyxJQUFJQSxDQUFDQSx3QkFBd0JBLEdBQUdBLEtBQUtBLENBQUNBO1FBQ3ZDQSxDQUFDQTs7O09BTEFMO0lBV0RBLHNCQUFXQSwrQ0FBaUJBO1FBSjVCQTs7O1dBR0dBO2FBQ0hBO1lBRUNNLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0E7UUFDaENBLENBQUNBO2FBRUROLFVBQTZCQSxLQUFZQTtZQUV4Q00sSUFBSUEsQ0FBQ0Esa0JBQWtCQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUNqQ0EsQ0FBQ0E7OztPQUxBTjtJQVdEQSxzQkFBV0EsK0NBQWlCQTtRQUo1QkE7OztXQUdHQTthQUNIQTtZQUVDTyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBO1FBQ2hDQSxDQUFDQTthQUVEUCxVQUE2QkEsS0FBWUE7WUFFeENPLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDakNBLENBQUNBOzs7T0FMQVA7SUFVREEsc0JBQVdBLHNDQUFRQTtRQUhuQkE7O1dBRUdBO2FBQ0hBO1lBRUNRLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1FBQ3ZCQSxDQUFDQTthQUVEUixVQUFvQkEsS0FBWUE7WUFFL0JRLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLEtBQUtBLENBQUNBO1lBRXZCQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLENBQUNBO1FBQ3pCQSxDQUFDQTs7O09BUEFSO0lBcUJEQTs7OztPQUlHQTtJQUNJQSw2Q0FBa0JBLEdBQXpCQSxVQUEwQkEsT0FBY0E7UUFFdkNTLE1BQU1BLENBQUNBLElBQUlBLGdCQUFnQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7SUFDdENBLENBQUNBO0lBS0RULHNCQUFXQSx3Q0FBVUE7UUFIckJBOztXQUVHQTthQUNIQTtZQUVDVSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUN6QkEsQ0FBQ0E7YUFFRFYsVUFBc0JBLEtBQWFBO1lBRWxDVSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUMxQkEsQ0FBQ0E7OztPQUxBVjtJQVlEQSxzQkFBV0EsOENBQWdCQTtRQUwzQkE7Ozs7V0FJR0E7YUFDSEE7WUFFQ1csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtRQUMvQkEsQ0FBQ0E7YUFFRFgsVUFBNEJBLEtBQVlBO1lBRXZDVyxJQUFJQSxDQUFDQSxpQkFBaUJBLEdBQUdBLEtBQUtBLENBQUNBO1FBQ2hDQSxDQUFDQTs7O09BTEFYO0lBT0RBOzs7T0FHR0E7SUFDSUEsa0NBQU9BLEdBQWRBO1FBRUNZLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBO1lBQ3RCQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxtQkFBbUJBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsQ0FBQ0E7UUFFcEZBLE9BQU9BLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsTUFBTUE7WUFDbkNBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFckNBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDL0JBLENBQUNBO0lBRURaOzs7O09BSUdBO0lBQ0lBLG1DQUFRQSxHQUFmQSxVQUFnQkEsSUFBcUJBLEVBQUVBLFVBQXlCQSxFQUFFQSxLQUFXQSxFQUFFQSxNQUFhQSxFQUFFQSxjQUF1QkE7UUFFcEhhLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLElBQUlBLEVBQUVBLFVBQVVBLEVBQUVBLEtBQUtBLEVBQUVBLE1BQU1BLEVBQUVBLGNBQWNBLENBQUNBLENBQUNBO0lBQ3RFQSxDQUFDQTtJQUVEYjs7Ozs7O09BTUdBO0lBQ0lBLHlDQUFjQSxHQUFyQkEsVUFBc0JBLElBQXFCQSxFQUFFQSxVQUF5QkEsRUFBRUEsS0FBV0EsRUFBRUEsTUFBYUEsRUFBRUEsY0FBdUJBO1FBRTFIYyxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxjQUFjQSxDQUFDQSxVQUFVQSxFQUFFQSxLQUFLQSxFQUFFQSxNQUFNQSxFQUFFQSxjQUFjQSxDQUFDQSxDQUFDQTtJQUM3RUEsQ0FBQ0E7SUFFRGQ7Ozs7Ozs7OztPQVNHQTtJQUNJQSx1Q0FBWUEsR0FBbkJBLFVBQW9CQSxLQUFZQTtRQUUvQmUsTUFBTUEsQ0FBQ0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFFZkEsS0FBS0EsU0FBU0EsQ0FBQ0EsTUFBTUE7Z0JBRXBCQSxJQUFJQSxDQUFDQSxrQkFBa0JBLEdBQUdBLG9CQUFvQkEsQ0FBQ0EsR0FBR0EsQ0FBQ0E7Z0JBQ25EQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7Z0JBQ2xEQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLEtBQUtBLENBQUNBO2dCQUU5QkEsS0FBS0EsQ0FBQ0E7WUFFUEEsS0FBS0EsU0FBU0EsQ0FBQ0EsS0FBS0E7Z0JBRW5CQSxJQUFJQSxDQUFDQSxrQkFBa0JBLEdBQUdBLG9CQUFvQkEsQ0FBQ0EsWUFBWUEsQ0FBQ0E7Z0JBQzVEQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLG9CQUFvQkEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtnQkFDcEVBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7Z0JBRTdCQSxLQUFLQSxDQUFDQTtZQUVQQSxLQUFLQSxTQUFTQSxDQUFDQSxRQUFRQTtnQkFFdEJBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQTtnQkFDcERBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxZQUFZQSxDQUFDQTtnQkFDMURBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7Z0JBRTdCQSxLQUFLQSxDQUFDQTtZQUVQQSxLQUFLQSxTQUFTQSxDQUFDQSxHQUFHQTtnQkFFakJBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxZQUFZQSxDQUFDQTtnQkFDNURBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxHQUFHQSxDQUFDQTtnQkFDakRBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7Z0JBRTdCQSxLQUFLQSxDQUFDQTtZQUVQQSxLQUFLQSxTQUFTQSxDQUFDQSxLQUFLQTtnQkFFbkJBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxJQUFJQSxDQUFDQTtnQkFDcERBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0Esb0JBQW9CQSxDQUFDQSxZQUFZQSxDQUFDQTtnQkFDMURBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7Z0JBRTdCQSxLQUFLQSxDQUFDQTtZQUVQQTtnQkFFQ0EsTUFBTUEsSUFBSUEsYUFBYUEsQ0FBQ0EseUJBQXlCQSxDQUFDQSxDQUFDQTtRQUVyREEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFFRGY7Ozs7OztPQU1HQTtJQUNJQSxxQ0FBVUEsR0FBakJBLFVBQWtCQSxJQUFxQkEsRUFBRUEsS0FBV0EsRUFBRUEsTUFBYUE7UUFFbEVnQixJQUFJQSxPQUFPQSxHQUFxQ0EsS0FBS0EsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFFOURBLE9BQU9BLENBQUNBLFlBQVlBLENBQUNBLENBQUVBLElBQUlBLENBQUNBLFdBQVdBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBRUEsRUFBRUEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxDQUFDQTtRQUU3RkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtZQUN6QkEsT0FBT0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLENBQUNBO1FBRXpFQSxPQUFPQSxDQUFDQSxvQkFBb0JBLENBQUNBLElBQUlBLEVBQUVBLEtBQUtBLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO0lBQ25EQSxDQUFDQTtJQUVEaEI7Ozs7O09BS0dBO0lBQ0lBLHVDQUFZQSxHQUFuQkEsVUFBb0JBLElBQXFCQSxFQUFFQSxLQUFXQTtRQUVsQ2lCLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsSUFBSUEsRUFBRUEsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFFbkRBLEtBQUtBLENBQUNBLE9BQVFBLENBQUNBLFlBQVlBLENBQUNBLElBQUlBLEVBQUVBLG9CQUFvQkEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsRUFBRUEsb0JBQW9CQTtJQUM1R0EsQ0FBQ0EsR0FEc0ZBO0lBR3ZGakI7Ozs7T0FJR0E7SUFDSUEsMkNBQWdCQSxHQUF2QkE7UUFFQ2tCLElBQUlBLEdBQUdBLEdBQVVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDL0NBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBLEVBQUVBO1lBQ2xDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLFVBQVVBLEVBQUVBLENBQUNBO1FBRXhDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxLQUFLQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUM3Q0EsQ0FBQ0E7SUFRRGxCLHNCQUFXQSx5Q0FBV0E7UUFOdEJBOzs7OztXQUtHQTthQUNIQTtZQUVDbUIsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDM0JBLENBQUNBO2FBRURuQixVQUF1QkEsS0FBcUJBO1lBRTNDbUIsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7Z0JBQ3RCQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxtQkFBbUJBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLEVBQUVBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsQ0FBQ0E7WUFFcEZBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLEtBQUtBLENBQUNBO1lBRTNCQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtnQkFDdEJBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxDQUFDQTtZQUVqRkEsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsQ0FBQ0E7UUFDdEJBLENBQUNBOzs7T0FiQW5CO0lBZURBOztPQUVHQTtJQUNLQSx5Q0FBY0EsR0FBdEJBLFVBQXVCQSxLQUFXQTtRQUVqQ29CLElBQUlBLENBQUNBLGFBQWFBLEVBQUVBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUVEcEI7O09BRUdBO0lBQ0lBLHdDQUFhQSxHQUFwQkE7UUFFQ3FCLElBQUlBLHVCQUF1QkEsR0FBVUEsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtRQUNqRUEsSUFBSUEsaUJBQWlCQSxHQUFVQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBO1FBQ3JEQSxJQUFJQSxpQkFBaUJBLEdBQVVBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0E7UUFFckRBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLGdCQUFnQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDeEVBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsNkJBQTZCQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxvQkFBb0JBLENBQUNBLENBQUNBO1lBQzFHQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0E7WUFDeEZBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxjQUFjQSxDQUFDQSxDQUFDQTtZQUVuRkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzFCQSxJQUFJQSxDQUFDQSxzQkFBc0JBLElBQUlBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLDJCQUEyQkEsQ0FBQ0E7Z0JBQzlFQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLElBQUlBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLHFCQUFxQkEsQ0FBQ0E7WUFDbkVBLENBQUNBO1FBRUZBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDaENBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDMUJBLElBQUlBLENBQUNBLGdCQUFnQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDM0JBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLENBQUNBLHNCQUFzQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtRQUV2RUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsdUJBQXVCQSxJQUFJQSxJQUFJQSxDQUFDQSxzQkFBc0JBLElBQUlBLGlCQUFpQkEsSUFBSUEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxJQUFJQSxpQkFBaUJBLElBQUlBLElBQUlBLENBQUNBLGdCQUFnQkEsQ0FBQ0E7WUFDdEpBLElBQUlBLENBQUNBLGdCQUFnQkEsRUFBRUEsQ0FBQ0E7SUFDMUJBLENBQUNBO0lBRU1yQixnREFBcUJBLEdBQTVCQSxVQUE2QkEsWUFBNkJBO1FBRXpEc0IsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtZQUMxQkEsWUFBWUEsQ0FBQ0EscUJBQXFCQSxFQUFFQSxDQUFDQTtRQUV0Q0EsWUFBWUEsQ0FBQ0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUNsRUEsWUFBWUEsQ0FBQ0EscUJBQXFCQSxHQUFHQSxZQUFZQSxDQUFDQSxjQUFjQSxJQUFJQSxJQUFJQSxDQUFDQSx1QkFBdUJBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBQy9HQSxZQUFZQSxDQUFDQSxnQkFBZ0JBLEdBQUdBLFlBQVlBLENBQUNBLHFCQUFxQkEsSUFBSUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUU1R0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtZQUNsQ0EsWUFBWUEsQ0FBQ0EseUJBQXlCQSxDQUFDQSxPQUFPQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxHQUFHQSxnQkFBZ0JBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBO0lBQzdGQSxDQUFDQTtJQUdNdEIsNkNBQWtCQSxHQUF6QkEsVUFBMEJBLFlBQTZCQTtJQUd2RHVCLENBQUNBO0lBRU12QixxREFBMEJBLEdBQWpDQSxVQUFrQ0EsWUFBNkJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFckl3QixNQUFNQSxDQUFDQSxFQUFFQSxDQUFDQTtJQUNYQSxDQUFDQTtJQUVNeEIsdURBQTRCQSxHQUFuQ0EsVUFBb0NBLFlBQTZCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRXZJeUIsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7SUFDWEEsQ0FBQ0E7SUFFTXpCLDBDQUFlQSxHQUF0QkEsVUFBdUJBLFlBQTZCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRTFIMEIsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7SUFDWEEsQ0FBQ0E7SUFFTTFCLDRDQUFpQkEsR0FBeEJBLFVBQXlCQSxZQUE2QkEsRUFBRUEsYUFBaUNBLEVBQUVBLGVBQWtDQTtRQUU1SDJCLE1BQU1BLENBQUNBLEVBQUVBLENBQUNBO0lBQ1hBLENBQUNBO0lBRU0zQixnREFBcUJBLEdBQTVCQSxVQUE2QkEsWUFBNkJBLEVBQUVBLGFBQWlDQSxFQUFFQSxlQUFrQ0E7UUFFaEk0QixNQUFNQSxDQUFDQSxFQUFFQSxDQUFDQTtJQUNYQSxDQUFDQTtJQUVNNUIsa0RBQXVCQSxHQUE5QkEsVUFBK0JBLFlBQTZCQSxFQUFFQSxhQUFpQ0EsRUFBRUEsZUFBa0NBO1FBRWxJNkIsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7SUFDWEEsQ0FBQ0E7SUFLRDdCLHNCQUFXQSw2Q0FBZUE7UUFIMUJBOztXQUVHQTthQUNIQTtZQUVDOEIsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtRQUM5QkEsQ0FBQ0E7OztPQUFBOUI7SUFLREEsc0JBQVdBLG1EQUFxQkE7UUFIaENBOztXQUVHQTthQUNIQTtZQUVDK0IsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtRQUNwQ0EsQ0FBQ0E7OztPQUFBL0I7SUFLREEsc0JBQVdBLDZDQUFlQTtRQUgxQkE7O1dBRUdBO2FBQ0hBO1lBRUNnQyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBO1FBQzlCQSxDQUFDQTs7O09BQUFoQztJQUVEQTs7T0FFR0E7SUFDSUEsMkNBQWdCQSxHQUF2QkEsVUFBd0JBLFlBQTZCQTtRQUVwRGlDLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBO0lBQ2RBLENBQUNBO0lBRURqQzs7T0FFR0E7SUFDSUEsa0RBQXVCQSxHQUE5QkEsVUFBK0JBLFlBQTZCQTtRQUUzRGtDLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBO0lBQ2RBLENBQUNBO0lBRURsQzs7O09BR0dBO0lBQ0lBLDZDQUFrQkEsR0FBekJBLFVBQTBCQSxZQUE2QkE7UUFFdERtQyxNQUFNQSxDQUFDQSxLQUFLQSxDQUFDQTtJQUNkQSxDQUFDQTtJQUVEbkM7Ozs7T0FJR0E7SUFDS0Esd0RBQTZCQSxHQUFyQ0EsVUFBc0NBLG9CQUEyQkE7UUFFaEVvQyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxvQkFBb0JBLEdBQUdBLElBQUlBLENBQUNBLHdCQUF3QkEsRUFBRUEsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0E7SUFDeEZBLENBQUNBO0lBRURwQzs7OztPQUlHQTtJQUNLQSxrREFBdUJBLEdBQS9CQSxVQUFnQ0EsY0FBcUJBO1FBRXBEcUMsSUFBSUEsT0FBT0EsR0FBVUEsSUFBSUEsQ0FBQ0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0Esc0JBQXNCQSxDQUFDQTtRQUNuRUEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxPQUFPQSxDQUFDQSxDQUFDQTtJQUNwRUEsQ0FBQ0E7SUFFRHJDOzs7O09BSUdBO0lBQ0tBLDZDQUFrQkEsR0FBMUJBLFVBQTJCQSxjQUFxQkE7UUFFL0NzQyxJQUFJQSxXQUFXQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUMzQkEsQUFPQUEsa0VBUGtFQTtRQUNsRUEsb0JBQW9CQTtRQUNwQkEsRUFBRUE7UUFDRkEsaUVBQWlFQTtRQUNqRUEsb0JBQW9CQTtRQUVwQkEsdUJBQXVCQTtRQUN2QkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxDQUFDQSxDQUFDQSxHQUFDQSxXQUFXQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNoRkEsQ0FBQ0E7SUFFTXRDLGdEQUFxQkEsR0FBNUJBLFVBQTZCQSxnQkFBaUNBO1FBRTdEdUMsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLENBQUNBLENBQUNBO1FBRTlDQSxNQUFNQSxDQUFDQSxnQkFBZ0JBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVNdkMsbURBQXdCQSxHQUEvQkEsVUFBZ0NBLGdCQUFpQ0E7UUFFaEV3QyxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUVuRkEsTUFBTUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFDRnhDLHVCQUFDQTtBQUFEQSxDQXRpQkEsQUFzaUJDQSxFQXRpQjhCLGNBQWMsRUFzaUI1QztBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgTWF0cml4M0RVdGlsc1x0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RVdGlsc1wiKTtcbmltcG9ydCBOYW1lZEFzc2V0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2xpYnJhcnkvTmFtZWRBc3NldEJhc2VcIik7XG5pbXBvcnQgQXJndW1lbnRFcnJvclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9Bcmd1bWVudEVycm9yXCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcblxuaW1wb3J0IEJsZW5kTW9kZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9CbGVuZE1vZGVcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBMaWdodFBpY2tlckJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9tYXRlcmlhbHMvbGlnaHRwaWNrZXJzL0xpZ2h0UGlja2VyQmFzZVwiKTtcbmltcG9ydCBJTWF0ZXJpYWxQYXNzXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTWF0ZXJpYWxQYXNzXCIpO1xuXG5pbXBvcnQgU3RhZ2VcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBDb250ZXh0R0xCbGVuZEZhY3Rvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTEJsZW5kRmFjdG9yXCIpO1xuaW1wb3J0IENvbnRleHRHTENvbXBhcmVNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQ29tcGFyZU1vZGVcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJPYmplY3RCYXNlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyQ2FjaGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyQ2FjaGVcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgSU1hdGVyaWFsUGFzc1N0YWdlR0xcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9JTWF0ZXJpYWxQYXNzU3RhZ2VHTFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NNb2RlXCIpO1xuXG4vKipcbiAqIE1hdGVyaWFsUGFzc0Jhc2UgcHJvdmlkZXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWF0ZXJpYWwgc2hhZGVyIHBhc3Nlcy4gQSBtYXRlcmlhbCBwYXNzIGNvbnN0aXR1dGVzIGF0IGxlYXN0XG4gKiBhIHJlbmRlciBjYWxsIHBlciByZXF1aXJlZCByZW5kZXJhYmxlLlxuICovXG5jbGFzcyBNYXRlcmlhbFBhc3NCYXNlIGV4dGVuZHMgTmFtZWRBc3NldEJhc2UgaW1wbGVtZW50cyBJTWF0ZXJpYWxQYXNzLCBJTWF0ZXJpYWxQYXNzU3RhZ2VHTFxue1xuXHRwcml2YXRlIF9tYXRlcmlhbFBhc3NEYXRhOkFycmF5PE1hdGVyaWFsUGFzc0RhdGE+ID0gbmV3IEFycmF5PE1hdGVyaWFsUGFzc0RhdGE+KCk7XG5cdHByaXZhdGUgX21heExpZ2h0czpudW1iZXIgPSAzO1xuXHRwcml2YXRlIF9wcmVzZXJ2ZUFscGhhOmJvb2xlYW4gPSB0cnVlO1xuXHRwcml2YXRlIF9pbmNsdWRlQ2FzdGVyczpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfZm9yY2VTZXBhcmF0ZU1WUDpib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQ6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfcG9pbnRMaWdodHNPZmZzZXQ6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfbGlnaHRQcm9iZXNPZmZzZXQ6bnVtYmVyID0gMDtcblxuXHRwdWJsaWMgX3BOdW1Qb2ludExpZ2h0czpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1EaXJlY3Rpb25hbExpZ2h0czpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1MaWdodFByb2JlczpudW1iZXIgPSAwO1xuXHRwdWJsaWMgX3BOdW1MaWdodHM6bnVtYmVyID0gMDtcblxuXHRwcml2YXRlIF9wYXNzTW9kZTpudW1iZXI7XG5cblx0cHJpdmF0ZSBfZGVwdGhDb21wYXJlTW9kZTpzdHJpbmcgPSBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMO1xuXG5cdHByaXZhdGUgX2JsZW5kRmFjdG9yU291cmNlOnN0cmluZyA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORTtcblx0cHJpdmF0ZSBfYmxlbmRGYWN0b3JEZXN0OnN0cmluZyA9IENvbnRleHRHTEJsZW5kRmFjdG9yLlpFUk87XG5cblx0cHVibGljIF9wRW5hYmxlQmxlbmRpbmc6Ym9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyAgX3BMaWdodFBpY2tlcjpMaWdodFBpY2tlckJhc2U7XG5cblx0cHJpdmF0ZSBfd3JpdGVEZXB0aDpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfb25MaWdodHNDaGFuZ2VEZWxlZ2F0ZTooZXZlbnQ6RXZlbnQpID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBvdXRwdXQgYWxwaGEgdmFsdWUgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG1hdGVyaWFsJ3Mgb3JpZ2luYWwgYWxwaGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHByZXNlcnZlQWxwaGEoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcHJlc2VydmVBbHBoYTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgcHJlc2VydmVBbHBoYSh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3ByZXNlcnZlQWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9wcmVzZXJ2ZUFscGhhID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wSW52YWxpZGF0ZVBhc3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgc2hhZG93IGNhc3RpbmcgbGlnaHRzIG5lZWQgdG8gYmUgaW5jbHVkZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGluY2x1ZGVDYXN0ZXJzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2luY2x1ZGVDYXN0ZXJzO1xuXHR9XG5cblx0cHVibGljIHNldCBpbmNsdWRlQ2FzdGVycyh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2luY2x1ZGVDYXN0ZXJzID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faW5jbHVkZUNhc3RlcnMgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzY3JlZW4gcHJvamVjdGlvbiBzaG91bGQgYmUgY2FsY3VsYXRlZCBieSBmb3JjaW5nIGEgc2VwYXJhdGUgc2NlbmUgbWF0cml4IGFuZFxuXHQgKiB2aWV3LXByb2plY3Rpb24gbWF0cml4LiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCByb3VuZGluZyBlcnJvcnMgd2hlbiB1c2luZyBtdWx0aXBsZSBwYXNzZXMgd2l0aCBkaWZmZXJlbnRcblx0ICogcHJvamVjdGlvbiBjb2RlLlxuXHQgKi9cblx0cHVibGljIGdldCBmb3JjZVNlcGFyYXRlTVZQKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2ZvcmNlU2VwYXJhdGVNVlA7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGZvcmNlU2VwYXJhdGVNVlAodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdGlmICh0aGlzLl9mb3JjZVNlcGFyYXRlTVZQID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZm9yY2VTZXBhcmF0ZU1WUCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBkaXJlY3Rpb25hbCBsaWdodCB2ZWN0b3IgZm9yIHdoaWNoIHRvIHN0YXJ0IGluY2x1ZGluZyBsaWdodHMuXG5cdCAqIFRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgbGlnaHQgcGlja2VyIGlzIGFzc2lnbmVkLlxuXHQgKi9cblx0cHVibGljIGdldCBkaXJlY3Rpb25hbExpZ2h0c09mZnNldCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRzT2Zmc2V0O1xuXHR9XG5cblx0cHVibGljIHNldCBkaXJlY3Rpb25hbExpZ2h0c09mZnNldCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaXJlY3Rpb25hbExpZ2h0c09mZnNldCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBwb2ludCBsaWdodCB2ZWN0b3IgZm9yIHdoaWNoIHRvIHN0YXJ0IGluY2x1ZGluZyBsaWdodHMuXG5cdCAqIFRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgbGlnaHQgcGlja2VyIGlzIGFzc2lnbmVkLlxuXHQgKi9cblx0cHVibGljIGdldCBwb2ludExpZ2h0c09mZnNldCgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BvaW50TGlnaHRzT2Zmc2V0O1xuXHR9XG5cblx0cHVibGljIHNldCBwb2ludExpZ2h0c09mZnNldCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wb2ludExpZ2h0c09mZnNldCA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB0aGUgb2Zmc2V0IGluIHRoZSBsaWdodCBwaWNrZXIncyBsaWdodCBwcm9iZXMgdmVjdG9yIGZvciB3aGljaCB0byBzdGFydCBpbmNsdWRpbmcgbGlnaHRzLlxuXHQgKiBUaGlzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIGxpZ2h0IHBpY2tlciBpcyBhc3NpZ25lZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbGlnaHRQcm9iZXNPZmZzZXQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9saWdodFByb2Jlc09mZnNldDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbGlnaHRQcm9iZXNPZmZzZXQodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5fbGlnaHRQcm9iZXNPZmZzZXQgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCBwYXNzTW9kZSgpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3Bhc3NNb2RlO1xuXHR9XG5cblx0cHVibGljIHNldCBwYXNzTW9kZSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9wYXNzTW9kZSA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBNYXRlcmlhbFBhc3NCYXNlIG9iamVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhc3NNb2RlOm51bWJlciA9IDB4MDMpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fcGFzc01vZGUgPSBwYXNzTW9kZTtcblxuXHRcdHRoaXMuX29uTGlnaHRzQ2hhbmdlRGVsZWdhdGUgPSAoZXZlbnQ6RXZlbnQpID0+IHRoaXMub25MaWdodHNDaGFuZ2UoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIHNoYWRlciBvYmplY3QgZm9yIHRoaXMgcGFzcy5cblx0ICpcblx0ICogQHBhcmFtIHByb2ZpbGUgVGhlIGNvbXBhdGliaWxpdHkgcHJvZmlsZSB1c2VkIGJ5IHRoZSByZW5kZXJlci5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVTaGFkZXJPYmplY3QocHJvZmlsZTpzdHJpbmcpOlNoYWRlck9iamVjdEJhc2Vcblx0e1xuXHRcdHJldHVybiBuZXcgU2hhZGVyT2JqZWN0QmFzZShwcm9maWxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgcGFzcyBzaG91bGQgd3JpdGUgdG8gdGhlIGRlcHRoIGJ1ZmZlciBvciBub3QuIElnbm9yZWQgd2hlbiBibGVuZGluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0cHVibGljIGdldCB3cml0ZURlcHRoKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3dyaXRlRGVwdGg7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHdyaXRlRGVwdGgodmFsdWU6Ym9vbGVhbilcblx0e1xuXHRcdHRoaXMuX3dyaXRlRGVwdGggPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVwdGggY29tcGFyZSBtb2RlIHVzZWQgdG8gcmVuZGVyIHRoZSByZW5kZXJhYmxlcyB1c2luZyB0aGlzIG1hdGVyaWFsLlxuXHQgKlxuXHQgKiBAc2VlIGF3YXkuc3RhZ2VnbC5Db250ZXh0R0xDb21wYXJlTW9kZVxuXHQgKi9cblx0cHVibGljIGdldCBkZXB0aENvbXBhcmVNb2RlKCk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGVwdGhDb21wYXJlTW9kZTtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGVwdGhDb21wYXJlTW9kZSh2YWx1ZTpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9kZXB0aENvbXBhcmVNb2RlID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY3VycmVudCBvYmplY3QuXG5cdCAqIEBwYXJhbSBkZWVwIEluZGljYXRlcyB3aGV0aGVyIG90aGVyIHJlc291cmNlcyBzaG91bGQgYmUgY2xlYW5lZCB1cCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBzaGFyZWQgYWNyb3NzIGRpZmZlcmVudCBpbnN0YW5jZXMuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyKVxuXHRcdFx0dGhpcy5fcExpZ2h0UGlja2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnQuQ0hBTkdFLCB0aGlzLl9vbkxpZ2h0c0NoYW5nZURlbGVnYXRlKTtcblxuXHRcdHdoaWxlICh0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmxlbmd0aClcblx0XHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFbMF0uZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fbWF0ZXJpYWxQYXNzRGF0YSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVycyBhbiBvYmplY3QgdG8gdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfaVJlbmRlcihwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHRoaXMuc2V0UmVuZGVyU3RhdGUocGFzcywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSwgdmlld1Byb2plY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlXG5cdCAqIEBwYXJhbSBzdGFnZVxuXHQgKiBAcGFyYW0gY2FtZXJhXG5cdCAqL1xuXHRwdWJsaWMgc2V0UmVuZGVyU3RhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCByZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgdmlld1Byb2plY3Rpb246TWF0cml4M0QpXG5cdHtcblx0XHRwYXNzLnNoYWRlck9iamVjdC5zZXRSZW5kZXJTdGF0ZShyZW5kZXJhYmxlLCBzdGFnZSwgY2FtZXJhLCB2aWV3UHJvamVjdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJsZW5kIG1vZGUgdG8gdXNlIHdoZW4gZHJhd2luZyB0aGlzIHJlbmRlcmFibGUuIFRoZSBmb2xsb3dpbmcgYmxlbmQgbW9kZXMgYXJlIHN1cHBvcnRlZDpcblx0ICogPHVsPlxuXHQgKiA8bGk+QmxlbmRNb2RlLk5PUk1BTDogTm8gYmxlbmRpbmcsIHVubGVzcyB0aGUgbWF0ZXJpYWwgaW5oZXJlbnRseSBuZWVkcyBpdDwvbGk+XG5cdCAqIDxsaT5CbGVuZE1vZGUuTEFZRVI6IEZvcmNlIGJsZW5kaW5nLiBUaGlzIHdpbGwgZHJhdyB0aGUgb2JqZWN0IHRoZSBzYW1lIGFzIE5PUk1BTCwgYnV0IHdpdGhvdXQgd3JpdGluZyBkZXB0aCB3cml0ZXMuPC9saT5cblx0ICogPGxpPkJsZW5kTW9kZS5NVUxUSVBMWTwvbGk+XG5cdCAqIDxsaT5CbGVuZE1vZGUuQUREPC9saT5cblx0ICogPGxpPkJsZW5kTW9kZS5BTFBIQTwvbGk+XG5cdCAqIDwvdWw+XG5cdCAqL1xuXHRwdWJsaWMgc2V0QmxlbmRNb2RlKHZhbHVlOnN0cmluZylcblx0e1xuXHRcdHN3aXRjaCAodmFsdWUpIHtcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuTk9STUFMOlxuXG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yU291cmNlID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuT05FO1xuXHRcdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRlc3QgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPO1xuXHRcdFx0XHR0aGlzLl9wRW5hYmxlQmxlbmRpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuTEFZRVI6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGVzdCA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORV9NSU5VU19TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX3BFbmFibGVCbGVuZGluZyA9IHRydWU7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQmxlbmRNb2RlLk1VTFRJUExZOlxuXG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yU291cmNlID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTztcblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JEZXN0ID0gQ29udGV4dEdMQmxlbmRGYWN0b3IuU09VUkNFX0NPTE9SO1xuXHRcdFx0XHR0aGlzLl9wRW5hYmxlQmxlbmRpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEJsZW5kTW9kZS5BREQ6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX2JsZW5kRmFjdG9yRGVzdCA9IENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORTtcblx0XHRcdFx0dGhpcy5fcEVuYWJsZUJsZW5kaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBCbGVuZE1vZGUuQUxQSEE6XG5cblx0XHRcdFx0dGhpcy5fYmxlbmRGYWN0b3JTb3VyY2UgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5aRVJPO1xuXHRcdFx0XHR0aGlzLl9ibGVuZEZhY3RvckRlc3QgPSBDb250ZXh0R0xCbGVuZEZhY3Rvci5TT1VSQ0VfQUxQSEE7XG5cdFx0XHRcdHRoaXMuX3BFbmFibGVCbGVuZGluZyA9IHRydWU7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cblx0XHRcdFx0dGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoXCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIVwiKTtcblxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSByZW5kZXIgc3RhdGUgZm9yIHRoZSBwYXNzIHRoYXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHJlbmRlcmVkIG9iamVjdC4gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlXG5cdCAqIGNhbGxpbmcgcmVuZGVyUGFzcy4gQmVmb3JlIGFjdGl2YXRpbmcgYSBwYXNzLCB0aGUgcHJldmlvdXNseSB1c2VkIHBhc3MgbmVlZHMgdG8gYmUgZGVhY3RpdmF0ZWQuXG5cdCAqIEBwYXJhbSBzdGFnZSBUaGUgU3RhZ2Ugb2JqZWN0IHdoaWNoIGlzIGN1cnJlbnRseSB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqIEBwYXJhbSBjYW1lcmEgVGhlIGNhbWVyYSBmcm9tIHdoaWNoIHRoZSBzY2VuZSBpcyB2aWV3ZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdGNvbnRleHQuc2V0RGVwdGhUZXN0KCggdGhpcy5fd3JpdGVEZXB0aCAmJiAhdGhpcy5fcEVuYWJsZUJsZW5kaW5nICksIHRoaXMuX2RlcHRoQ29tcGFyZU1vZGUpO1xuXG5cdFx0aWYgKHRoaXMuX3BFbmFibGVCbGVuZGluZylcblx0XHRcdGNvbnRleHQuc2V0QmxlbmRGYWN0b3JzKHRoaXMuX2JsZW5kRmFjdG9yU291cmNlLCB0aGlzLl9ibGVuZEZhY3RvckRlc3QpO1xuXG5cdFx0Y29udGV4dC5hY3RpdmF0ZU1hdGVyaWFsUGFzcyhwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHJlbmRlciBzdGF0ZSBmb3IgdGhlIHBhc3MuIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBhY3RpdmF0aW5nIGFub3RoZXIgcGFzcy5cblx0ICogQHBhcmFtIHN0YWdlIFRoZSBTdGFnZSB1c2VkIGZvciByZW5kZXJpbmdcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfaURlYWN0aXZhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSlcblx0e1xuXHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5kZWFjdGl2YXRlTWF0ZXJpYWxQYXNzKHBhc3MsIHN0YWdlKTtcblxuXHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5zZXREZXB0aFRlc3QodHJ1ZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTU19FUVVBTCk7IC8vIFRPRE8gOiBpbWVwbGVtZW50XG5cdH1cblxuXHQvKipcblx0ICogTWFya3MgdGhlIHNoYWRlciBwcm9ncmFtIGFzIGludmFsaWQsIHNvIGl0IHdpbGwgYmUgcmVjb21waWxlZCBiZWZvcmUgdGhlIG5leHQgcmVuZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gdXBkYXRlTWF0ZXJpYWwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGludmFsaWRhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBlbnRpcmUgbWF0ZXJpYWwuIFNob3VsZCBhbHdheXMgcGFzcyBcInRydWVcIiB1bmxlc3MgaXQncyBjYWxsZWQgZnJvbSB0aGUgbWF0ZXJpYWwgaXRzZWxmLlxuXHQgKi9cblx0cHVibGljIF9wSW52YWxpZGF0ZVBhc3MoKVxuXHR7XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47IGkrKylcblx0XHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFbaV0uaW52YWxpZGF0ZSgpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChFdmVudC5DSEFOR0UpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGlnaHQgcGlja2VyIHVzZWQgYnkgdGhlIG1hdGVyaWFsIHRvIHByb3ZpZGUgbGlnaHRzIHRvIHRoZSBtYXRlcmlhbCBpZiBpdCBzdXBwb3J0cyBsaWdodGluZy5cblx0ICpcblx0ICogQHNlZSBhd2F5Lm1hdGVyaWFscy5MaWdodFBpY2tlckJhc2Vcblx0ICogQHNlZSBhd2F5Lm1hdGVyaWFscy5TdGF0aWNMaWdodFBpY2tlclxuXHQgKi9cblx0cHVibGljIGdldCBsaWdodFBpY2tlcigpOkxpZ2h0UGlja2VyQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BMaWdodFBpY2tlcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbGlnaHRQaWNrZXIodmFsdWU6TGlnaHRQaWNrZXJCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BMaWdodFBpY2tlcilcblx0XHRcdHRoaXMuX3BMaWdodFBpY2tlci5yZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50LkNIQU5HRSwgdGhpcy5fb25MaWdodHNDaGFuZ2VEZWxlZ2F0ZSk7XG5cblx0XHR0aGlzLl9wTGlnaHRQaWNrZXIgPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLl9wTGlnaHRQaWNrZXIpXG5cdFx0XHR0aGlzLl9wTGlnaHRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5DSEFOR0UsIHRoaXMuX29uTGlnaHRzQ2hhbmdlRGVsZWdhdGUpO1xuXG5cdFx0dGhpcy5wVXBkYXRlTGlnaHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGxpZ2h0IHBpY2tlcidzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblx0ICovXG5cdHByaXZhdGUgb25MaWdodHNDaGFuZ2UoZXZlbnQ6RXZlbnQpXG5cdHtcblx0XHR0aGlzLnBVcGRhdGVMaWdodHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGlmIHRoZSBwYXNzIHVzZXMgbGlnaHRzIHRvIHVwZGF0ZSB0aGUgc2hhZGVyLlxuXHQgKi9cblx0cHVibGljIHBVcGRhdGVMaWdodHMoKVxuXHR7XG5cdFx0dmFyIG51bURpcmVjdGlvbmFsTGlnaHRzT2xkOm51bWJlciA9IHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHR2YXIgbnVtUG9pbnRMaWdodHNPbGQ6bnVtYmVyID0gdGhpcy5fcE51bVBvaW50TGlnaHRzO1xuXHRcdHZhciBudW1MaWdodFByb2Jlc09sZDpudW1iZXIgPSB0aGlzLl9wTnVtTGlnaHRQcm9iZXM7XG5cblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyICYmICh0aGlzLl9wYXNzTW9kZSAmIE1hdGVyaWFsUGFzc01vZGUuTElHSFRJTkcpKSB7XG5cdFx0XHR0aGlzLl9wTnVtRGlyZWN0aW9uYWxMaWdodHMgPSB0aGlzLmNhbGN1bGF0ZU51bURpcmVjdGlvbmFsTGlnaHRzKHRoaXMuX3BMaWdodFBpY2tlci5udW1EaXJlY3Rpb25hbExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9wTnVtUG9pbnRMaWdodHMgPSB0aGlzLmNhbGN1bGF0ZU51bVBvaW50TGlnaHRzKHRoaXMuX3BMaWdodFBpY2tlci5udW1Qb2ludExpZ2h0cyk7XG5cdFx0XHR0aGlzLl9wTnVtTGlnaHRQcm9iZXMgPSB0aGlzLmNhbGN1bGF0ZU51bVByb2Jlcyh0aGlzLl9wTGlnaHRQaWNrZXIubnVtTGlnaHRQcm9iZXMpO1xuXG5cdFx0XHRpZiAodGhpcy5faW5jbHVkZUNhc3RlcnMpIHtcblx0XHRcdFx0dGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzICs9IHRoaXMuX3BMaWdodFBpY2tlci5udW1DYXN0aW5nRGlyZWN0aW9uYWxMaWdodHM7XG5cdFx0XHRcdHRoaXMuX3BOdW1Qb2ludExpZ2h0cyArPSB0aGlzLl9wTGlnaHRQaWNrZXIubnVtQ2FzdGluZ1BvaW50TGlnaHRzO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cyA9IDA7XG5cdFx0XHR0aGlzLl9wTnVtUG9pbnRMaWdodHMgPSAwO1xuXHRcdFx0dGhpcy5fcE51bUxpZ2h0UHJvYmVzID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLl9wTnVtTGlnaHRzID0gdGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzICsgdGhpcy5fcE51bVBvaW50TGlnaHRzO1xuXG5cdFx0aWYgKG51bURpcmVjdGlvbmFsTGlnaHRzT2xkICE9IHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cyB8fCBudW1Qb2ludExpZ2h0c09sZCAhPSB0aGlzLl9wTnVtUG9pbnRMaWdodHMgfHwgbnVtTGlnaHRQcm9iZXNPbGQgIT0gdGhpcy5fcE51bUxpZ2h0UHJvYmVzKVxuXHRcdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHRwdWJsaWMgX2lJbmNsdWRlRGVwZW5kZW5jaWVzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2ZvcmNlU2VwYXJhdGVNVlApXG5cdFx0XHRzaGFkZXJPYmplY3QuZ2xvYmFsUG9zRGVwZW5kZW5jaWVzKys7XG5cblx0XHRzaGFkZXJPYmplY3Qub3V0cHV0c05vcm1hbHMgPSB0aGlzLl9wT3V0cHV0c05vcm1hbHMoc2hhZGVyT2JqZWN0KTtcblx0XHRzaGFkZXJPYmplY3Qub3V0cHV0c1RhbmdlbnROb3JtYWxzID0gc2hhZGVyT2JqZWN0Lm91dHB1dHNOb3JtYWxzICYmIHRoaXMuX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0KTtcblx0XHRzaGFkZXJPYmplY3QudXNlc1RhbmdlbnRTcGFjZSA9IHNoYWRlck9iamVjdC5vdXRwdXRzVGFuZ2VudE5vcm1hbHMgJiYgdGhpcy5fcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0KTtcblxuXHRcdGlmICghc2hhZGVyT2JqZWN0LnVzZXNUYW5nZW50U3BhY2UpXG5cdFx0XHRzaGFkZXJPYmplY3QuYWRkV29ybGRTcGFjZURlcGVuZGVuY2llcyhCb29sZWFuKHRoaXMuX3Bhc3NNb2RlICYgTWF0ZXJpYWxQYXNzTW9kZS5FRkZFQ1RTKSk7XG5cdH1cblxuXG5cdHB1YmxpYyBfaUluaXRDb25zdGFudERhdGEoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpXG5cdHtcblxuXHR9XG5cblx0cHVibGljIF9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQcmVMaWdodGluZ0ZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0cHVibGljIF9pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXROb3JtYWxWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXROb3JtYWxGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGF0IG5lZWQgdG8gYmUgc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldCBpTnVtUG9pbnRMaWdodHMoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wTnVtUG9pbnRMaWdodHM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBkaXJlY3Rpb25hbCBsaWdodHMgdGhhdCBuZWVkIHRvIGJlIHN1cHBvcnRlZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgaU51bURpcmVjdGlvbmFsTGlnaHRzKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcE51bURpcmVjdGlvbmFsTGlnaHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgbGlnaHQgcHJvYmVzIHRoYXQgbmVlZCB0byBiZSBzdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGlOdW1MaWdodFByb2JlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BOdW1MaWdodFByb2Jlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgY2FsY3VsYXRlZCBhdCBhbGwuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzTm9ybWFscyhzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBub3JtYWxzIGFyZSBjYWxjdWxhdGVkIGluIHRhbmdlbnQgc3BhY2UuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgYWxsb3dlZCBpbiB0YW5nZW50IHNwYWNlLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgbm8gb2JqZWN0LXNwYWNlXG5cdCAqIGRlcGVuZGVuY2llcyBleGlzdC5cblx0ICovXG5cdHB1YmxpYyBfcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgb2YgZGlyZWN0aW9uYWwgbGlnaHRzIHRoaXMgbWF0ZXJpYWwgd2lsbCBzdXBwb3J0LlxuXHQgKiBAcGFyYW0gbnVtRGlyZWN0aW9uYWxMaWdodHMgVGhlIG1heGltdW0gYW1vdW50IG9mIGRpcmVjdGlvbmFsIGxpZ2h0cyB0byBzdXBwb3J0LlxuXHQgKiBAcmV0dXJuIFRoZSBhbW91bnQgb2YgZGlyZWN0aW9uYWwgbGlnaHRzIHRoaXMgbWF0ZXJpYWwgd2lsbCBzdXBwb3J0LCBib3VuZGVkIGJ5IHRoZSBhbW91bnQgbmVjZXNzYXJ5LlxuXHQgKi9cblx0cHJpdmF0ZSBjYWxjdWxhdGVOdW1EaXJlY3Rpb25hbExpZ2h0cyhudW1EaXJlY3Rpb25hbExpZ2h0czpudW1iZXIpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIE1hdGgubWluKG51bURpcmVjdGlvbmFsTGlnaHRzIC0gdGhpcy5fZGlyZWN0aW9uYWxMaWdodHNPZmZzZXQsIHRoaXMuX21heExpZ2h0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydC5cblx0ICogQHBhcmFtIG51bURpcmVjdGlvbmFsTGlnaHRzIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBwb2ludCBsaWdodHMgdG8gc3VwcG9ydC5cblx0ICogQHJldHVybiBUaGUgYW1vdW50IG9mIHBvaW50IGxpZ2h0cyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydCwgYm91bmRlZCBieSB0aGUgYW1vdW50IG5lY2Vzc2FyeS5cblx0ICovXG5cdHByaXZhdGUgY2FsY3VsYXRlTnVtUG9pbnRMaWdodHMobnVtUG9pbnRMaWdodHM6bnVtYmVyKTpudW1iZXJcblx0e1xuXHRcdHZhciBudW1GcmVlOm51bWJlciA9IHRoaXMuX21heExpZ2h0cyAtIHRoaXMuX3BOdW1EaXJlY3Rpb25hbExpZ2h0cztcblx0XHRyZXR1cm4gTWF0aC5taW4obnVtUG9pbnRMaWdodHMgLSB0aGlzLl9wb2ludExpZ2h0c09mZnNldCwgbnVtRnJlZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpZ2h0IHByb2JlcyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydC5cblx0ICogQHBhcmFtIG51bURpcmVjdGlvbmFsTGlnaHRzIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBsaWdodCBwcm9iZXMgdG8gc3VwcG9ydC5cblx0ICogQHJldHVybiBUaGUgYW1vdW50IG9mIGxpZ2h0IHByb2JlcyB0aGlzIG1hdGVyaWFsIHdpbGwgc3VwcG9ydCwgYm91bmRlZCBieSB0aGUgYW1vdW50IG5lY2Vzc2FyeS5cblx0ICovXG5cdHByaXZhdGUgY2FsY3VsYXRlTnVtUHJvYmVzKG51bUxpZ2h0UHJvYmVzOm51bWJlcik6bnVtYmVyXG5cdHtcblx0XHR2YXIgbnVtQ2hhbm5lbHM6bnVtYmVyID0gMDtcblx0XHQvL1x0XHRcdGlmICgodGhpcy5fcFNwZWN1bGFyTGlnaHRTb3VyY2VzICYgTGlnaHRTb3VyY2VzLlBST0JFUykgIT0gMClcblx0XHQvL1x0XHRcdFx0KytudW1DaGFubmVscztcblx0XHQvL1xuXHRcdC8vXHRcdFx0aWYgKCh0aGlzLl9wRGlmZnVzZUxpZ2h0U291cmNlcyAmIExpZ2h0U291cmNlcy5QUk9CRVMpICE9IDApXG5cdFx0Ly9cdFx0XHRcdCsrbnVtQ2hhbm5lbHM7XG5cblx0XHQvLyA0IGNoYW5uZWxzIGF2YWlsYWJsZVxuXHRcdHJldHVybiBNYXRoLm1pbihudW1MaWdodFByb2JlcyAtIHRoaXMuX2xpZ2h0UHJvYmVzT2Zmc2V0LCAoNC9udW1DaGFubmVscykgfCAwKTtcblx0fVxuXG5cdHB1YmxpYyBfaUFkZE1hdGVyaWFsUGFzc0RhdGEobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKTpNYXRlcmlhbFBhc3NEYXRhXG5cdHtcblx0XHR0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLnB1c2gobWF0ZXJpYWxQYXNzRGF0YSk7XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWxQYXNzRGF0YTtcblx0fVxuXG5cdHB1YmxpYyBfaVJlbW92ZU1hdGVyaWFsUGFzc0RhdGEobWF0ZXJpYWxQYXNzRGF0YTpNYXRlcmlhbFBhc3NEYXRhKTpNYXRlcmlhbFBhc3NEYXRhXG5cdHtcblx0XHR0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLnNwbGljZSh0aGlzLl9tYXRlcmlhbFBhc3NEYXRhLmluZGV4T2YobWF0ZXJpYWxQYXNzRGF0YSksIDEpO1xuXG5cdFx0cmV0dXJuIG1hdGVyaWFsUGFzc0RhdGE7XG5cdH1cbn1cblxuZXhwb3J0ID0gTWF0ZXJpYWxQYXNzQmFzZTsiXX0= \ No newline at end of file diff --git a/lib/materials/passes/MaterialPassBase.ts b/lib/materials/passes/MaterialPassBase.ts index fafa50c9..75cfe54c 100644 --- a/lib/materials/passes/MaterialPassBase.ts +++ b/lib/materials/passes/MaterialPassBase.ts @@ -9,12 +9,12 @@ import Camera = require("awayjs-display/lib/entities/Camera"); import LightPickerBase = require("awayjs-display/lib/materials/lightpickers/LightPickerBase"); import IMaterialPass = require("awayjs-display/lib/materials/passes/IMaterialPass"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); diff --git a/lib/materials/passes/TriangleBasicPass.js b/lib/materials/passes/TriangleBasicPass.js index 1dfc8179..cd6c8408 100755 --- a/lib/materials/passes/TriangleBasicPass.js +++ b/lib/materials/passes/TriangleBasicPass.js @@ -4,9 +4,9 @@ var __extends = this.__extends || function (d, b) { __.prototype = b.prototype; d.prototype = new __(); }; -var ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -var ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -var ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); +var ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +var ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +var ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); var MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); var ShaderCompilerHelper = require("awayjs-stagegl/lib/materials/utils/ShaderCompilerHelper"); /** @@ -110,4 +110,4 @@ var TriangleBasicPass = (function (_super) { })(MaterialPassBase); module.exports = TriangleBasicPass; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL3RyaWFuZ2xlYmFzaWNwYXNzLnRzIl0sIm5hbWVzIjpbIlRyaWFuZ2xlQmFzaWNQYXNzIiwiVHJpYW5nbGVCYXNpY1Bhc3MuY29uc3RydWN0b3IiLCJUcmlhbmdsZUJhc2ljUGFzcy5kaWZmdXNlQWxwaGEiLCJUcmlhbmdsZUJhc2ljUGFzcy5kaWZmdXNlQ29sb3IiLCJUcmlhbmdsZUJhc2ljUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlQmFzaWNQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIlRyaWFuZ2xlQmFzaWNQYXNzLl9pQWN0aXZhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQU8sa0JBQWtCLFdBQWEsb0RBQW9ELENBQUMsQ0FBQztBQUM1RixJQUFPLHNCQUFzQixXQUFZLHdEQUF3RCxDQUFDLENBQUM7QUFDbkcsSUFBTyxpQkFBaUIsV0FBYSxtREFBbUQsQ0FBQyxDQUFDO0FBTzFGLElBQU8sZ0JBQWdCLFdBQWMsc0RBQXNELENBQUMsQ0FBQztBQUM3RixJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFJQTs7O0dBREc7SUFDRyxpQkFBaUI7SUFBU0EsVUFBMUJBLGlCQUFpQkEsVUFBeUJBO0lBeUMvQ0E7Ozs7T0FJR0E7SUFDSEEsU0E5Q0tBLGlCQUFpQkE7UUFnRHJCQyxpQkFBT0EsQ0FBQ0E7UUE5Q0RBLGtCQUFhQSxHQUFVQSxRQUFRQSxDQUFDQTtRQUNoQ0EsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDckJBLGNBQVNBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3JCQSxjQUFTQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNyQkEsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7SUEyQzdCQSxDQUFDQTtJQW5DREQsc0JBQVdBLDJDQUFZQTtRQUh2QkE7O1dBRUdBO2FBQ0hBO1lBRUNFLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFNB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QUNBLENBQUNBO1lBRTdGQSxFQUFFQSxDQUFDQSxDQUFDQSxZQUFZQSxDQUFDQSxjQUFjQSxHQUFHQSxDQUFDQSxDQUFDQTtnQkFDbkNBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxHQUFHQSxZQUFZQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUNoR0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtZQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7WUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1lBQzdCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUNqQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDakNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1FBQ2xDQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGTix3QkFBQ0E7QUFBREEsQ0FySEEsQUFxSENBLEVBckgrQixnQkFBZ0IsRUFxSC9DO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9wYXNzZXMvVHJpYW5nbGVCYXNpY1Bhc3MuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTE1pcEZpbHRlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xUZXh0dXJlRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFdyYXBNb2RlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xXcmFwTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RFdmVudFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9ldmVudHMvU2hhZGluZ01ldGhvZEV2ZW50XCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBDb21waWxlZFBhc3MgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGhlIGRlZmF1bHQgY29tcGlsZWQgcGFzcyBtYXRlcmlhbHMgcHJvdmlkZWQgYnkgQXdheTNELFxuICogdXNpbmcgbWF0ZXJpYWwgbWV0aG9kcyB0byBkZWZpbmUgdGhlaXIgYXBwZWFyYW5jZS5cbiAqL1xuY2xhc3MgVHJpYW5nbGVCYXNpY1Bhc3MgZXh0ZW5kcyBNYXRlcmlhbFBhc3NCYXNlXG57XG5cdHByaXZhdGUgX2RpZmZ1c2VDb2xvcjpudW1iZXIgPSAweGZmZmZmZjtcblx0cHJpdmF0ZSBfZGlmZnVzZVI6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUc6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUI6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUE6bnVtYmVyID0gMTtcblxuXHRwcml2YXRlIF9mcmFnbWVudENvbnN0YW50c0luZGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbHBoYSBjb21wb25lbnQgb2YgdGhlIGRpZmZ1c2UgcmVmbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZUFscGhhKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZUE7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VBbHBoYSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlQSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvciBvZiB0aGUgZGlmZnVzZSByZWZsZWN0aW9uIHdoZW4gbm90IHVzaW5nIGEgdGV4dHVyZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZUNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZUNvbG9yO1xuXHR9XG5cblx0cHVibGljIHNldCBkaWZmdXNlQ29sb3IoZGlmZnVzZUNvbG9yOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2RpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvcjtcblxuXHRcdHRoaXMuX2RpZmZ1c2VSID0gKCh0aGlzLl9kaWZmdXNlQ29sb3IgPj4gMTYpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9kaWZmdXNlRyA9ICgodGhpcy5fZGlmZnVzZUNvbG9yID4+IDgpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9kaWZmdXNlQiA9ICh0aGlzLl9kaWZmdXNlQ29sb3IgJiAweGZmKS8weGZmO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgQ29tcGlsZWRQYXNzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byB3aGljaCB0aGlzIHBhc3MgYmVsb25ncy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gc2hhcmVkUmVnLnNoYWRlZFRhcmdldDtcblx0XHR2YXIgZGlmZnVzZUlucHV0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudGV4dHVyZSAhPSBudWxsKSB7XG5cdFx0XHRkaWZmdXNlSW5wdXRSZWcgPSByZWdDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0XHR0aGlzLl90ZXh0dXJlc0luZGV4ID0gZGlmZnVzZUlucHV0UmVnLmluZGV4O1xuXG5cdFx0XHRjb2RlICs9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSh0YXJnZXRSZWcsIHNoYXJlZFJlZywgZGlmZnVzZUlucHV0UmVnLCBzaGFkZXJPYmplY3QudGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApIHtcblx0XHRcdFx0dmFyIGN1dE9mZlJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdFx0XHR0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4ID0gY3V0T2ZmUmVnLmluZGV4KjQ7XG5cblx0XHRcdFx0Y29kZSArPSBcInN1YiBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyBjdXRPZmZSZWcgKyBcIi54XFxuXCIgK1xuXHRcdFx0XHRcdFwia2lsIFwiICsgdGFyZ2V0UmVnICsgXCIud1xcblwiICtcblx0XHRcdFx0XHRcImFkZCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyBjdXRPZmZSZWcgKyBcIi54XFxuXCI7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlmZnVzZUlucHV0UmVnID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0dGhpcy5fZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGRpZmZ1c2VJbnB1dFJlZy5pbmRleCo0O1xuXG5cdFx0XHRjb2RlICs9IFwibW92IFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgZGlmZnVzZUlucHV0UmVnICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUluY2x1ZGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeUNvdW50ZXI6U2hhZGVyT2JqZWN0QmFzZSlcblx0e1xuXHRcdGlmIChkZXBlbmRlbmN5Q291bnRlci50ZXh0dXJlICE9IG51bGwpXG5cdFx0XHRkZXBlbmRlbmN5Q291bnRlci51dkRlcGVuZGVuY2llcysrO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0c3VwZXIuX2lBY3RpdmF0ZShwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSA9IHBhc3Muc2hhZGVyT2JqZWN0O1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC50ZXh0dXJlICE9IG51bGwpIHtcblx0XHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5zZXRTYW1wbGVyU3RhdGVBdCh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXM/IENvbnRleHRHTFdyYXBNb2RlLlJFUEVBVDpDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUiA6IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVIgOiBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVUZXh0dXJlKHRoaXMuX3RleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC50ZXh0dXJlKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRcdHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4XSA9IHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleF0gPSB0aGlzLl9kaWZmdXNlUjtcblx0XHRcdGRhdGFbaW5kZXggKyAxXSA9IHRoaXMuX2RpZmZ1c2VHO1xuXHRcdFx0ZGF0YVtpbmRleCArIDJdID0gdGhpcy5fZGlmZnVzZUI7XG5cdFx0XHRkYXRhW2luZGV4ICsgM10gPSB0aGlzLl9kaWZmdXNlQTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVCYXNpY1Bhc3M7Il19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL3RyaWFuZ2xlYmFzaWNwYXNzLnRzIl0sIm5hbWVzIjpbIlRyaWFuZ2xlQmFzaWNQYXNzIiwiVHJpYW5nbGVCYXNpY1Bhc3MuY29uc3RydWN0b3IiLCJUcmlhbmdsZUJhc2ljUGFzcy5kaWZmdXNlQWxwaGEiLCJUcmlhbmdsZUJhc2ljUGFzcy5kaWZmdXNlQ29sb3IiLCJUcmlhbmdsZUJhc2ljUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlQmFzaWNQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIlRyaWFuZ2xlQmFzaWNQYXNzLl9pQWN0aXZhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQU8sa0JBQWtCLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUNwRixJQUFPLHNCQUFzQixXQUFZLGdEQUFnRCxDQUFDLENBQUM7QUFDM0YsSUFBTyxpQkFBaUIsV0FBYSwyQ0FBMkMsQ0FBQyxDQUFDO0FBT2xGLElBQU8sZ0JBQWdCLFdBQWMsc0RBQXNELENBQUMsQ0FBQztBQUM3RixJQUFPLG9CQUFvQixXQUFhLHlEQUF5RCxDQUFDLENBQUM7QUFFbkcsQUFJQTs7O0dBREc7SUFDRyxpQkFBaUI7SUFBU0EsVUFBMUJBLGlCQUFpQkEsVUFBeUJBO0lBeUMvQ0E7Ozs7T0FJR0E7SUFDSEEsU0E5Q0tBLGlCQUFpQkE7UUFnRHJCQyxpQkFBT0EsQ0FBQ0E7UUE5Q0RBLGtCQUFhQSxHQUFVQSxRQUFRQSxDQUFDQTtRQUNoQ0EsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDckJBLGNBQVNBLEdBQVVBLENBQUNBLENBQUNBO1FBQ3JCQSxjQUFTQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNyQkEsY0FBU0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7SUEyQzdCQSxDQUFDQTtJQW5DREQsc0JBQVdBLDJDQUFZQTtRQUh2QkE7O1dBRUdBO2FBQ0hBO1lBRUNFLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLFNB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QUNBLENBQUNBO1lBRTdGQSxFQUFFQSxDQUFDQSxDQUFDQSxZQUFZQSxDQUFDQSxjQUFjQSxHQUFHQSxDQUFDQSxDQUFDQTtnQkFDbkNBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQSxHQUFHQSxZQUFZQSxDQUFDQSxjQUFjQSxDQUFDQTtRQUNoR0EsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDUEEsSUFBSUEsS0FBS0EsR0FBVUEsSUFBSUEsQ0FBQ0EsdUJBQXVCQSxDQUFDQTtZQUNoREEsSUFBSUEsSUFBSUEsR0FBaUJBLFlBQVlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7WUFDM0RBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1lBQzdCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUNqQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDakNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1FBQ2xDQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUNGTix3QkFBQ0E7QUFBREEsQ0FySEEsQUFxSENBLEVBckgrQixnQkFBZ0IsRUFxSC9DO0FBRUQsQUFBMkIsaUJBQWxCLGlCQUFpQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy9wYXNzZXMvVHJpYW5nbGVCYXNpY1Bhc3MuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgQ29udGV4dEdMTWlwRmlsdGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMTWlwRmlsdGVyXCIpO1xuaW1wb3J0IENvbnRleHRHTFRleHR1cmVGaWx0ZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMVGV4dHVyZUZpbHRlclwiKTtcbmltcG9ydCBDb250ZXh0R0xXcmFwTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFdyYXBNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IFNoYWRpbmdNZXRob2RFdmVudFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9ldmVudHMvU2hhZGluZ01ldGhvZEV2ZW50XCIpO1xuaW1wb3J0IFNoYWRlck9iamVjdEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckNhY2hlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckNhY2hlXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRGF0YVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJEYXRhXCIpO1xuaW1wb3J0IFNoYWRlclJlZ2lzdGVyRWxlbWVudFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRWxlbWVudFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVySGVscGVyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlclwiKTtcblxuLyoqXG4gKiBDb21waWxlZFBhc3MgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGhlIGRlZmF1bHQgY29tcGlsZWQgcGFzcyBtYXRlcmlhbHMgcHJvdmlkZWQgYnkgQXdheTNELFxuICogdXNpbmcgbWF0ZXJpYWwgbWV0aG9kcyB0byBkZWZpbmUgdGhlaXIgYXBwZWFyYW5jZS5cbiAqL1xuY2xhc3MgVHJpYW5nbGVCYXNpY1Bhc3MgZXh0ZW5kcyBNYXRlcmlhbFBhc3NCYXNlXG57XG5cdHByaXZhdGUgX2RpZmZ1c2VDb2xvcjpudW1iZXIgPSAweGZmZmZmZjtcblx0cHJpdmF0ZSBfZGlmZnVzZVI6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUc6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUI6bnVtYmVyID0gMTtcblx0cHJpdmF0ZSBfZGlmZnVzZUE6bnVtYmVyID0gMTtcblxuXHRwcml2YXRlIF9mcmFnbWVudENvbnN0YW50c0luZGV4Om51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNJbmRleDpudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBhbHBoYSBjb21wb25lbnQgb2YgdGhlIGRpZmZ1c2UgcmVmbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZUFscGhhKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZUE7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VBbHBoYSh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9kaWZmdXNlQSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjb2xvciBvZiB0aGUgZGlmZnVzZSByZWZsZWN0aW9uIHdoZW4gbm90IHVzaW5nIGEgdGV4dHVyZS5cblx0ICovXG5cdHB1YmxpYyBnZXQgZGlmZnVzZUNvbG9yKCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZUNvbG9yO1xuXHR9XG5cblx0cHVibGljIHNldCBkaWZmdXNlQ29sb3IoZGlmZnVzZUNvbG9yOm51bWJlcilcblx0e1xuXHRcdHRoaXMuX2RpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvcjtcblxuXHRcdHRoaXMuX2RpZmZ1c2VSID0gKCh0aGlzLl9kaWZmdXNlQ29sb3IgPj4gMTYpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9kaWZmdXNlRyA9ICgodGhpcy5fZGlmZnVzZUNvbG9yID4+IDgpICYgMHhmZikvMHhmZjtcblx0XHR0aGlzLl9kaWZmdXNlQiA9ICh0aGlzLl9kaWZmdXNlQ29sb3IgJiAweGZmKS8weGZmO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgQ29tcGlsZWRQYXNzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsIFRoZSBtYXRlcmlhbCB0byB3aGljaCB0aGlzIHBhc3MgYmVsb25ncy5cblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciB0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50ID0gc2hhcmVkUmVnLnNoYWRlZFRhcmdldDtcblx0XHR2YXIgZGlmZnVzZUlucHV0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudDtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudGV4dHVyZSAhPSBudWxsKSB7XG5cdFx0XHRkaWZmdXNlSW5wdXRSZWcgPSByZWdDYWNoZS5nZXRGcmVlVGV4dHVyZVJlZygpO1xuXG5cdFx0XHR0aGlzLl90ZXh0dXJlc0luZGV4ID0gZGlmZnVzZUlucHV0UmVnLmluZGV4O1xuXG5cdFx0XHRjb2RlICs9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSh0YXJnZXRSZWcsIHNoYXJlZFJlZywgZGlmZnVzZUlucHV0UmVnLCBzaGFkZXJPYmplY3QudGV4dHVyZSwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzLCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXMsIHNoYWRlck9iamVjdC51c2VNaXBtYXBwaW5nKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApIHtcblx0XHRcdFx0dmFyIGN1dE9mZlJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSByZWdDYWNoZS5nZXRGcmVlRnJhZ21lbnRDb25zdGFudCgpO1xuXHRcdFx0XHR0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4ID0gY3V0T2ZmUmVnLmluZGV4KjQ7XG5cblx0XHRcdFx0Y29kZSArPSBcInN1YiBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyBjdXRPZmZSZWcgKyBcIi54XFxuXCIgK1xuXHRcdFx0XHRcdFwia2lsIFwiICsgdGFyZ2V0UmVnICsgXCIud1xcblwiICtcblx0XHRcdFx0XHRcImFkZCBcIiArIHRhcmdldFJlZyArIFwiLncsIFwiICsgdGFyZ2V0UmVnICsgXCIudywgXCIgKyBjdXRPZmZSZWcgKyBcIi54XFxuXCI7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGlmZnVzZUlucHV0UmVnID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50Q29uc3RhbnQoKTtcblxuXHRcdFx0dGhpcy5fZnJhZ21lbnRDb25zdGFudHNJbmRleCA9IGRpZmZ1c2VJbnB1dFJlZy5pbmRleCo0O1xuXG5cdFx0XHRjb2RlICs9IFwibW92IFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgZGlmZnVzZUlucHV0UmVnICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUluY2x1ZGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeUNvdW50ZXI6U2hhZGVyT2JqZWN0QmFzZSlcblx0e1xuXHRcdGlmIChkZXBlbmRlbmN5Q291bnRlci50ZXh0dXJlICE9IG51bGwpXG5cdFx0XHRkZXBlbmRlbmN5Q291bnRlci51dkRlcGVuZGVuY2llcysrO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lBY3RpdmF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhKVxuXHR7XG5cdFx0c3VwZXIuX2lBY3RpdmF0ZShwYXNzLCBzdGFnZSwgY2FtZXJhKTtcblxuXHRcdHZhciBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSA9IHBhc3Muc2hhZGVyT2JqZWN0O1xuXG5cdFx0aWYgKHNoYWRlck9iamVjdC50ZXh0dXJlICE9IG51bGwpIHtcblx0XHRcdCg8SUNvbnRleHRTdGFnZUdMPiBzdGFnZS5jb250ZXh0KS5zZXRTYW1wbGVyU3RhdGVBdCh0aGlzLl90ZXh0dXJlc0luZGV4LCBzaGFkZXJPYmplY3QucmVwZWF0VGV4dHVyZXM/IENvbnRleHRHTFdyYXBNb2RlLlJFUEVBVDpDb250ZXh0R0xXcmFwTW9kZS5DTEFNUCwgc2hhZGVyT2JqZWN0LnVzZVNtb290aFRleHR1cmVzPyBDb250ZXh0R0xUZXh0dXJlRmlsdGVyLkxJTkVBUiA6IENvbnRleHRHTFRleHR1cmVGaWx0ZXIuTkVBUkVTVCwgc2hhZGVyT2JqZWN0LnVzZU1pcG1hcHBpbmc/IENvbnRleHRHTE1pcEZpbHRlci5NSVBMSU5FQVIgOiBDb250ZXh0R0xNaXBGaWx0ZXIuTUlQTk9ORSk7XG5cdFx0XHQoPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dCkuYWN0aXZhdGVUZXh0dXJlKHRoaXMuX3RleHR1cmVzSW5kZXgsIHNoYWRlck9iamVjdC50ZXh0dXJlKTtcblxuXHRcdFx0aWYgKHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZCA+IDApXG5cdFx0XHRcdHNoYWRlck9iamVjdC5mcmFnbWVudENvbnN0YW50RGF0YVt0aGlzLl9mcmFnbWVudENvbnN0YW50c0luZGV4XSA9IHNoYWRlck9iamVjdC5hbHBoYVRocmVzaG9sZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2ZyYWdtZW50Q29uc3RhbnRzSW5kZXg7XG5cdFx0XHR2YXIgZGF0YTpBcnJheTxudW1iZXI+ID0gc2hhZGVyT2JqZWN0LmZyYWdtZW50Q29uc3RhbnREYXRhO1xuXHRcdFx0ZGF0YVtpbmRleF0gPSB0aGlzLl9kaWZmdXNlUjtcblx0XHRcdGRhdGFbaW5kZXggKyAxXSA9IHRoaXMuX2RpZmZ1c2VHO1xuXHRcdFx0ZGF0YVtpbmRleCArIDJdID0gdGhpcy5fZGlmZnVzZUI7XG5cdFx0XHRkYXRhW2luZGV4ICsgM10gPSB0aGlzLl9kaWZmdXNlQTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVCYXNpY1Bhc3M7Il19 \ No newline at end of file diff --git a/lib/materials/passes/TriangleBasicPass.ts b/lib/materials/passes/TriangleBasicPass.ts index 14f15194..758cb819 100644 --- a/lib/materials/passes/TriangleBasicPass.ts +++ b/lib/materials/passes/TriangleBasicPass.ts @@ -1,11 +1,11 @@ import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import ContextGLMipFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLMipFilter"); -import ContextGLTextureFilter = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFilter"); -import ContextGLWrapMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLWrapMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import ContextGLMipFilter = require("awayjs-stagegl/lib/base/ContextGLMipFilter"); +import ContextGLTextureFilter = require("awayjs-stagegl/lib/base/ContextGLTextureFilter"); +import ContextGLWrapMode = require("awayjs-stagegl/lib/base/ContextGLWrapMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); import ShaderRegisterCache = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterCache"); diff --git a/lib/materials/passes/TriangleMethodPass.js b/lib/materials/passes/TriangleMethodPass.js index 96562bc1..4d2f0a2c 100755 --- a/lib/materials/passes/TriangleMethodPass.js +++ b/lib/materials/passes/TriangleMethodPass.js @@ -561,4 +561,4 @@ var TriangleMethodPass = (function (_super) { })(MaterialPassBase); module.exports = TriangleMethodPass; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL3RyaWFuZ2xlbWV0aG9kcGFzcy50cyJdLCJuYW1lcyI6WyJUcmlhbmdsZU1ldGhvZFBhc3MiLCJUcmlhbmdsZU1ldGhvZFBhc3MuY29uc3RydWN0b3IiLCJUcmlhbmdsZU1ldGhvZFBhc3MuY3JlYXRlU2hhZGVyT2JqZWN0IiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pSW5pdENvbnN0YW50RGF0YSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5jb2xvclRyYW5zZm9ybSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5jb2xvclRyYW5zZm9ybU1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5fcmVtb3ZlRGVwZW5kZW5jeSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5fYWRkRGVwZW5kZW5jeSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5hZGRFZmZlY3RNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MubnVtRWZmZWN0TWV0aG9kcyIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5oYXNFZmZlY3RNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MuZ2V0RWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZFBhc3MuYWRkRWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZFBhc3MucmVtb3ZlRWZmZWN0TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmdldERlcGVuZGVuY3lGb3JNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Mubm9ybWFsTWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmFtYmllbnRNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc2hhZG93TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmRpZmZ1c2VNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc3BlY3VsYXJNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MuZGlzcG9zZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5vblNoYWRlckludmFsaWRhdGVkIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pQWN0aXZhdGUiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc2V0UmVuZGVyU3RhdGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lEZWFjdGl2YXRlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5zZXR1cEFuZENvdW50RGVwZW5kZW5jaWVzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UHJlTGlnaHRpbmdGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQZXJMaWdodERpZmZ1c2VGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UGVyUHJvYmVEaWZmdXNlRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UGVyUHJvYmVTcGVjdWxhckZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faUdldFBvc3RMaWdodGluZ1ZlcnRleENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQb3N0TGlnaHRpbmdGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX3BVc2VzVGFuZ2VudFNwYWNlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9wT3V0cHV0c1RhbmdlbnROb3JtYWxzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9wT3V0cHV0c05vcm1hbHMiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXROb3JtYWxWZXJ0ZXhDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0Tm9ybWFsRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0VmVydGV4Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faVVzZXNTaGFkb3dzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pVXNlc1NwZWN1bGFyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFjQSxJQUFPLGtCQUFrQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDdEYsSUFBTyxRQUFRLFdBQWdCLG1EQUFtRCxDQUFDLENBQUM7QUFDcEYsSUFBTyxvQkFBb0IsV0FBYSwrREFBK0QsQ0FBQyxDQUFDO0FBQ3pHLElBQU8sZ0JBQWdCLFdBQWMsMkRBQTJELENBQUMsQ0FBQztBQU1sRyxJQUFPLDBCQUEwQixXQUFXLGlFQUFpRSxDQUFDLENBQUM7QUFPL0csSUFBTyxnQkFBZ0IsV0FBYyxzREFBc0QsQ0FBQyxDQUFDO0FBQzdGLElBQU8sZ0JBQWdCLFdBQWMsc0RBQXNELENBQUMsQ0FBQztBQUU3RixBQUlBOzs7R0FERztJQUNHLGtCQUFrQjtJQUFTQSxVQUEzQkEsa0JBQWtCQSxVQUF5QkE7SUFjaERBOzs7O09BSUdBO0lBQ0hBLFNBbkJLQSxrQkFBa0JBLENBbUJYQSxRQUFzQkE7UUFuQm5DQyxpQkF3ckJDQTtRQXJxQllBLHdCQUFzQkEsR0FBdEJBLGVBQXNCQTtRQUVqQ0Esa0JBQU1BLFFBQVFBLENBQUNBLENBQUNBO1FBYlZBLGdCQUFXQSxHQUFtQkEsSUFBSUEsS0FBS0EsRUFBWUEsQ0FBQ0E7UUFFcERBLDJCQUFzQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFheENBLElBQUlBLENBQUNBLDRCQUE0QkEsR0FBR0EsVUFBQ0EsS0FBd0JBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBL0JBLENBQStCQSxDQUFDQTtJQUNuR0EsQ0FBQ0E7SUFFREQ7Ozs7T0FJR0E7SUFDSUEsK0NBQWtCQSxHQUF6QkEsVUFBMEJBLE9BQWNBO1FBRXZDRSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxnQkFBZ0JBLENBQUNBLFFB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QkFBd0JBLElBQUlBLElBQUlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDNUVBLElBQUlBLElBQUlBLElBQUlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxFQUFFQSxJQUFJQSxDQUFDQSx3QkFBd0JBLEVBQUVBLFNBQVNBLENBQUNBLFlBQVlBLEVBQUVBLFFBQVFBLEVBQUVBLFNBQVNBLENBQUNBLENBQUNBO1FBRXpKQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUNEekM7O09BRUdBO0lBQ0lBLDBDQUFhQSxHQUFwQkE7UUFFQzBDLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsSUFBSUEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0Esd0JBQXdCQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxrQkFBa0JBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO0lBQ2pKQSxDQUFDQTtJQUVEMUM7O09BRUdBO0lBQ0lBLDJDQUFjQSxHQUFyQkE7UUFFQzJDLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0E7SUFDekNBLENBQUNBO0lBQ0YzQyx5QkFBQ0E7QUFBREEsQ0F4ckJBLEFBd3JCQ0EsRUF4ckJnQyxnQkFBZ0IsRUF3ckJoRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL1RyaWFuZ2xlTWV0aG9kUGFzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29sb3JUcmFuc2Zvcm1cdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL0NvbG9yVHJhbnNmb3JtXCIpO1xuaW1wb3J0IE1hdHJpeFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeFwiKTtcbmltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IE1hdHJpeDNEVXRpbHNcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEVXRpbHNcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvYmFzZS9TdGFnZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgU2hhZGluZ01ldGhvZEV2ZW50XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2V2ZW50cy9TaGFkaW5nTWV0aG9kRXZlbnRcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlckxpZ2h0aW5nT2JqZWN0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJMaWdodGluZ09iamVjdFwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgQW1iaWVudEJhc2ljTWV0aG9kXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0FtYmllbnRCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBEaWZmdXNlQmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRGlmZnVzZUJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kXHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2RcIik7XG5pbXBvcnQgRWZmZWN0TWV0aG9kQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0VmZmVjdE1ldGhvZEJhc2VcIik7XG5pbXBvcnQgTGlnaHRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0xpZ2h0aW5nTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBOb3JtYWxCYXNpY01ldGhvZFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9Ob3JtYWxCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBTaGFkb3dNYXBNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRvd01hcE1ldGhvZEJhc2VcIik7XG5pbXBvcnQgU3BlY3VsYXJCYXNpY01ldGhvZFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TcGVjdWxhckJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IElMaWdodGluZ1Bhc3NTdGFnZUdMXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvSUxpZ2h0aW5nUGFzc1N0YWdlR0xcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NNb2RlXCIpO1xuXG4vKipcbiAqIENvbXBpbGVkUGFzcyBmb3JtcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgZGVmYXVsdCBjb21waWxlZCBwYXNzIG1hdGVyaWFscyBwcm92aWRlZCBieSBBd2F5M0QsXG4gKiB1c2luZyBtYXRlcmlhbCBtZXRob2RzIHRvIGRlZmluZSB0aGVpciBhcHBlYXJhbmNlLlxuICovXG5jbGFzcyBUcmlhbmdsZU1ldGhvZFBhc3MgZXh0ZW5kcyBNYXRlcmlhbFBhc3NCYXNlIGltcGxlbWVudHMgSUxpZ2h0aW5nUGFzc1N0YWdlR0xcbntcblx0cHVibGljIF9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pTm9ybWFsTWV0aG9kVk86TWV0aG9kVk87XG5cdHB1YmxpYyBfaUFtYmllbnRNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pU2hhZG93TWV0aG9kVk86TWV0aG9kVk87XG5cdHB1YmxpYyBfaURpZmZ1c2VNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pU3BlY3VsYXJNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pTWV0aG9kVk9zOkFycmF5PE1ldGhvZFZPPiA9IG5ldyBBcnJheTxNZXRob2RWTz4oKTtcblxuXHRwdWJsaWMgX251bUVmZmVjdERlcGVuZGVuY2llczpudW1iZXIgPSAwO1xuXG5cdHByaXZhdGUgX29uU2hhZGVySW52YWxpZGF0ZWREZWxlZ2F0ZTooZXZlbnQ6U2hhZGluZ01ldGhvZEV2ZW50KSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IENvbXBpbGVkUGFzcyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbCBUaGUgbWF0ZXJpYWwgdG8gd2hpY2ggdGhpcyBwYXNzIGJlbG9uZ3MuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXNzTW9kZTpudW1iZXIgPSAweDAzKVxuXHR7XG5cdFx0c3VwZXIocGFzc01vZGUpO1xuXG5cdFx0dGhpcy5fb25TaGFkZXJJbnZhbGlkYXRlZERlbGVnYXRlID0gKGV2ZW50OlNoYWRpbmdNZXRob2RFdmVudCkgPT4gdGhpcy5vblNoYWRlckludmFsaWRhdGVkKGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBjb25jcmV0ZSBzaGFkZXIgb2JqZWN0IGZvciB0aGlzIHBhc3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9maWxlIFRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGUgdXNlZCBieSB0aGUgcmVuZGVyZXIuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlU2hhZGVyT2JqZWN0KHByb2ZpbGU6c3RyaW5nKTpTaGFkZXJPYmplY3RCYXNlXG5cdHtcblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyICYmICh0aGlzLnBhc3NNb2RlICYgTWF0ZXJpYWxQYXNzTW9kZS5MSUdIVElORykpXG5cdFx0XHRyZXR1cm4gbmV3IFNoYWRlckxpZ2h0aW5nT2JqZWN0KHByb2ZpbGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBTaGFkZXJPYmplY3RCYXNlKHByb2ZpbGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB1bmNoYW5naW5nIGNvbnN0YW50IGRhdGEgZm9yIHRoaXMgbWF0ZXJpYWwuXG5cdCAqL1xuXHRwdWJsaWMgX2lJbml0Q29uc3RhbnREYXRhKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKVxuXHR7XG5cdFx0c3VwZXIuX2lJbml0Q29uc3RhbnREYXRhKHNoYWRlck9iamVjdCk7XG5cblx0XHQvL1VwZGF0ZXMgbWV0aG9kIGNvbnN0YW50cyBpZiB0aGV5IGhhdmUgY2hhbmdlZC5cblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKVxuXHRcdFx0dGhpcy5faU1ldGhvZFZPc1tpXS5tZXRob2QuaUluaXRDb25zdGFudHMoc2hhZGVyT2JqZWN0LCB0aGlzLl9pTWV0aG9kVk9zW2ldKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ29sb3JUcmFuc2Zvcm0gb2JqZWN0IHRvIHRyYW5zZm9ybSB0aGUgY29sb3VyIG9mIHRoZSBtYXRlcmlhbCB3aXRoLiBEZWZhdWx0cyB0byBudWxsLlxuXHQgKi9cblx0cHVibGljIGdldCBjb2xvclRyYW5zZm9ybSgpOkNvbG9yVHJhbnNmb3JtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZD8gdGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZC5jb2xvclRyYW5zZm9ybSA6IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGNvbG9yVHJhbnNmb3JtKHZhbHVlOkNvbG9yVHJhbnNmb3JtKVxuXHR7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZCA9PSBudWxsKVxuXHRcdFx0XHR0aGlzLmNvbG9yVHJhbnNmb3JtTWV0aG9kID0gbmV3IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kKCk7XG5cblx0XHRcdHRoaXMuY29sb3JUcmFuc2Zvcm1NZXRob2QuY29sb3JUcmFuc2Zvcm0gPSB2YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAoIXZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZClcblx0XHRcdFx0dGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZCBvYmplY3QgdG8gdHJhbnNmb3JtIHRoZSBjb2xvdXIgb2YgdGhlIG1hdGVyaWFsIHdpdGguIERlZmF1bHRzIHRvIG51bGwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbG9yVHJhbnNmb3JtTWV0aG9kKCk6RWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTz8gPEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kPiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBjb2xvclRyYW5zZm9ybU1ldGhvZCh2YWx1ZTpFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZClcblx0e1xuXHRcdGlmICh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyAmJiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy5tZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8pIHtcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8gPSBuZXcgTWV0aG9kVk8odmFsdWUpO1xuXHRcdFx0dGhpcy5fYWRkRGVwZW5kZW5jeSh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVtb3ZlRGVwZW5kZW5jeShtZXRob2RWTzpNZXRob2RWTywgZWZmZWN0c0RlcGVuZGVuY3k6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MuaW5kZXhPZihtZXRob2RWTyk7XG5cblx0XHRpZiAoIWVmZmVjdHNEZXBlbmRlbmN5KVxuXHRcdFx0dGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzLS07XG5cblx0XHRtZXRob2RWTy5tZXRob2QucmVtb3ZlRXZlbnRMaXN0ZW5lcihTaGFkaW5nTWV0aG9kRXZlbnQuU0hBREVSX0lOVkFMSURBVEVELCB0aGlzLl9vblNoYWRlckludmFsaWRhdGVkRGVsZWdhdGUpO1xuXHRcdHRoaXMuX2lNZXRob2RWT3Muc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBfYWRkRGVwZW5kZW5jeShtZXRob2RWTzpNZXRob2RWTywgZWZmZWN0c0RlcGVuZGVuY3k6Ym9vbGVhbiA9IGZhbHNlLCBpbmRleDpudW1iZXIgPSAtMSlcblx0e1xuXHRcdG1ldGhvZFZPLm1ldGhvZC5hZGRFdmVudExpc3RlbmVyKFNoYWRpbmdNZXRob2RFdmVudC5TSEFERVJfSU5WQUxJREFURUQsIHRoaXMuX29uU2hhZGVySW52YWxpZGF0ZWREZWxlZ2F0ZSk7XG5cblx0XHRpZiAoZWZmZWN0c0RlcGVuZGVuY3kpIHtcblx0XHRcdGlmIChpbmRleCAhPSAtMSlcblx0XHRcdFx0dGhpcy5faU1ldGhvZFZPcy5zcGxpY2UoaW5kZXggKyB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aCAtIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcywgMCwgbWV0aG9kVk8pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLl9pTWV0aG9kVk9zLnB1c2gobWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2lNZXRob2RWT3Muc3BsaWNlKHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzLCAwLCBtZXRob2RWTyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBhbiBcImVmZmVjdFwiIHNoYWRpbmcgbWV0aG9kIHRvIHRoZSBzaGFkZXIuIEVmZmVjdCBtZXRob2RzIGFyZSB0aG9zZSB0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhlIGxpZ2h0aW5nXG5cdCAqIGJ1dCBtb2R1bGF0ZSB0aGUgc2hhZGVkIGNvbG91ciwgdXNlZCBmb3IgZm9nLCBvdXRsaW5lcywgZXRjLiBUaGUgbWV0aG9kIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVzdWx0IG9mIHRoZVxuXHQgKiBtZXRob2RzIGFkZGVkIHByaW9yLlxuXHQgKi9cblx0cHVibGljIGFkZEVmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSlcblx0e1xuXHRcdHRoaXMuX2FkZERlcGVuZGVuY3kobmV3IE1ldGhvZFZPKG1ldGhvZCksIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgXCJlZmZlY3RcIiBtZXRob2RzIGFkZGVkIHRvIHRoZSBtYXRlcmlhbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbnVtRWZmZWN0TWV0aG9kcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcztcblx0fVxuXG5cdC8qKlxuXHQgKiBRdWVyaWVzIHdoZXRoZXIgYSBnaXZlbiBlZmZlY3RzIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIG1hdGVyaWFsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcXVlcmllZC5cblx0ICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXRob2Qgd2FzIGFkZGVkIHRvIHRoZSBtYXRlcmlhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGhhc0VmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RGVwZW5kZW5jeUZvck1ldGhvZChtZXRob2QpICE9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0aG9kIGFkZGVkIGF0IHRoZSBnaXZlbiBpbmRleC5cblx0ICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbWV0aG9kIHRvIHJldHJpZXZlLlxuXHQgKiBAcmV0dXJuIFRoZSBtZXRob2QgYXQgdGhlIGdpdmVuIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGdldEVmZmVjdE1ldGhvZEF0KGluZGV4Om51bWJlcik6RWZmZWN0TWV0aG9kQmFzZVxuXHR7XG5cdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcyAtIDEpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiA8RWZmZWN0TWV0aG9kQmFzZT4gdGhpcy5faU1ldGhvZFZPc1tpbmRleCArIHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzXS5tZXRob2Q7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBlZmZlY3QgbWV0aG9kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggYW1vbmdzdCB0aGUgbWV0aG9kcyBhbHJlYWR5IGFkZGVkIHRvIHRoZSBtYXRlcmlhbC4gRWZmZWN0XG5cdCAqIG1ldGhvZHMgYXJlIHRob3NlIHRoYXQgZG8gbm90IGluZmx1ZW5jZSB0aGUgbGlnaHRpbmcgYnV0IG1vZHVsYXRlIHRoZSBzaGFkZWQgY29sb3VyLCB1c2VkIGZvciBmb2csIG91dGxpbmVzLFxuXHQgKiBldGMuIFRoZSBtZXRob2Qgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZHMgd2l0aCBhIGxvd2VyIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGFkZEVmZmVjdE1ldGhvZEF0KG1ldGhvZDpFZmZlY3RNZXRob2RCYXNlLCBpbmRleDpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KG5ldyBNZXRob2RWTyhtZXRob2QpLCB0cnVlLCBpbmRleCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBlZmZlY3QgbWV0aG9kIGZyb20gdGhlIG1hdGVyaWFsLlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcmVtb3ZlZC5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVFZmZlY3RNZXRob2QobWV0aG9kOkVmZmVjdE1ldGhvZEJhc2UpXG5cdHtcblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk8gPSB0aGlzLmdldERlcGVuZGVuY3lGb3JNZXRob2QobWV0aG9kKTtcblxuXHRcdGlmIChtZXRob2RWTyAhPSBudWxsKVxuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeShtZXRob2RWTywgdHJ1ZSk7XG5cdH1cblxuXG5cdHByaXZhdGUgZ2V0RGVwZW5kZW5jeUZvck1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSk6TWV0aG9kVk9cblx0e1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHRpZiAodGhpcy5faU1ldGhvZFZPc1tpXS5tZXRob2QgPT0gbWV0aG9kKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5faU1ldGhvZFZPc1tpXTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcGVyLXBpeGVsIG5vcm1hbHMuIERlZmF1bHRzIHRvIE5vcm1hbEJhc2ljTWV0aG9kLlxuXHQgKi9cblx0cHVibGljIGdldCBub3JtYWxNZXRob2QoKTpOb3JtYWxCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lOb3JtYWxNZXRob2RWTz8gPE5vcm1hbEJhc2ljTWV0aG9kPiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbm9ybWFsTWV0aG9kKHZhbHVlOk5vcm1hbEJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTyAmJiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pTm9ybWFsTWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faU5vcm1hbE1ldGhvZFZPID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHRoaXMuX2lOb3JtYWxNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lOb3JtYWxNZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgYW1iaWVudCBsaWdodGluZyBjb250cmlidXRpb24uIERlZmF1bHRzIHRvIEFtYmllbnRCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW1iaWVudE1ldGhvZCgpOkFtYmllbnRCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8/IDxBbWJpZW50QmFzaWNNZXRob2Q+IHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubWV0aG9kIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudE1ldGhvZCh2YWx1ZTpBbWJpZW50QmFzaWNNZXRob2QpXG5cdHtcblx0XHRpZiAodGhpcy5faUFtYmllbnRNZXRob2RWTyAmJiB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPKSB7XG5cdFx0XHR0aGlzLl9yZW1vdmVEZXBlbmRlbmN5KHRoaXMuX2lBbWJpZW50TWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faUFtYmllbnRNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pQW1iaWVudE1ldGhvZFZPID0gbmV3IE1ldGhvZFZPKHZhbHVlKTtcblx0XHRcdHRoaXMuX2FkZERlcGVuZGVuY3kodGhpcy5faUFtYmllbnRNZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdXNlZCB0byByZW5kZXIgc2hhZG93cyBjYXN0IG9uIHRoaXMgc3VyZmFjZSwgb3IgbnVsbCBpZiBubyBzaGFkb3dzIGFyZSB0byBiZSByZW5kZXJlZC4gRGVmYXVsdHMgdG8gbnVsbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgc2hhZG93TWV0aG9kKCk6U2hhZG93TWFwTWV0aG9kQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lTaGFkb3dNZXRob2RWTz8gPFNoYWRvd01hcE1ldGhvZEJhc2U+IHRoaXMuX2lTaGFkb3dNZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBzaGFkb3dNZXRob2QodmFsdWU6U2hhZG93TWFwTWV0aG9kQmFzZSlcblx0e1xuXHRcdGlmICh0aGlzLl9pU2hhZG93TWV0aG9kVk8gJiYgdGhpcy5faVNoYWRvd01ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pU2hhZG93TWV0aG9kVk8pIHtcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faVNoYWRvd01ldGhvZFZPKTtcblx0XHRcdHRoaXMuX2lTaGFkb3dNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pU2hhZG93TWV0aG9kVk8gPSBuZXcgTWV0aG9kVk8odmFsdWUpO1xuXHRcdFx0dGhpcy5fYWRkRGVwZW5kZW5jeSh0aGlzLl9pU2hhZG93TWV0aG9kVk8pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGRpZmZ1c2UgbGlnaHRpbmcgY29udHJpYnV0aW9uLiBEZWZhdWx0cyB0byBEaWZmdXNlQmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VNZXRob2QoKTpEaWZmdXNlQmFzaWNNZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPPyA8RGlmZnVzZUJhc2ljTWV0aG9kPiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm1ldGhvZCA6IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VNZXRob2QodmFsdWU6RGlmZnVzZUJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8gJiYgdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPKTtcblx0XHRcdHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5faURpZmZ1c2VNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIHNwZWN1bGFyIGxpZ2h0aW5nIGNvbnRyaWJ1dGlvbi4gRGVmYXVsdHMgdG8gU3BlY3VsYXJCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXJNZXRob2QoKTpTcGVjdWxhckJhc2ljTWV0aG9kXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8/IDxTcGVjdWxhckJhc2ljTWV0aG9kPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhck1ldGhvZCh2YWx1ZTpTcGVjdWxhckJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPICYmIHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyk7XG5cdFx0XHR0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHN1cGVyLmRpc3Bvc2UoKTtcblxuXHRcdHdoaWxlICh0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aClcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faU1ldGhvZFZPc1swXSk7XG5cblx0XHR0aGlzLl9pTWV0aG9kVk9zID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbnkgbWV0aG9kJ3Mgc2hhZGVyIGNvZGUgaXMgaW52YWxpZGF0ZWQuXG5cdCAqL1xuXHRwcml2YXRlIG9uU2hhZGVySW52YWxpZGF0ZWQoZXZlbnQ6U2hhZGluZ01ldGhvZEV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvLyBSRU5ERVIgTE9PUFxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pQWN0aXZhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdHN1cGVyLl9pQWN0aXZhdGUocGFzcywgc3RhZ2UsIGNhbWVyYSk7XG5cblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk87XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdFx0bWV0aG9kVk8ubWV0aG9kLmlBY3RpdmF0ZShwYXNzLnNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHN0YWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHJlbmRlcmFibGVcblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwYXJhbSBjYW1lcmFcblx0ICovXG5cdHB1YmxpYyBzZXRSZW5kZXJTdGF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHN1cGVyLnNldFJlbmRlclN0YXRlKHBhc3MsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdHZhciBtZXRob2RWTzpNZXRob2RWTztcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRtZXRob2RWTyA9IHRoaXMuX2lNZXRob2RWT3NbaV07XG5cdFx0XHRpZiAobWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0XHRtZXRob2RWTy5tZXRob2QuaVNldFJlbmRlclN0YXRlKHBhc3Muc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lEZWFjdGl2YXRlKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRzdXBlci5faURlYWN0aXZhdGUocGFzcywgc3RhZ2UpO1xuXG5cdFx0dmFyIG1ldGhvZFZPOk1ldGhvZFZPO1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdG1ldGhvZFZPID0gdGhpcy5faU1ldGhvZFZPc1tpXTtcblx0XHRcdGlmIChtZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRcdG1ldGhvZFZPLm1ldGhvZC5pRGVhY3RpdmF0ZShwYXNzLnNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHN0YWdlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgX2lJbmNsdWRlRGVwZW5kZW5jaWVzKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdClcblx0e1xuXHRcdHZhciBpOm51bWJlcjtcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSlcblx0XHRcdHRoaXMuc2V0dXBBbmRDb3VudERlcGVuZGVuY2llcyhzaGFkZXJPYmplY3QsIHRoaXMuX2lNZXRob2RWT3NbaV0pO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKVxuXHRcdFx0dGhpcy5faU1ldGhvZFZPc1tpXS51c2VNZXRob2QgPSB0aGlzLl9pTWV0aG9kVk9zW2ldLm1ldGhvZC5pSXNVc2VkKHNoYWRlck9iamVjdCk7XG5cblx0XHRzdXBlci5faUluY2x1ZGVEZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0KTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIENvdW50cyB0aGUgZGVwZW5kZW5jaWVzIGZvciBhIGdpdmVuIG1ldGhvZC5cblx0ICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNvdW50IHRoZSBkZXBlbmRlbmNpZXMgZm9yLlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIG1ldGhvZCdzIGRhdGEgZm9yIHRoaXMgbWF0ZXJpYWwuXG5cdCAqL1xuXHRwcml2YXRlIHNldHVwQW5kQ291bnREZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ucmVzZXQoKTtcblxuXHRcdG1ldGhvZFZPLm1ldGhvZC5pSW5pdFZPKHNoYWRlck9iamVjdCwgbWV0aG9kVk8pO1xuXG5cdFx0aWYgKG1ldGhvZFZPLm5lZWRzUHJvamVjdGlvbilcblx0XHRcdHNoYWRlck9iamVjdC5wcm9qZWN0aW9uRGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNHbG9iYWxWZXJ0ZXhQb3MpIHtcblxuXHRcdFx0c2hhZGVyT2JqZWN0Lmdsb2JhbFBvc0RlcGVuZGVuY2llcysrO1xuXG5cdFx0XHRpZiAobWV0aG9kVk8ubmVlZHNHbG9iYWxGcmFnbWVudFBvcylcblx0XHRcdFx0c2hhZGVyT2JqZWN0LnVzZXNHbG9iYWxQb3NGcmFnbWVudCA9IHRydWU7XG5cblx0XHR9IGVsc2UgaWYgKG1ldGhvZFZPLm5lZWRzR2xvYmFsRnJhZ21lbnRQb3MpIHtcblx0XHRcdHNoYWRlck9iamVjdC5nbG9iYWxQb3NEZXBlbmRlbmNpZXMrKztcblx0XHRcdHNoYWRlck9iamVjdC51c2VzR2xvYmFsUG9zRnJhZ21lbnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChtZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRzaGFkZXJPYmplY3Qubm9ybWFsRGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNUYW5nZW50cylcblx0XHRcdHNoYWRlck9iamVjdC50YW5nZW50RGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0c2hhZGVyT2JqZWN0LnZpZXdEaXJEZXBlbmRlbmNpZXMrKztcblxuXHRcdGlmIChtZXRob2RWTy5uZWVkc1VWKVxuXHRcdFx0c2hhZGVyT2JqZWN0LnV2RGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNTZWNvbmRhcnlVVilcblx0XHRcdHNoYWRlck9iamVjdC5zZWNvbmRhcnlVVkRlcGVuZGVuY2llcysrO1xuXHR9XG5cblx0cHVibGljIF9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPICYmIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLm1ldGhvZC5pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTyAmJiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QuaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0aWYgKHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPICYmIHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldFByZUxpZ2h0aW5nRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPICYmIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8udXNlTWV0aG9kKSB7XG5cdFx0XHRjb2RlICs9IHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubWV0aG9kLmlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLCBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHRpZiAodGhpcy5faUFtYmllbnRNZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50KTtcblxuXHRcdFx0aWYgKHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPICYmIHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0Y29kZSArPSAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSg8U2hhZGVyTGlnaHRpbmdPYmplY3Q+IHNoYWRlck9iamVjdCwgdGhpcy5faURpZmZ1c2VNZXRob2RWTywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyAmJiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRjb2RlICs9ICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSg8U2hhZGVyTGlnaHRpbmdPYmplY3Q+IHNoYWRlck9iamVjdCwgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldFBlckxpZ2h0RGlmZnVzZUZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIGxpZ2h0RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgZGlmZnVzZUNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudENvZGVQZXJMaWdodChzaGFkZXJPYmplY3QsIHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8sIGxpZ2h0RGlyUmVnLCBkaWZmdXNlQ29sb3JSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbGlnaHREaXJSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBzcGVjdWxhckNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kKS5pR2V0RnJhZ21lbnRDb2RlUGVyTGlnaHQoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgbGlnaHREaXJSZWcsIHNwZWN1bGFyQ29sb3JSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJQcm9iZURpZmZ1c2VGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCB0ZXhSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB3ZWlnaHRSZWc6c3RyaW5nLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm1ldGhvZCkuaUdldEZyYWdtZW50Q29kZVBlclByb2JlKHNoYWRlck9iamVjdCwgdGhpcy5faURpZmZ1c2VNZXRob2RWTywgdGV4UmVnLCB3ZWlnaHRSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJQcm9iZVNwZWN1bGFyRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgdGV4UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgd2VpZ2h0UmVnOnN0cmluZywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kKS5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgdGV4UmVnLCB3ZWlnaHRSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQb3N0TGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5faVNoYWRvd01ldGhvZFZPKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pU2hhZG93TWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faVNoYWRvd01ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQb3N0TGlnaHRpbmdGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudXNlQWxwaGFQcmVtdWx0aXBsaWVkICYmIHRoaXMuX3BFbmFibGVCbGVuZGluZykge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIi53LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIi53LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5jb21tb25zICsgXCIuelxcblwiICtcblx0XHRcdFx0XCJkaXYgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIueHl6LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIud1xcblwiICtcblx0XHRcdFx0XCJzdWIgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIudywgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIudywgXCIgKyBzaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLnpcXG5cIiArXG5cdFx0XHRcdFwic2F0IFwiICsgc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCArIFwiLnh5eiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faVNoYWRvd01ldGhvZFZPKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pU2hhZG93TWV0aG9kVk8ubWV0aG9kLmlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU2hhZG93TWV0aG9kVk8sIHNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTyAmJiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLnVzZU1ldGhvZCkge1xuXHRcdFx0Y29kZSArPSAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLCBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHQvLyByZXNvbHZlIG90aGVyIGRlcGVuZGVuY2llcyBhcyB3ZWxsP1xuXHRcdFx0aWYgKHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8ubmVlZHNOb3JtYWxzKVxuXHRcdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudCk7XG5cblx0XHRcdGlmICh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm5lZWRzVmlldylcblx0XHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZShzaGFyZWRSZWdpc3RlcnMudmlld0RpckZyYWdtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faVNwZWN1bGFyTWV0aG9kVk8gJiYgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8udXNlTWV0aG9kKSB7XG5cdFx0XHRjb2RlICs9ICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0XHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50KTtcblx0XHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5uZWVkc1ZpZXcpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLnZpZXdEaXJGcmFnbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2lTaGFkb3dNZXRob2RWTylcblx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLnNoYWRvd1RhcmdldCk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgYWxsb3dlZCBpbiB0YW5nZW50IHNwYWNlLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgbm8gb2JqZWN0LXNwYWNlXG5cdCAqIGRlcGVuZGVuY2llcyBleGlzdC5cblx0ICovXG5cdHB1YmxpYyBfcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0KTpib29sZWFuXG5cdHtcblx0XHRpZiAoc2hhZGVyT2JqZWN0LnVzZXNQcm9iZXMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk87XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZCAmJiAhbWV0aG9kVk8ubWV0aG9kLmlVc2VzVGFuZ2VudFNwYWNlKCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgb3V0cHV0IGluIHRhbmdlbnQgc3BhY2UuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiAoPE5vcm1hbEJhc2ljTWV0aG9kPiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kKS5pT3V0cHV0c1RhbmdlbnROb3JtYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IG5vcm1hbHMgYXJlIG91dHB1dCBieSB0aGUgcGFzcy5cblx0ICovXG5cdHB1YmxpYyBfcE91dHB1dHNOb3JtYWxzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faU5vcm1hbE1ldGhvZFZPICYmIHRoaXMuX2lOb3JtYWxNZXRob2RWTy51c2VNZXRob2Q7XG5cdH1cblxuXG5cdHB1YmxpYyBfaUdldE5vcm1hbFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faU5vcm1hbE1ldGhvZFZPLm1ldGhvZC5pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lOb3JtYWxNZXRob2RWTywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldE5vcm1hbEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IHRoaXMuX2lOb3JtYWxNZXRob2RWTy5tZXRob2QuaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lOb3JtYWxNZXRob2RWTywgc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc1ZpZXcpXG5cdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQpO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc0dsb2JhbEZyYWdtZW50UG9zIHx8IHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc0dsb2JhbFZlcnRleFBvcylcblx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlVmVydGV4VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZlcnRleCk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBtZXRob2RWTzpNZXRob2RWTztcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gbGVuIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdG1ldGhvZFZPID0gdGhpcy5faU1ldGhvZFZPc1tpXTtcblx0XHRcdGlmIChtZXRob2RWTy51c2VNZXRob2QpIHtcblx0XHRcdFx0Y29kZSArPSBtZXRob2RWTy5tZXRob2QuaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgcmVnQ2FjaGUsIHNoYXJlZFJlZyk7XG5cblx0XHRcdFx0aWYgKG1ldGhvZFZPLm5lZWRzR2xvYmFsVmVydGV4UG9zIHx8IG1ldGhvZFZPLm5lZWRzR2xvYmFsRnJhZ21lbnRQb3MpXG5cdFx0XHRcdFx0cmVnQ2FjaGUucmVtb3ZlVmVydGV4VGVtcFVzYWdlKHNoYXJlZFJlZy5nbG9iYWxQb3NpdGlvblZlcnRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPICYmIHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8sIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBhbHBoYVJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHRpZiAodGhpcy5wcmVzZXJ2ZUFscGhhICYmIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcyA+IDApIHtcblx0XHRcdGFscGhhUmVnID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50U2luZ2xlVGVtcCgpO1xuXHRcdFx0cmVnQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKGFscGhhUmVnLCAxKTtcblx0XHRcdGNvZGUgKz0gXCJtb3YgXCIgKyBhbHBoYVJlZyArIFwiLCBcIiArIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQgKyBcIi53XFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIG1ldGhvZFZPOk1ldGhvZFZPO1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSBsZW4gLSB0aGlzLl9udW1FZmZlY3REZXBlbmRlbmNpZXM7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZCkge1xuXHRcdFx0XHRjb2RlICs9IG1ldGhvZFZPLm1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQsIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0XHRcdGlmIChtZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdFx0cmVnQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnLm5vcm1hbEZyYWdtZW50KTtcblxuXHRcdFx0XHRpZiAobWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0XHRcdHJlZ0NhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZy52aWV3RGlyRnJhZ21lbnQpO1xuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucHJlc2VydmVBbHBoYSAmJiB0aGlzLl9udW1FZmZlY3REZXBlbmRlbmNpZXMgPiAwKSB7XG5cdFx0XHRjb2RlICs9IFwibW92IFwiICsgc2hhcmVkUmVnLnNoYWRlZFRhcmdldCArIFwiLncsIFwiICsgYWxwaGFSZWcgKyBcIlxcblwiO1xuXHRcdFx0cmVnQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UoYWxwaGFSZWcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyAmJiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRjb2RlICs9IHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPLm1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8sIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQsIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzaGFkZXIgdXNlcyBhbnkgc2hhZG93cy5cblx0ICovXG5cdHB1YmxpYyBfaVVzZXNTaGFkb3dzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIEJvb2xlYW4odGhpcy5faVNoYWRvd01ldGhvZFZPIHx8IHRoaXMubGlnaHRQaWNrZXIuY2FzdGluZ0RpcmVjdGlvbmFsTGlnaHRzLmxlbmd0aCA+IDAgfHwgdGhpcy5saWdodFBpY2tlci5jYXN0aW5nUG9pbnRMaWdodHMubGVuZ3RoID4gMCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNoYWRlciB1c2VzIGFueSBzcGVjdWxhciBjb21wb25lbnQuXG5cdCAqL1xuXHRwdWJsaWMgX2lVc2VzU3BlY3VsYXIoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVNZXRob2RQYXNzOyJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL3RyaWFuZ2xlbWV0aG9kcGFzcy50cyJdLCJuYW1lcyI6WyJUcmlhbmdsZU1ldGhvZFBhc3MiLCJUcmlhbmdsZU1ldGhvZFBhc3MuY29uc3RydWN0b3IiLCJUcmlhbmdsZU1ldGhvZFBhc3MuY3JlYXRlU2hhZGVyT2JqZWN0IiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pSW5pdENvbnN0YW50RGF0YSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5jb2xvclRyYW5zZm9ybSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5jb2xvclRyYW5zZm9ybU1ldGhvZCIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5fcmVtb3ZlRGVwZW5kZW5jeSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5fYWRkRGVwZW5kZW5jeSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5hZGRFZmZlY3RNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MubnVtRWZmZWN0TWV0aG9kcyIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5oYXNFZmZlY3RNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MuZ2V0RWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZFBhc3MuYWRkRWZmZWN0TWV0aG9kQXQiLCJUcmlhbmdsZU1ldGhvZFBhc3MucmVtb3ZlRWZmZWN0TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmdldERlcGVuZGVuY3lGb3JNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Mubm9ybWFsTWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmFtYmllbnRNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc2hhZG93TWV0aG9kIiwiVHJpYW5nbGVNZXRob2RQYXNzLmRpZmZ1c2VNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc3BlY3VsYXJNZXRob2QiLCJUcmlhbmdsZU1ldGhvZFBhc3MuZGlzcG9zZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5vblNoYWRlckludmFsaWRhdGVkIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pQWN0aXZhdGUiLCJUcmlhbmdsZU1ldGhvZFBhc3Muc2V0UmVuZGVyU3RhdGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lEZWFjdGl2YXRlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pSW5jbHVkZURlcGVuZGVuY2llcyIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5zZXR1cEFuZENvdW50RGVwZW5kZW5jaWVzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UHJlTGlnaHRpbmdGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQZXJMaWdodERpZmZ1c2VGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UGVyUHJvYmVEaWZmdXNlRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0UGVyUHJvYmVTcGVjdWxhckZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faUdldFBvc3RMaWdodGluZ1ZlcnRleENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXRQb3N0TGlnaHRpbmdGcmFnbWVudENvZGUiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX3BVc2VzVGFuZ2VudFNwYWNlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9wT3V0cHV0c1RhbmdlbnROb3JtYWxzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9wT3V0cHV0c05vcm1hbHMiLCJUcmlhbmdsZU1ldGhvZFBhc3MuX2lHZXROb3JtYWxWZXJ0ZXhDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0Tm9ybWFsRnJhZ21lbnRDb2RlIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pR2V0VmVydGV4Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faUdldEZyYWdtZW50Q29kZSIsIlRyaWFuZ2xlTWV0aG9kUGFzcy5faVVzZXNTaGFkb3dzIiwiVHJpYW5nbGVNZXRob2RQYXNzLl9pVXNlc1NwZWN1bGFyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFjQSxJQUFPLGtCQUFrQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDdEYsSUFBTyxRQUFRLFdBQWdCLG1EQUFtRCxDQUFDLENBQUM7QUFDcEYsSUFBTyxvQkFBb0IsV0FBYSwrREFBK0QsQ0FBQyxDQUFDO0FBQ3pHLElBQU8sZ0JBQWdCLFdBQWMsMkRBQTJELENBQUMsQ0FBQztBQU1sRyxJQUFPLDBCQUEwQixXQUFXLGlFQUFpRSxDQUFDLENBQUM7QUFPL0csSUFBTyxnQkFBZ0IsV0FBYyxzREFBc0QsQ0FBQyxDQUFDO0FBQzdGLElBQU8sZ0JBQWdCLFdBQWMsc0RBQXNELENBQUMsQ0FBQztBQUU3RixBQUlBOzs7R0FERztJQUNHLGtCQUFrQjtJQUFTQSxVQUEzQkEsa0JBQWtCQSxVQUF5QkE7SUFjaERBOzs7O09BSUdBO0lBQ0hBLFNBbkJLQSxrQkFBa0JBLENBbUJYQSxRQUFzQkE7UUFuQm5DQyxpQkF3ckJDQTtRQXJxQllBLHdCQUFzQkEsR0FBdEJBLGVBQXNCQTtRQUVqQ0Esa0JBQU1BLFFBQVFBLENBQUNBLENBQUNBO1FBYlZBLGdCQUFXQSxHQUFtQkEsSUFBSUEsS0FBS0EsRUFBWUEsQ0FBQ0E7UUFFcERBLDJCQUFzQkEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFheENBLElBQUlBLENBQUNBLDRCQUE0QkEsR0FBR0EsVUFBQ0EsS0FBd0JBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBL0JBLENBQStCQSxDQUFDQTtJQUNuR0EsQ0FBQ0E7SUFFREQ7Ozs7T0FJR0E7SUFDSUEsK0NBQWtCQSxHQUF6QkEsVUFBMEJBLE9BQWNBO1FBRXZDRSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxnQkFBZ0JBLENBQUNBLFFB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QkFBd0JBLElBQUlBLElBQUlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDNUVBLElBQUlBLElBQUlBLElBQUlBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxFQUFFQSxJQUFJQSxDQUFDQSx3QkFBd0JBLEVBQUVBLFNBQVNBLENBQUNBLFlBQVlBLEVBQUVBLFFBQVFBLEVBQUVBLFNBQVNBLENBQUNBLENBQUNBO1FBRXpKQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNiQSxDQUFDQTtJQUNEekM7O09BRUdBO0lBQ0lBLDBDQUFhQSxHQUFwQkE7UUFFQzBDLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLGdCQUFnQkEsSUFBSUEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0Esd0JBQXdCQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxrQkFBa0JBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO0lBQ2pKQSxDQUFDQTtJQUVEMUM7O09BRUdBO0lBQ0lBLDJDQUFjQSxHQUFyQkE7UUFFQzJDLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0E7SUFDekNBLENBQUNBO0lBQ0YzQyx5QkFBQ0E7QUFBREEsQ0F4ckJBLEFBd3JCQ0EsRUF4ckJnQyxnQkFBZ0IsRUF3ckJoRDtBQUVELEFBQTRCLGlCQUFuQixrQkFBa0IsQ0FBQyIsImZpbGUiOiJtYXRlcmlhbHMvcGFzc2VzL1RyaWFuZ2xlTWV0aG9kUGFzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29sb3JUcmFuc2Zvcm1cdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL0NvbG9yVHJhbnNmb3JtXCIpO1xuaW1wb3J0IE1hdHJpeFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeFwiKTtcbmltcG9ydCBNYXRyaXgzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEXCIpO1xuaW1wb3J0IE1hdHJpeDNEVXRpbHNcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL01hdHJpeDNEVXRpbHNcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IFRleHR1cmUyREJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlMkRCYXNlXCIpO1xuXG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzRGF0YVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgU2hhZGluZ01ldGhvZEV2ZW50XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2V2ZW50cy9TaGFkaW5nTWV0aG9kRXZlbnRcIik7XG5pbXBvcnQgTWV0aG9kVk9cdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL01ldGhvZFZPXCIpO1xuaW1wb3J0IFNoYWRlckxpZ2h0aW5nT2JqZWN0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJMaWdodGluZ09iamVjdFwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJDYWNoZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJDYWNoZVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5pbXBvcnQgQW1iaWVudEJhc2ljTWV0aG9kXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0FtYmllbnRCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBEaWZmdXNlQmFzaWNNZXRob2RcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRGlmZnVzZUJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kXHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL21ldGhvZHMvRWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2RcIik7XG5pbXBvcnQgRWZmZWN0TWV0aG9kQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0VmZmVjdE1ldGhvZEJhc2VcIik7XG5pbXBvcnQgTGlnaHRpbmdNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL0xpZ2h0aW5nTWV0aG9kQmFzZVwiKTtcbmltcG9ydCBOb3JtYWxCYXNpY01ldGhvZFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9Ob3JtYWxCYXNpY01ldGhvZFwiKTtcbmltcG9ydCBTaGFkb3dNYXBNZXRob2RCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9tZXRob2RzL1NoYWRvd01hcE1ldGhvZEJhc2VcIik7XG5pbXBvcnQgU3BlY3VsYXJCYXNpY01ldGhvZFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvbWV0aG9kcy9TcGVjdWxhckJhc2ljTWV0aG9kXCIpO1xuaW1wb3J0IElMaWdodGluZ1Bhc3NTdGFnZUdMXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvSUxpZ2h0aW5nUGFzc1N0YWdlR0xcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NNb2RlXCIpO1xuXG4vKipcbiAqIENvbXBpbGVkUGFzcyBmb3JtcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgZGVmYXVsdCBjb21waWxlZCBwYXNzIG1hdGVyaWFscyBwcm92aWRlZCBieSBBd2F5M0QsXG4gKiB1c2luZyBtYXRlcmlhbCBtZXRob2RzIHRvIGRlZmluZSB0aGVpciBhcHBlYXJhbmNlLlxuICovXG5jbGFzcyBUcmlhbmdsZU1ldGhvZFBhc3MgZXh0ZW5kcyBNYXRlcmlhbFBhc3NCYXNlIGltcGxlbWVudHMgSUxpZ2h0aW5nUGFzc1N0YWdlR0xcbntcblx0cHVibGljIF9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pTm9ybWFsTWV0aG9kVk86TWV0aG9kVk87XG5cdHB1YmxpYyBfaUFtYmllbnRNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pU2hhZG93TWV0aG9kVk86TWV0aG9kVk87XG5cdHB1YmxpYyBfaURpZmZ1c2VNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pU3BlY3VsYXJNZXRob2RWTzpNZXRob2RWTztcblx0cHVibGljIF9pTWV0aG9kVk9zOkFycmF5PE1ldGhvZFZPPiA9IG5ldyBBcnJheTxNZXRob2RWTz4oKTtcblxuXHRwdWJsaWMgX251bUVmZmVjdERlcGVuZGVuY2llczpudW1iZXIgPSAwO1xuXG5cdHByaXZhdGUgX29uU2hhZGVySW52YWxpZGF0ZWREZWxlZ2F0ZTooZXZlbnQ6U2hhZGluZ01ldGhvZEV2ZW50KSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IENvbXBpbGVkUGFzcyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbCBUaGUgbWF0ZXJpYWwgdG8gd2hpY2ggdGhpcyBwYXNzIGJlbG9uZ3MuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXNzTW9kZTpudW1iZXIgPSAweDAzKVxuXHR7XG5cdFx0c3VwZXIocGFzc01vZGUpO1xuXG5cdFx0dGhpcy5fb25TaGFkZXJJbnZhbGlkYXRlZERlbGVnYXRlID0gKGV2ZW50OlNoYWRpbmdNZXRob2RFdmVudCkgPT4gdGhpcy5vblNoYWRlckludmFsaWRhdGVkKGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBjb25jcmV0ZSBzaGFkZXIgb2JqZWN0IGZvciB0aGlzIHBhc3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9maWxlIFRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGUgdXNlZCBieSB0aGUgcmVuZGVyZXIuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlU2hhZGVyT2JqZWN0KHByb2ZpbGU6c3RyaW5nKTpTaGFkZXJPYmplY3RCYXNlXG5cdHtcblx0XHRpZiAodGhpcy5fcExpZ2h0UGlja2VyICYmICh0aGlzLnBhc3NNb2RlICYgTWF0ZXJpYWxQYXNzTW9kZS5MSUdIVElORykpXG5cdFx0XHRyZXR1cm4gbmV3IFNoYWRlckxpZ2h0aW5nT2JqZWN0KHByb2ZpbGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBTaGFkZXJPYmplY3RCYXNlKHByb2ZpbGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB1bmNoYW5naW5nIGNvbnN0YW50IGRhdGEgZm9yIHRoaXMgbWF0ZXJpYWwuXG5cdCAqL1xuXHRwdWJsaWMgX2lJbml0Q29uc3RhbnREYXRhKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKVxuXHR7XG5cdFx0c3VwZXIuX2lJbml0Q29uc3RhbnREYXRhKHNoYWRlck9iamVjdCk7XG5cblx0XHQvL1VwZGF0ZXMgbWV0aG9kIGNvbnN0YW50cyBpZiB0aGV5IGhhdmUgY2hhbmdlZC5cblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKVxuXHRcdFx0dGhpcy5faU1ldGhvZFZPc1tpXS5tZXRob2QuaUluaXRDb25zdGFudHMoc2hhZGVyT2JqZWN0LCB0aGlzLl9pTWV0aG9kVk9zW2ldKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQ29sb3JUcmFuc2Zvcm0gb2JqZWN0IHRvIHRyYW5zZm9ybSB0aGUgY29sb3VyIG9mIHRoZSBtYXRlcmlhbCB3aXRoLiBEZWZhdWx0cyB0byBudWxsLlxuXHQgKi9cblx0cHVibGljIGdldCBjb2xvclRyYW5zZm9ybSgpOkNvbG9yVHJhbnNmb3JtXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZD8gdGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZC5jb2xvclRyYW5zZm9ybSA6IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGNvbG9yVHJhbnNmb3JtKHZhbHVlOkNvbG9yVHJhbnNmb3JtKVxuXHR7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZCA9PSBudWxsKVxuXHRcdFx0XHR0aGlzLmNvbG9yVHJhbnNmb3JtTWV0aG9kID0gbmV3IEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kKCk7XG5cblx0XHRcdHRoaXMuY29sb3JUcmFuc2Zvcm1NZXRob2QuY29sb3JUcmFuc2Zvcm0gPSB2YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAoIXZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZClcblx0XHRcdFx0dGhpcy5jb2xvclRyYW5zZm9ybU1ldGhvZCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZCBvYmplY3QgdG8gdHJhbnNmb3JtIHRoZSBjb2xvdXIgb2YgdGhlIG1hdGVyaWFsIHdpdGguIERlZmF1bHRzIHRvIG51bGwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGNvbG9yVHJhbnNmb3JtTWV0aG9kKCk6RWZmZWN0Q29sb3JUcmFuc2Zvcm1NZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTz8gPEVmZmVjdENvbG9yVHJhbnNmb3JtTWV0aG9kPiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBjb2xvclRyYW5zZm9ybU1ldGhvZCh2YWx1ZTpFZmZlY3RDb2xvclRyYW5zZm9ybU1ldGhvZClcblx0e1xuXHRcdGlmICh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyAmJiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy5tZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8pIHtcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8gPSBuZXcgTWV0aG9kVk8odmFsdWUpO1xuXHRcdFx0dGhpcy5fYWRkRGVwZW5kZW5jeSh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVtb3ZlRGVwZW5kZW5jeShtZXRob2RWTzpNZXRob2RWTywgZWZmZWN0c0RlcGVuZGVuY3k6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0dmFyIGluZGV4Om51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MuaW5kZXhPZihtZXRob2RWTyk7XG5cblx0XHRpZiAoIWVmZmVjdHNEZXBlbmRlbmN5KVxuXHRcdFx0dGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzLS07XG5cblx0XHRtZXRob2RWTy5tZXRob2QucmVtb3ZlRXZlbnRMaXN0ZW5lcihTaGFkaW5nTWV0aG9kRXZlbnQuU0hBREVSX0lOVkFMSURBVEVELCB0aGlzLl9vblNoYWRlckludmFsaWRhdGVkRGVsZWdhdGUpO1xuXHRcdHRoaXMuX2lNZXRob2RWT3Muc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdHRoaXMuX3BJbnZhbGlkYXRlUGFzcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBfYWRkRGVwZW5kZW5jeShtZXRob2RWTzpNZXRob2RWTywgZWZmZWN0c0RlcGVuZGVuY3k6Ym9vbGVhbiA9IGZhbHNlLCBpbmRleDpudW1iZXIgPSAtMSlcblx0e1xuXHRcdG1ldGhvZFZPLm1ldGhvZC5hZGRFdmVudExpc3RlbmVyKFNoYWRpbmdNZXRob2RFdmVudC5TSEFERVJfSU5WQUxJREFURUQsIHRoaXMuX29uU2hhZGVySW52YWxpZGF0ZWREZWxlZ2F0ZSk7XG5cblx0XHRpZiAoZWZmZWN0c0RlcGVuZGVuY3kpIHtcblx0XHRcdGlmIChpbmRleCAhPSAtMSlcblx0XHRcdFx0dGhpcy5faU1ldGhvZFZPcy5zcGxpY2UoaW5kZXggKyB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aCAtIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcywgMCwgbWV0aG9kVk8pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLl9pTWV0aG9kVk9zLnB1c2gobWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2lNZXRob2RWT3Muc3BsaWNlKHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzLCAwLCBtZXRob2RWTyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBhbiBcImVmZmVjdFwiIHNoYWRpbmcgbWV0aG9kIHRvIHRoZSBzaGFkZXIuIEVmZmVjdCBtZXRob2RzIGFyZSB0aG9zZSB0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhlIGxpZ2h0aW5nXG5cdCAqIGJ1dCBtb2R1bGF0ZSB0aGUgc2hhZGVkIGNvbG91ciwgdXNlZCBmb3IgZm9nLCBvdXRsaW5lcywgZXRjLiBUaGUgbWV0aG9kIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVzdWx0IG9mIHRoZVxuXHQgKiBtZXRob2RzIGFkZGVkIHByaW9yLlxuXHQgKi9cblx0cHVibGljIGFkZEVmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSlcblx0e1xuXHRcdHRoaXMuX2FkZERlcGVuZGVuY3kobmV3IE1ldGhvZFZPKG1ldGhvZCksIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgXCJlZmZlY3RcIiBtZXRob2RzIGFkZGVkIHRvIHRoZSBtYXRlcmlhbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgbnVtRWZmZWN0TWV0aG9kcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcztcblx0fVxuXG5cdC8qKlxuXHQgKiBRdWVyaWVzIHdoZXRoZXIgYSBnaXZlbiBlZmZlY3RzIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIG1hdGVyaWFsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcXVlcmllZC5cblx0ICogQHJldHVybiB0cnVlIGlmIHRoZSBtZXRob2Qgd2FzIGFkZGVkIHRvIHRoZSBtYXRlcmlhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGhhc0VmZmVjdE1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RGVwZW5kZW5jeUZvck1ldGhvZChtZXRob2QpICE9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0aG9kIGFkZGVkIGF0IHRoZSBnaXZlbiBpbmRleC5cblx0ICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbWV0aG9kIHRvIHJldHJpZXZlLlxuXHQgKiBAcmV0dXJuIFRoZSBtZXRob2QgYXQgdGhlIGdpdmVuIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGdldEVmZmVjdE1ldGhvZEF0KGluZGV4Om51bWJlcik6RWZmZWN0TWV0aG9kQmFzZVxuXHR7XG5cdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcyAtIDEpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiA8RWZmZWN0TWV0aG9kQmFzZT4gdGhpcy5faU1ldGhvZFZPc1tpbmRleCArIHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzXS5tZXRob2Q7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBlZmZlY3QgbWV0aG9kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggYW1vbmdzdCB0aGUgbWV0aG9kcyBhbHJlYWR5IGFkZGVkIHRvIHRoZSBtYXRlcmlhbC4gRWZmZWN0XG5cdCAqIG1ldGhvZHMgYXJlIHRob3NlIHRoYXQgZG8gbm90IGluZmx1ZW5jZSB0aGUgbGlnaHRpbmcgYnV0IG1vZHVsYXRlIHRoZSBzaGFkZWQgY29sb3VyLCB1c2VkIGZvciBmb2csIG91dGxpbmVzLFxuXHQgKiBldGMuIFRoZSBtZXRob2Qgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZHMgd2l0aCBhIGxvd2VyIGluZGV4LlxuXHQgKi9cblx0cHVibGljIGFkZEVmZmVjdE1ldGhvZEF0KG1ldGhvZDpFZmZlY3RNZXRob2RCYXNlLCBpbmRleDpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KG5ldyBNZXRob2RWTyhtZXRob2QpLCB0cnVlLCBpbmRleCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBlZmZlY3QgbWV0aG9kIGZyb20gdGhlIG1hdGVyaWFsLlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgcmVtb3ZlZC5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVFZmZlY3RNZXRob2QobWV0aG9kOkVmZmVjdE1ldGhvZEJhc2UpXG5cdHtcblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk8gPSB0aGlzLmdldERlcGVuZGVuY3lGb3JNZXRob2QobWV0aG9kKTtcblxuXHRcdGlmIChtZXRob2RWTyAhPSBudWxsKVxuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeShtZXRob2RWTywgdHJ1ZSk7XG5cdH1cblxuXG5cdHByaXZhdGUgZ2V0RGVwZW5kZW5jeUZvck1ldGhvZChtZXRob2Q6RWZmZWN0TWV0aG9kQmFzZSk6TWV0aG9kVk9cblx0e1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyArK2kpXG5cdFx0XHRpZiAodGhpcy5faU1ldGhvZFZPc1tpXS5tZXRob2QgPT0gbWV0aG9kKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5faU1ldGhvZFZPc1tpXTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcGVyLXBpeGVsIG5vcm1hbHMuIERlZmF1bHRzIHRvIE5vcm1hbEJhc2ljTWV0aG9kLlxuXHQgKi9cblx0cHVibGljIGdldCBub3JtYWxNZXRob2QoKTpOb3JtYWxCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lOb3JtYWxNZXRob2RWTz8gPE5vcm1hbEJhc2ljTWV0aG9kPiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgbm9ybWFsTWV0aG9kKHZhbHVlOk5vcm1hbEJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTyAmJiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pTm9ybWFsTWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faU5vcm1hbE1ldGhvZFZPID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHRoaXMuX2lOb3JtYWxNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lOb3JtYWxNZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgYW1iaWVudCBsaWdodGluZyBjb250cmlidXRpb24uIERlZmF1bHRzIHRvIEFtYmllbnRCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgYW1iaWVudE1ldGhvZCgpOkFtYmllbnRCYXNpY01ldGhvZFxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8/IDxBbWJpZW50QmFzaWNNZXRob2Q+IHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubWV0aG9kIDogbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW1iaWVudE1ldGhvZCh2YWx1ZTpBbWJpZW50QmFzaWNNZXRob2QpXG5cdHtcblx0XHRpZiAodGhpcy5faUFtYmllbnRNZXRob2RWTyAmJiB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPKSB7XG5cdFx0XHR0aGlzLl9yZW1vdmVEZXBlbmRlbmN5KHRoaXMuX2lBbWJpZW50TWV0aG9kVk8pO1xuXHRcdFx0dGhpcy5faUFtYmllbnRNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pQW1iaWVudE1ldGhvZFZPID0gbmV3IE1ldGhvZFZPKHZhbHVlKTtcblx0XHRcdHRoaXMuX2FkZERlcGVuZGVuY3kodGhpcy5faUFtYmllbnRNZXRob2RWTyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdXNlZCB0byByZW5kZXIgc2hhZG93cyBjYXN0IG9uIHRoaXMgc3VyZmFjZSwgb3IgbnVsbCBpZiBubyBzaGFkb3dzIGFyZSB0byBiZSByZW5kZXJlZC4gRGVmYXVsdHMgdG8gbnVsbC5cblx0ICovXG5cdHB1YmxpYyBnZXQgc2hhZG93TWV0aG9kKCk6U2hhZG93TWFwTWV0aG9kQmFzZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2lTaGFkb3dNZXRob2RWTz8gPFNoYWRvd01hcE1ldGhvZEJhc2U+IHRoaXMuX2lTaGFkb3dNZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBzaGFkb3dNZXRob2QodmFsdWU6U2hhZG93TWFwTWV0aG9kQmFzZSlcblx0e1xuXHRcdGlmICh0aGlzLl9pU2hhZG93TWV0aG9kVk8gJiYgdGhpcy5faVNoYWRvd01ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pU2hhZG93TWV0aG9kVk8pIHtcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faVNoYWRvd01ldGhvZFZPKTtcblx0XHRcdHRoaXMuX2lTaGFkb3dNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pU2hhZG93TWV0aG9kVk8gPSBuZXcgTWV0aG9kVk8odmFsdWUpO1xuXHRcdFx0dGhpcy5fYWRkRGVwZW5kZW5jeSh0aGlzLl9pU2hhZG93TWV0aG9kVk8pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIGRpZmZ1c2UgbGlnaHRpbmcgY29udHJpYnV0aW9uLiBEZWZhdWx0cyB0byBEaWZmdXNlQmFzaWNNZXRob2QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGRpZmZ1c2VNZXRob2QoKTpEaWZmdXNlQmFzaWNNZXRob2Rcblx0e1xuXHRcdHJldHVybiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPPyA8RGlmZnVzZUJhc2ljTWV0aG9kPiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm1ldGhvZCA6IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGRpZmZ1c2VNZXRob2QodmFsdWU6RGlmZnVzZUJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8gJiYgdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPKTtcblx0XHRcdHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8gPSBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5faURpZmZ1c2VNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgdGhlIHNwZWN1bGFyIGxpZ2h0aW5nIGNvbnRyaWJ1dGlvbi4gRGVmYXVsdHMgdG8gU3BlY3VsYXJCYXNpY01ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBnZXQgc3BlY3VsYXJNZXRob2QoKTpTcGVjdWxhckJhc2ljTWV0aG9kXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8/IDxTcGVjdWxhckJhc2ljTWV0aG9kPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QgOiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNldCBzcGVjdWxhck1ldGhvZCh2YWx1ZTpTcGVjdWxhckJhc2ljTWV0aG9kKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPICYmIHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPLm1ldGhvZCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTykge1xuXHRcdFx0dGhpcy5fcmVtb3ZlRGVwZW5kZW5jeSh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyk7XG5cdFx0XHR0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyA9IG5ldyBNZXRob2RWTyh2YWx1ZSk7XG5cdFx0XHR0aGlzLl9hZGREZXBlbmRlbmN5KHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHN1cGVyLmRpc3Bvc2UoKTtcblxuXHRcdHdoaWxlICh0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aClcblx0XHRcdHRoaXMuX3JlbW92ZURlcGVuZGVuY3kodGhpcy5faU1ldGhvZFZPc1swXSk7XG5cblx0XHR0aGlzLl9pTWV0aG9kVk9zID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbnkgbWV0aG9kJ3Mgc2hhZGVyIGNvZGUgaXMgaW52YWxpZGF0ZWQuXG5cdCAqL1xuXHRwcml2YXRlIG9uU2hhZGVySW52YWxpZGF0ZWQoZXZlbnQ6U2hhZGluZ01ldGhvZEV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fcEludmFsaWRhdGVQYXNzKCk7XG5cdH1cblxuXHQvLyBSRU5ERVIgTE9PUFxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pQWN0aXZhdGUocGFzczpNYXRlcmlhbFBhc3NEYXRhLCBzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSlcblx0e1xuXHRcdHN1cGVyLl9pQWN0aXZhdGUocGFzcywgc3RhZ2UsIGNhbWVyYSk7XG5cblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk87XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdFx0bWV0aG9kVk8ubWV0aG9kLmlBY3RpdmF0ZShwYXNzLnNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHN0YWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHJlbmRlcmFibGVcblx0ICogQHBhcmFtIHN0YWdlXG5cdCAqIEBwYXJhbSBjYW1lcmFcblx0ICovXG5cdHB1YmxpYyBzZXRSZW5kZXJTdGF0ZShwYXNzOk1hdGVyaWFsUGFzc0RhdGEsIHJlbmRlcmFibGU6UmVuZGVyYWJsZUJhc2UsIHN0YWdlOlN0YWdlLCBjYW1lcmE6Q2FtZXJhLCB2aWV3UHJvamVjdGlvbjpNYXRyaXgzRClcblx0e1xuXHRcdHN1cGVyLnNldFJlbmRlclN0YXRlKHBhc3MsIHJlbmRlcmFibGUsIHN0YWdlLCBjYW1lcmEsIHZpZXdQcm9qZWN0aW9uKTtcblxuXHRcdHZhciBtZXRob2RWTzpNZXRob2RWTztcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0XHRtZXRob2RWTyA9IHRoaXMuX2lNZXRob2RWT3NbaV07XG5cdFx0XHRpZiAobWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0XHRtZXRob2RWTy5tZXRob2QuaVNldFJlbmRlclN0YXRlKHBhc3Muc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgcmVuZGVyYWJsZSwgc3RhZ2UsIGNhbWVyYSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0RG9jXG5cdCAqL1xuXHRwdWJsaWMgX2lEZWFjdGl2YXRlKHBhc3M6TWF0ZXJpYWxQYXNzRGF0YSwgc3RhZ2U6U3RhZ2UpXG5cdHtcblx0XHRzdXBlci5faURlYWN0aXZhdGUocGFzcywgc3RhZ2UpO1xuXG5cdFx0dmFyIG1ldGhvZFZPOk1ldGhvZFZPO1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdG1ldGhvZFZPID0gdGhpcy5faU1ldGhvZFZPc1tpXTtcblx0XHRcdGlmIChtZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRcdG1ldGhvZFZPLm1ldGhvZC5pRGVhY3RpdmF0ZShwYXNzLnNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHN0YWdlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgX2lJbmNsdWRlRGVwZW5kZW5jaWVzKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdClcblx0e1xuXHRcdHZhciBpOm51bWJlcjtcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSlcblx0XHRcdHRoaXMuc2V0dXBBbmRDb3VudERlcGVuZGVuY2llcyhzaGFkZXJPYmplY3QsIHRoaXMuX2lNZXRob2RWT3NbaV0pO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgKytpKVxuXHRcdFx0dGhpcy5faU1ldGhvZFZPc1tpXS51c2VNZXRob2QgPSB0aGlzLl9pTWV0aG9kVk9zW2ldLm1ldGhvZC5pSXNVc2VkKHNoYWRlck9iamVjdCk7XG5cblx0XHRzdXBlci5faUluY2x1ZGVEZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0KTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIENvdW50cyB0aGUgZGVwZW5kZW5jaWVzIGZvciBhIGdpdmVuIG1ldGhvZC5cblx0ICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNvdW50IHRoZSBkZXBlbmRlbmNpZXMgZm9yLlxuXHQgKiBAcGFyYW0gbWV0aG9kVk8gVGhlIG1ldGhvZCdzIGRhdGEgZm9yIHRoaXMgbWF0ZXJpYWwuXG5cdCAqL1xuXHRwcml2YXRlIHNldHVwQW5kQ291bnREZXBlbmRlbmNpZXMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIG1ldGhvZFZPOk1ldGhvZFZPKVxuXHR7XG5cdFx0bWV0aG9kVk8ucmVzZXQoKTtcblxuXHRcdG1ldGhvZFZPLm1ldGhvZC5pSW5pdFZPKHNoYWRlck9iamVjdCwgbWV0aG9kVk8pO1xuXG5cdFx0aWYgKG1ldGhvZFZPLm5lZWRzUHJvamVjdGlvbilcblx0XHRcdHNoYWRlck9iamVjdC5wcm9qZWN0aW9uRGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNHbG9iYWxWZXJ0ZXhQb3MpIHtcblxuXHRcdFx0c2hhZGVyT2JqZWN0Lmdsb2JhbFBvc0RlcGVuZGVuY2llcysrO1xuXG5cdFx0XHRpZiAobWV0aG9kVk8ubmVlZHNHbG9iYWxGcmFnbWVudFBvcylcblx0XHRcdFx0c2hhZGVyT2JqZWN0LnVzZXNHbG9iYWxQb3NGcmFnbWVudCA9IHRydWU7XG5cblx0XHR9IGVsc2UgaWYgKG1ldGhvZFZPLm5lZWRzR2xvYmFsRnJhZ21lbnRQb3MpIHtcblx0XHRcdHNoYWRlck9iamVjdC5nbG9iYWxQb3NEZXBlbmRlbmNpZXMrKztcblx0XHRcdHNoYWRlck9iamVjdC51c2VzR2xvYmFsUG9zRnJhZ21lbnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChtZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRzaGFkZXJPYmplY3Qubm9ybWFsRGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNUYW5nZW50cylcblx0XHRcdHNoYWRlck9iamVjdC50YW5nZW50RGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0c2hhZGVyT2JqZWN0LnZpZXdEaXJEZXBlbmRlbmNpZXMrKztcblxuXHRcdGlmIChtZXRob2RWTy5uZWVkc1VWKVxuXHRcdFx0c2hhZGVyT2JqZWN0LnV2RGVwZW5kZW5jaWVzKys7XG5cblx0XHRpZiAobWV0aG9kVk8ubmVlZHNTZWNvbmRhcnlVVilcblx0XHRcdHNoYWRlck9iamVjdC5zZWNvbmRhcnlVVkRlcGVuZGVuY2llcysrO1xuXHR9XG5cblx0cHVibGljIF9pR2V0UHJlTGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPICYmIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLm1ldGhvZC5pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTyAmJiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QuaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0aWYgKHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPICYmIHRoaXMuX2lTcGVjdWxhck1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldFByZUxpZ2h0aW5nRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLl9pQW1iaWVudE1ldGhvZFZPICYmIHRoaXMuX2lBbWJpZW50TWV0aG9kVk8udXNlTWV0aG9kKSB7XG5cdFx0XHRjb2RlICs9IHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubWV0aG9kLmlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pQW1iaWVudE1ldGhvZFZPLCBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHRpZiAodGhpcy5faUFtYmllbnRNZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50KTtcblxuXHRcdFx0aWYgKHRoaXMuX2lBbWJpZW50TWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPICYmIHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8udXNlTWV0aG9kKVxuXHRcdFx0Y29kZSArPSAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSg8U2hhZGVyTGlnaHRpbmdPYmplY3Q+IHNoYWRlck9iamVjdCwgdGhpcy5faURpZmZ1c2VNZXRob2RWTywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblxuXHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyAmJiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRjb2RlICs9ICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFByZUxpZ2h0aW5nQ29kZSg8U2hhZGVyTGlnaHRpbmdPYmplY3Q+IHNoYWRlck9iamVjdCwgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8sIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldFBlckxpZ2h0RGlmZnVzZUZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyTGlnaHRpbmdPYmplY3QsIGxpZ2h0RGlyUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgZGlmZnVzZUNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudENvZGVQZXJMaWdodChzaGFkZXJPYmplY3QsIHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8sIGxpZ2h0RGlyUmVnLCBkaWZmdXNlQ29sb3JSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJMaWdodFNwZWN1bGFyRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgbGlnaHREaXJSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBzcGVjdWxhckNvbG9yUmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kKS5pR2V0RnJhZ21lbnRDb2RlUGVyTGlnaHQoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgbGlnaHREaXJSZWcsIHNwZWN1bGFyQ29sb3JSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJQcm9iZURpZmZ1c2VGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCB0ZXhSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB3ZWlnaHRSZWc6c3RyaW5nLCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm1ldGhvZCkuaUdldEZyYWdtZW50Q29kZVBlclByb2JlKHNoYWRlck9iamVjdCwgdGhpcy5faURpZmZ1c2VNZXRob2RWTywgdGV4UmVnLCB3ZWlnaHRSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQZXJQcm9iZVNwZWN1bGFyRnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgdGV4UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgd2VpZ2h0UmVnOnN0cmluZywgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8ubWV0aG9kKS5pR2V0RnJhZ21lbnRDb2RlUGVyUHJvYmUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgdGV4UmVnLCB3ZWlnaHRSZWcsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQb3N0TGlnaHRpbmdWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdDpTaGFkZXJMaWdodGluZ09iamVjdCwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5faVNoYWRvd01ldGhvZFZPKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pU2hhZG93TWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faVNoYWRvd01ldGhvZFZPLCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHRwdWJsaWMgX2lHZXRQb3N0TGlnaHRpbmdGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0LCByZWdpc3RlckNhY2hlOlNoYWRlclJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVyczpTaGFkZXJSZWdpc3RlckRhdGEpOnN0cmluZ1xuXHR7XG5cdFx0dmFyIGNvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRcdGlmIChzaGFkZXJPYmplY3QudXNlQWxwaGFQcmVtdWx0aXBsaWVkICYmIHRoaXMuX3BFbmFibGVCbGVuZGluZykge1xuXHRcdFx0Y29kZSArPSBcImFkZCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIi53LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIi53LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5jb21tb25zICsgXCIuelxcblwiICtcblx0XHRcdFx0XCJkaXYgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIueHl6LCBcIiArIHNoYXJlZFJlZ2lzdGVycy5zaGFkZWRUYXJnZXQgKyBcIiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIud1xcblwiICtcblx0XHRcdFx0XCJzdWIgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIudywgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCIudywgXCIgKyBzaGFyZWRSZWdpc3RlcnMuY29tbW9ucyArIFwiLnpcXG5cIiArXG5cdFx0XHRcdFwic2F0IFwiICsgc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCArIFwiLnh5eiwgXCIgKyBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0ICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faVNoYWRvd01ldGhvZFZPKVxuXHRcdFx0Y29kZSArPSB0aGlzLl9pU2hhZG93TWV0aG9kVk8ubWV0aG9kLmlHZXRGcmFnbWVudENvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU2hhZG93TWV0aG9kVk8sIHNoYXJlZFJlZ2lzdGVycy5zaGFkb3dUYXJnZXQsIHJlZ2lzdGVyQ2FjaGUsIHNoYXJlZFJlZ2lzdGVycyk7XG5cblx0XHRpZiAodGhpcy5faURpZmZ1c2VNZXRob2RWTyAmJiB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLnVzZU1ldGhvZCkge1xuXHRcdFx0Y29kZSArPSAoPExpZ2h0aW5nTWV0aG9kQmFzZT4gdGhpcy5faURpZmZ1c2VNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLCBzaGFyZWRSZWdpc3RlcnMuc2hhZGVkVGFyZ2V0LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0XHQvLyByZXNvbHZlIG90aGVyIGRlcGVuZGVuY2llcyBhcyB3ZWxsP1xuXHRcdFx0aWYgKHRoaXMuX2lEaWZmdXNlTWV0aG9kVk8ubmVlZHNOb3JtYWxzKVxuXHRcdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy5ub3JtYWxGcmFnbWVudCk7XG5cblx0XHRcdGlmICh0aGlzLl9pRGlmZnVzZU1ldGhvZFZPLm5lZWRzVmlldylcblx0XHRcdFx0cmVnaXN0ZXJDYWNoZS5yZW1vdmVGcmFnbWVudFRlbXBVc2FnZShzaGFyZWRSZWdpc3RlcnMudmlld0RpckZyYWdtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faVNwZWN1bGFyTWV0aG9kVk8gJiYgdGhpcy5faVNwZWN1bGFyTWV0aG9kVk8udXNlTWV0aG9kKSB7XG5cdFx0XHRjb2RlICs9ICg8TGlnaHRpbmdNZXRob2RCYXNlPiB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5tZXRob2QpLmlHZXRGcmFnbWVudFBvc3RMaWdodGluZ0NvZGUoc2hhZGVyT2JqZWN0LCB0aGlzLl9pU3BlY3VsYXJNZXRob2RWTywgc2hhcmVkUmVnaXN0ZXJzLnNoYWRlZFRhcmdldCwgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0XHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50KTtcblx0XHRcdGlmICh0aGlzLl9pU3BlY3VsYXJNZXRob2RWTy5uZWVkc1ZpZXcpXG5cdFx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLnZpZXdEaXJGcmFnbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2lTaGFkb3dNZXRob2RWTylcblx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnaXN0ZXJzLnNoYWRvd1RhcmdldCk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgYWxsb3dlZCBpbiB0YW5nZW50IHNwYWNlLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgbm8gb2JqZWN0LXNwYWNlXG5cdCAqIGRlcGVuZGVuY2llcyBleGlzdC5cblx0ICovXG5cdHB1YmxpYyBfcFVzZXNUYW5nZW50U3BhY2Uoc2hhZGVyT2JqZWN0OlNoYWRlckxpZ2h0aW5nT2JqZWN0KTpib29sZWFuXG5cdHtcblx0XHRpZiAoc2hhZGVyT2JqZWN0LnVzZXNQcm9iZXMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR2YXIgbWV0aG9kVk86TWV0aG9kVk87XG5cdFx0dmFyIGxlbjpudW1iZXIgPSB0aGlzLl9pTWV0aG9kVk9zLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZCAmJiAhbWV0aG9kVk8ubWV0aG9kLmlVc2VzVGFuZ2VudFNwYWNlKCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgbm9ybWFscyBhcmUgb3V0cHV0IGluIHRhbmdlbnQgc3BhY2UuXG5cdCAqL1xuXHRwdWJsaWMgX3BPdXRwdXRzVGFuZ2VudE5vcm1hbHMoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiAoPE5vcm1hbEJhc2ljTWV0aG9kPiB0aGlzLl9pTm9ybWFsTWV0aG9kVk8ubWV0aG9kKS5pT3V0cHV0c1RhbmdlbnROb3JtYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IG5vcm1hbHMgYXJlIG91dHB1dCBieSB0aGUgcGFzcy5cblx0ICovXG5cdHB1YmxpYyBfcE91dHB1dHNOb3JtYWxzKHNoYWRlck9iamVjdDpTaGFkZXJPYmplY3RCYXNlKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faU5vcm1hbE1ldGhvZFZPICYmIHRoaXMuX2lOb3JtYWxNZXRob2RWTy51c2VNZXRob2Q7XG5cdH1cblxuXG5cdHB1YmxpYyBfaUdldE5vcm1hbFZlcnRleENvZGUoc2hhZGVyT2JqZWN0OlNoYWRlck9iamVjdEJhc2UsIHJlZ2lzdGVyQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5faU5vcm1hbE1ldGhvZFZPLm1ldGhvZC5pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lOb3JtYWxNZXRob2RWTywgcmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnaXN0ZXJzKTtcblx0fVxuXG5cdHB1YmxpYyBfaUdldE5vcm1hbEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnaXN0ZXJDYWNoZTpTaGFkZXJSZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnM6U2hhZGVyUmVnaXN0ZXJEYXRhKTpzdHJpbmdcblx0e1xuXHRcdHZhciBjb2RlOnN0cmluZyA9IHRoaXMuX2lOb3JtYWxNZXRob2RWTy5tZXRob2QuaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3QsIHRoaXMuX2lOb3JtYWxNZXRob2RWTywgc2hhcmVkUmVnaXN0ZXJzLm5vcm1hbEZyYWdtZW50LCByZWdpc3RlckNhY2hlLCBzaGFyZWRSZWdpc3RlcnMpO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc1ZpZXcpXG5cdFx0XHRyZWdpc3RlckNhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy52aWV3RGlyRnJhZ21lbnQpO1xuXG5cdFx0aWYgKHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc0dsb2JhbEZyYWdtZW50UG9zIHx8IHRoaXMuX2lOb3JtYWxNZXRob2RWTy5uZWVkc0dsb2JhbFZlcnRleFBvcylcblx0XHRcdHJlZ2lzdGVyQ2FjaGUucmVtb3ZlVmVydGV4VGVtcFVzYWdlKHNoYXJlZFJlZ2lzdGVycy5nbG9iYWxQb3NpdGlvblZlcnRleCk7XG5cblx0XHRyZXR1cm4gY29kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIF9pR2V0VmVydGV4Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBtZXRob2RWTzpNZXRob2RWTztcblx0XHR2YXIgbGVuOm51bWJlciA9IHRoaXMuX2lNZXRob2RWT3MubGVuZ3RoO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gbGVuIC0gdGhpcy5fbnVtRWZmZWN0RGVwZW5kZW5jaWVzOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdG1ldGhvZFZPID0gdGhpcy5faU1ldGhvZFZPc1tpXTtcblx0XHRcdGlmIChtZXRob2RWTy51c2VNZXRob2QpIHtcblx0XHRcdFx0Y29kZSArPSBtZXRob2RWTy5tZXRob2QuaUdldFZlcnRleENvZGUoc2hhZGVyT2JqZWN0LCBtZXRob2RWTywgcmVnQ2FjaGUsIHNoYXJlZFJlZyk7XG5cblx0XHRcdFx0aWYgKG1ldGhvZFZPLm5lZWRzR2xvYmFsVmVydGV4UG9zIHx8IG1ldGhvZFZPLm5lZWRzR2xvYmFsRnJhZ21lbnRQb3MpXG5cdFx0XHRcdFx0cmVnQ2FjaGUucmVtb3ZlVmVydGV4VGVtcFVzYWdlKHNoYXJlZFJlZy5nbG9iYWxQb3NpdGlvblZlcnRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPICYmIHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPLnVzZU1ldGhvZClcblx0XHRcdGNvZGUgKz0gdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8ubWV0aG9kLmlHZXRWZXJ0ZXhDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8sIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBfaUdldEZyYWdtZW50Q29kZShzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZSwgcmVnQ2FjaGU6U2hhZGVyUmVnaXN0ZXJDYWNoZSwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSk6c3RyaW5nXG5cdHtcblx0XHR2YXIgY29kZTpzdHJpbmcgPSBcIlwiO1xuXHRcdHZhciBhbHBoYVJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQ7XG5cblx0XHRpZiAodGhpcy5wcmVzZXJ2ZUFscGhhICYmIHRoaXMuX251bUVmZmVjdERlcGVuZGVuY2llcyA+IDApIHtcblx0XHRcdGFscGhhUmVnID0gcmVnQ2FjaGUuZ2V0RnJlZUZyYWdtZW50U2luZ2xlVGVtcCgpO1xuXHRcdFx0cmVnQ2FjaGUuYWRkRnJhZ21lbnRUZW1wVXNhZ2VzKGFscGhhUmVnLCAxKTtcblx0XHRcdGNvZGUgKz0gXCJtb3YgXCIgKyBhbHBoYVJlZyArIFwiLCBcIiArIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQgKyBcIi53XFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIG1ldGhvZFZPOk1ldGhvZFZPO1xuXHRcdHZhciBsZW46bnVtYmVyID0gdGhpcy5faU1ldGhvZFZPcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSBsZW4gLSB0aGlzLl9udW1FZmZlY3REZXBlbmRlbmNpZXM7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0bWV0aG9kVk8gPSB0aGlzLl9pTWV0aG9kVk9zW2ldO1xuXHRcdFx0aWYgKG1ldGhvZFZPLnVzZU1ldGhvZCkge1xuXHRcdFx0XHRjb2RlICs9IG1ldGhvZFZPLm1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdCwgbWV0aG9kVk8sIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQsIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0XHRcdGlmIChtZXRob2RWTy5uZWVkc05vcm1hbHMpXG5cdFx0XHRcdFx0cmVnQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2Uoc2hhcmVkUmVnLm5vcm1hbEZyYWdtZW50KTtcblxuXHRcdFx0XHRpZiAobWV0aG9kVk8ubmVlZHNWaWV3KVxuXHRcdFx0XHRcdHJlZ0NhY2hlLnJlbW92ZUZyYWdtZW50VGVtcFVzYWdlKHNoYXJlZFJlZy52aWV3RGlyRnJhZ21lbnQpO1xuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucHJlc2VydmVBbHBoYSAmJiB0aGlzLl9udW1FZmZlY3REZXBlbmRlbmNpZXMgPiAwKSB7XG5cdFx0XHRjb2RlICs9IFwibW92IFwiICsgc2hhcmVkUmVnLnNoYWRlZFRhcmdldCArIFwiLncsIFwiICsgYWxwaGFSZWcgKyBcIlxcblwiO1xuXHRcdFx0cmVnQ2FjaGUucmVtb3ZlRnJhZ21lbnRUZW1wVXNhZ2UoYWxwaGFSZWcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTyAmJiB0aGlzLl9pQ29sb3JUcmFuc2Zvcm1NZXRob2RWTy51c2VNZXRob2QpXG5cdFx0XHRjb2RlICs9IHRoaXMuX2lDb2xvclRyYW5zZm9ybU1ldGhvZFZPLm1ldGhvZC5pR2V0RnJhZ21lbnRDb2RlKHNoYWRlck9iamVjdCwgdGhpcy5faUNvbG9yVHJhbnNmb3JtTWV0aG9kVk8sIHNoYXJlZFJlZy5zaGFkZWRUYXJnZXQsIHJlZ0NhY2hlLCBzaGFyZWRSZWcpO1xuXG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzaGFkZXIgdXNlcyBhbnkgc2hhZG93cy5cblx0ICovXG5cdHB1YmxpYyBfaVVzZXNTaGFkb3dzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIEJvb2xlYW4odGhpcy5faVNoYWRvd01ldGhvZFZPIHx8IHRoaXMubGlnaHRQaWNrZXIuY2FzdGluZ0RpcmVjdGlvbmFsTGlnaHRzLmxlbmd0aCA+IDAgfHwgdGhpcy5saWdodFBpY2tlci5jYXN0aW5nUG9pbnRMaWdodHMubGVuZ3RoID4gMCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNoYWRlciB1c2VzIGFueSBzcGVjdWxhciBjb21wb25lbnQuXG5cdCAqL1xuXHRwdWJsaWMgX2lVc2VzU3BlY3VsYXIoKTpib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLl9pU3BlY3VsYXJNZXRob2RWTyk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVNZXRob2RQYXNzOyJdfQ== \ No newline at end of file diff --git a/lib/materials/passes/TriangleMethodPass.ts b/lib/materials/passes/TriangleMethodPass.ts index ad4b71ed..82c5b9d6 100644 --- a/lib/materials/passes/TriangleMethodPass.ts +++ b/lib/materials/passes/TriangleMethodPass.ts @@ -9,9 +9,9 @@ import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); import ShadingMethodEvent = require("awayjs-stagegl/lib/events/ShadingMethodEvent"); import MethodVO = require("awayjs-stagegl/lib/materials/compilation/MethodVO"); import ShaderLightingObject = require("awayjs-stagegl/lib/materials/compilation/ShaderLightingObject"); diff --git a/lib/materials/utils/ShaderCompilerHelper.js b/lib/materials/utils/ShaderCompilerHelper.js index b0eaa5a3..cdefe612 100755 --- a/lib/materials/utils/ShaderCompilerHelper.js +++ b/lib/materials/utils/ShaderCompilerHelper.js @@ -1,4 +1,4 @@ -var ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); +var ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); var ShaderCompilerHelper = (function () { function ShaderCompilerHelper() { } @@ -65,4 +65,4 @@ var ShaderCompilerHelper = (function () { })(); module.exports = ShaderCompilerHelper; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvc2hhZGVyY29tcGlsZXJoZWxwZXIudHMiXSwibmFtZXMiOlsiU2hhZGVyQ29tcGlsZXJIZWxwZXIiLCJTaGFkZXJDb21waWxlckhlbHBlci5jb25zdHJ1Y3RvciIsIlNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSIsIlNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleEN1YmVTYW1wbGVDb2RlIiwiU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxzQkFBc0IsV0FBWSx3REFBd0QsQ0FBQyxDQUFDO0FBSW5HLElBQU0sb0JBQW9CO0lBQTFCQSxTQUFNQSxvQkFBb0JBO0lBcUUxQkMsQ0FBQ0E7SUFuRUFEOzs7Ozs7Ozs7OztPQVdHQTtJQUNXQSx1Q0FBa0JBLEdBQWhDQSxVQUFpQ0EsU0FBK0JBLEVBQUVBLFNBQTRCQSxFQUFFQSxRQUE4QkEsRUFBRUEsT0FBd0JBLEVBQUVBLE1BQWNBLEVBQUVBLE1BQWNBLEVBQUVBLE9BQWVBLEVBQUVBLEtBQWtDQSxFQUFFQSxTQUF1QkE7UUFBM0RFLHFCQUFrQ0EsR0FBbENBLFlBQWtDQTtRQUFFQSx5QkFBdUJBLEdBQXZCQSxnQkFBdUJBO1FBRXJRQSxJQUFJQSxJQUFJQSxHQUFVQSxTQUFTQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFFQSxNQUFNQSxHQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtRQUN4REEsSUFBSUEsTUFBTUEsR0FBVUEsb0JBQW9CQSxDQUFDQSx5QkFBeUJBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1FBQzVFQSxJQUFJQSxhQUFhQSxHQUFXQSxPQUFPQSxJQUFJQSxPQUFPQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUMxREEsSUFBSUEsTUFBTUEsR0FBVUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBRUEsQ0FBQ0EsYUFBYUEsR0FBRUEsa0JBQWtCQSxHQUFHQSxRQUFRQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxHQUFFQSxvQkFBb0JBLEdBQUdBLFNBQVNBLENBQUNBLENBQUNBO1FBRWpJQSxFQUFFQSxDQUFDQSxDQUFDQSxLQUFLQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUNqQkEsS0FBS0EsR0FBR0EsU0FBU0EsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFFN0JBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLFFBQVFBLEdBQUdBLE9BQU9BLEdBQUdBLE1BQU1BLEdBQUdBLEdBQUdBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLENBQUNBO0lBRTdHQSxDQUFDQTtJQUdERjs7Ozs7Ozs7O09BU0dBO0lBQ1dBLHlDQUFvQkEsR0FBbENBLFVBQW1DQSxTQUErQkEsRUFBRUEsUUFBOEJBLEVBQUVBLE9BQXdCQSxFQUFFQSxNQUFjQSxFQUFFQSxPQUFlQSxFQUFFQSxLQUEyQkE7UUFFekxHLElBQUlBLE1BQWFBLENBQUNBO1FBQ2xCQSxJQUFJQSxNQUFNQSxHQUFVQSxvQkFBb0JBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7UUFDNUVBLElBQUlBLGFBQWFBLEdBQVdBLE9BQU9BLElBQUlBLE9BQU9BLENBQUNBLFVBQVVBLENBQUNBO1FBQzFEQSxJQUFJQSxNQUFNQSxHQUFVQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFFQSxDQUFDQSxhQUFhQSxHQUFFQSxrQkFBa0JBLEdBQUdBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEdBQUVBLG9CQUFvQkEsR0FBR0EsU0FBU0EsQ0FBQ0EsQ0FBQ0E7UUFFaklBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLFFBQVFBLEdBQUdBLFNBQVNBLEdBQUdBLE1BQU1BLEdBQUdBLE1BQU1BLEdBQUdBLEtBQUtBLENBQUNBO0lBQ2xHQSxDQUFDQTtJQUVESDs7Ozs7O09BTUdBO0lBQ1dBLDhDQUF5QkEsR0FBdkNBLFVBQXdDQSxPQUF3QkE7UUFFL0RJLE1BQU1BLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1lBQ3hCQSxLQUFLQSxzQkFBc0JBLENBQUNBLFVBQVVBO2dCQUNyQ0EsTUFBTUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7Z0JBQ2ZBLEtBQUtBLENBQUNBO1lBQ1BBLEtBQUtBLHNCQUFzQkEsQ0FBQ0EsZ0JBQWdCQTtnQkFDM0NBLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBO2dCQUNmQSxLQUFLQSxDQUFDQTtZQUNQQTtnQkFDQ0EsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7UUFDWkEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFDRkosMkJBQUNBO0FBQURBLENBckVBLEFBcUVDQSxJQUFBO0FBRUQsQUFBOEIsaUJBQXJCLG9CQUFvQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3N0YWdlZ2wvQ29udGV4dEdMVGV4dHVyZUZvcm1hdFwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckRhdGFcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlclJlZ2lzdGVyRGF0YVwiKTtcbmltcG9ydCBTaGFkZXJSZWdpc3RlckVsZW1lbnRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckVsZW1lbnRcIik7XG5cbmNsYXNzIFNoYWRlckNvbXBpbGVySGVscGVyXG57XG5cdC8qKlxuXHQgKiBBIGhlbHBlciBtZXRob2QgdGhhdCBnZW5lcmF0ZXMgc3RhbmRhcmQgY29kZSBmb3Igc2FtcGxpbmcgZnJvbSBhIHRleHR1cmUgdXNpbmcgdGhlIG5vcm1hbCB1diBjb29yZGluYXRlcy5cblx0ICogQHBhcmFtIHZvIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHNoYXJlZFJlZyBUaGUgc2hhcmVkIHJlZ2lzdGVyIG9iamVjdCBmb3IgdGhlIHNoYWRlci5cblx0ICogQHBhcmFtIGlucHV0UmVnIFRoZSB0ZXh0dXJlIHN0cmVhbSByZWdpc3Rlci5cblx0ICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1cmUgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gc2xvdC5cblx0ICogQHBhcmFtIHV2UmVnIEFuIG9wdGlvbmFsIHV2IHJlZ2lzdGVyIGlmIGNvb3JkaW5hdGVzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmltYXJ5IHV2IGNvb3JkaW5hdGVzIGFyZSB0byBiZSB1c2VkLlxuXHQgKiBAcGFyYW0gZm9yY2VXcmFwIElmIHRydWUsIHRleHR1cmUgd3JhcHBpbmcgaXMgZW5hYmxlZCByZWdhcmRsZXNzIG9mIHRoZSBtYXRlcmlhbCBzZXR0aW5nLlxuXHQgKiBAcmV0dXJuIFRoZSBmcmFnbWVudCBjb2RlIHRoYXQgcGVyZm9ybXMgdGhlIHNhbXBsaW5nLlxuXHQgKlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFRleDJEU2FtcGxlQ29kZSh0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBzaGFyZWRSZWc6U2hhZGVyUmVnaXN0ZXJEYXRhLCBpbnB1dFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHRleHR1cmU6VGV4dHVyZVByb3h5QmFzZSwgc21vb3RoOmJvb2xlYW4sIHJlcGVhdDpib29sZWFuLCBtaXBtYXBzOmJvb2xlYW4sIHV2UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCA9IG51bGwsIGZvcmNlV3JhcDpzdHJpbmcgPSBudWxsKTpzdHJpbmdcblx0e1xuXHRcdHZhciB3cmFwOnN0cmluZyA9IGZvcmNlV3JhcCB8fCAocmVwZWF0PyBcIndyYXBcIjpcImNsYW1wXCIpO1xuXHRcdHZhciBmb3JtYXQ6c3RyaW5nID0gU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSh0ZXh0dXJlKTtcblx0XHR2YXIgZW5hYmxlTWlwTWFwczpib29sZWFuID0gbWlwbWFwcyAmJiB0ZXh0dXJlLmhhc01pcG1hcHM7XG5cdFx0dmFyIGZpbHRlcjpzdHJpbmcgPSAoc21vb3RoKT8gKGVuYWJsZU1pcE1hcHM/IFwibGluZWFyLG1pcGxpbmVhclwiIDogXCJsaW5lYXJcIikgOiAoZW5hYmxlTWlwTWFwcz8gXCJuZWFyZXN0LG1pcG5lYXJlc3RcIiA6IFwibmVhcmVzdFwiKTtcblxuXHRcdGlmICh1dlJlZyA9PSBudWxsKVxuXHRcdFx0dXZSZWcgPSBzaGFyZWRSZWcudXZWYXJ5aW5nO1xuXG5cdFx0cmV0dXJuIFwidGV4IFwiICsgdGFyZ2V0UmVnICsgXCIsIFwiICsgdXZSZWcgKyBcIiwgXCIgKyBpbnB1dFJlZyArIFwiIDwyZCxcIiArIGZpbHRlciArIFwiLFwiICsgZm9ybWF0ICsgd3JhcCArIFwiPlxcblwiO1xuXG5cdH1cblxuXG5cdC8qKlxuXHQgKiBBIGhlbHBlciBtZXRob2QgdGhhdCBnZW5lcmF0ZXMgc3RhbmRhcmQgY29kZSBmb3Igc2FtcGxpbmcgZnJvbSBhIGN1YmUgdGV4dHVyZS5cblx0ICogQHBhcmFtIHZvIFRoZSBNZXRob2RWTyBvYmplY3QgbGlua2luZyB0aGlzIG1ldGhvZCB3aXRoIHRoZSBwYXNzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cblx0ICogQHBhcmFtIHRhcmdldFJlZyBUaGUgcmVnaXN0ZXIgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHNhbXBsZWQgY29sb3VyLlxuXHQgKiBAcGFyYW0gaW5wdXRSZWcgVGhlIHRleHR1cmUgc3RyZWFtIHJlZ2lzdGVyLlxuXHQgKiBAcGFyYW0gdGV4dHVyZSBUaGUgY3ViZSBtYXAgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gc2xvdC5cblx0ICogQHBhcmFtIHV2UmVnIFRoZSBkaXJlY3Rpb24gdmVjdG9yIHdpdGggd2hpY2ggdG8gc2FtcGxlIHRoZSBjdWJlIG1hcC5cblx0ICpcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRUZXhDdWJlU2FtcGxlQ29kZSh0YXJnZXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCBpbnB1dFJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQsIHRleHR1cmU6VGV4dHVyZVByb3h5QmFzZSwgc21vb3RoOmJvb2xlYW4sIG1pcG1hcHM6Ym9vbGVhbiwgdXZSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50KTpzdHJpbmdcblx0e1xuXHRcdHZhciBmaWx0ZXI6c3RyaW5nO1xuXHRcdHZhciBmb3JtYXQ6c3RyaW5nID0gU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSh0ZXh0dXJlKTtcblx0XHR2YXIgZW5hYmxlTWlwTWFwczpib29sZWFuID0gbWlwbWFwcyAmJiB0ZXh0dXJlLmhhc01pcG1hcHM7XG5cdFx0dmFyIGZpbHRlcjpzdHJpbmcgPSAoc21vb3RoKT8gKGVuYWJsZU1pcE1hcHM/IFwibGluZWFyLG1pcGxpbmVhclwiIDogXCJsaW5lYXJcIikgOiAoZW5hYmxlTWlwTWFwcz8gXCJuZWFyZXN0LG1pcG5lYXJlc3RcIiA6IFwibmVhcmVzdFwiKTtcblxuXHRcdHJldHVybiBcInRleCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHV2UmVnICsgXCIsIFwiICsgaW5wdXRSZWcgKyBcIiA8Y3ViZSxcIiArIGZvcm1hdCArIGZpbHRlciArIFwiPlxcblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHRleHR1cmUgZm9ybWF0IHN0cmluZyBmb3IgdGhlIHNhbXBsZSBpbnN0cnVjdGlvbi5cblx0ICogQHBhcmFtIHRleHR1cmUgVGhlIHRleHR1cmUgZm9yIHdoaWNoIHRvIGdldCB0aGUgZm9ybWF0IHN0cmluZy5cblx0ICogQHJldHVyblxuXHQgKlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldEZvcm1hdFN0cmluZ0ZvclRleHR1cmUodGV4dHVyZTpUZXh0dXJlUHJveHlCYXNlKTpzdHJpbmdcblx0e1xuXHRcdHN3aXRjaCAodGV4dHVyZS5mb3JtYXQpIHtcblx0XHRcdGNhc2UgQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5DT01QUkVTU0VEOlxuXHRcdFx0XHRyZXR1cm4gXCJkeHQxLFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQ29udGV4dEdMVGV4dHVyZUZvcm1hdC5DT01QUkVTU0VEX0FMUEhBOlxuXHRcdFx0XHRyZXR1cm4gXCJkeHQ1LFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgPSBTaGFkZXJDb21waWxlckhlbHBlcjsiXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvc2hhZGVyY29tcGlsZXJoZWxwZXIudHMiXSwibmFtZXMiOlsiU2hhZGVyQ29tcGlsZXJIZWxwZXIiLCJTaGFkZXJDb21waWxlckhlbHBlci5jb25zdHJ1Y3RvciIsIlNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleDJEU2FtcGxlQ29kZSIsIlNoYWRlckNvbXBpbGVySGVscGVyLmdldFRleEN1YmVTYW1wbGVDb2RlIiwiU2hhZGVyQ29tcGlsZXJIZWxwZXIuZ2V0Rm9ybWF0U3RyaW5nRm9yVGV4dHVyZSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBSTNGLElBQU0sb0JBQW9CO0lBQTFCQSxTQUFNQSxvQkFBb0JBO0lBcUUxQkMsQ0FBQ0E7SUFuRUFEOzs7Ozs7Ozs7OztPQVdHQTtJQUNXQSx1Q0FBa0JBLEdBQWhDQSxVQUFpQ0EsU0FBK0JBLEVBQUVBLFNBQTRCQSxFQUFFQSxRQUE4QkEsRUFBRUEsT0FBd0JBLEVBQUVBLE1BQWNBLEVBQUVBLE1BQWNBLEVBQUVBLE9BQWVBLEVBQUVBLEtBQWtDQSxFQUFFQSxTQUF1QkE7UUFBM0RFLHFCQUFrQ0EsR0FBbENBLFlBQWtDQTtRQUFFQSx5QkFBdUJBLEdBQXZCQSxnQkFBdUJBO1FBRXJRQSxJQUFJQSxJQUFJQSxHQUFVQSxTQUFTQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFFQSxNQUFNQSxHQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtRQUN4REEsSUFBSUEsTUFBTUEsR0FBVUEsb0JBQW9CQSxDQUFDQSx5QkFBeUJBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1FBQzVFQSxJQUFJQSxhQUFhQSxHQUFXQSxPQUFPQSxJQUFJQSxPQUFPQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUMxREEsSUFBSUEsTUFBTUEsR0FBVUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsR0FBRUEsQ0FBQ0EsYUFBYUEsR0FBRUEsa0JBQWtCQSxHQUFHQSxRQUFRQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxHQUFFQSxvQkFBb0JBLEdBQUdBLFNBQVNBLENBQUNBLENBQUNBO1FBRWpJQSxFQUFFQSxDQUFDQSxDQUFDQSxLQUFLQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUNqQkEsS0FBS0EsR0FBR0EsU0FBU0EsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFFN0JBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLFFBQVFBLEdBQUdBLE9BQU9BLEdBQUdBLE1BQU1BLEdBQUdBLEdBQUdBLEdBQUdBLE1BQU1BLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLENBQUNBO0lBRTdHQSxDQUFDQTtJQUdERjs7Ozs7Ozs7O09BU0dBO0lBQ1dBLHlDQUFvQkEsR0FBbENBLFVBQW1DQSxTQUErQkEsRUFBRUEsUUFBOEJBLEVBQUVBLE9BQXdCQSxFQUFFQSxNQUFjQSxFQUFFQSxPQUFlQSxFQUFFQSxLQUEyQkE7UUFFekxHLElBQUlBLE1BQWFBLENBQUNBO1FBQ2xCQSxJQUFJQSxNQUFNQSxHQUFVQSxvQkFBb0JBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7UUFDNUVBLElBQUlBLGFBQWFBLEdBQVdBLE9BQU9BLElBQUlBLE9BQU9BLENBQUNBLFVBQVVBLENBQUNBO1FBQzFEQSxJQUFJQSxNQUFNQSxHQUFVQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFFQSxDQUFDQSxhQUFhQSxHQUFFQSxrQkFBa0JBLEdBQUdBLFFBQVFBLENBQUNBLEdBQUdBLENBQUNBLGFBQWFBLEdBQUVBLG9CQUFvQkEsR0FBR0EsU0FBU0EsQ0FBQ0EsQ0FBQ0E7UUFFaklBLE1BQU1BLENBQUNBLE1BQU1BLEdBQUdBLFNBQVNBLEdBQUdBLElBQUlBLEdBQUdBLEtBQUtBLEdBQUdBLElBQUlBLEdBQUdBLFFBQVFBLEdBQUdBLFNBQVNBLEdBQUdBLE1BQU1BLEdBQUdBLE1BQU1BLEdBQUdBLEtBQUtBLENBQUNBO0lBQ2xHQSxDQUFDQTtJQUVESDs7Ozs7O09BTUdBO0lBQ1dBLDhDQUF5QkEsR0FBdkNBLFVBQXdDQSxPQUF3QkE7UUFFL0RJLE1BQU1BLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1lBQ3hCQSxLQUFLQSxzQkFBc0JBLENBQUNBLFVBQVVBO2dCQUNyQ0EsTUFBTUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7Z0JBQ2ZBLEtBQUtBLENBQUNBO1lBQ1BBLEtBQUtBLHNCQUFzQkEsQ0FBQ0EsZ0JBQWdCQTtnQkFDM0NBLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBO2dCQUNmQSxLQUFLQSxDQUFDQTtZQUNQQTtnQkFDQ0EsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0E7UUFDWkEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFDRkosMkJBQUNBO0FBQURBLENBckVBLEFBcUVDQSxJQUFBO0FBRUQsQUFBOEIsaUJBQXJCLG9CQUFvQixDQUFDIiwiZmlsZSI6Im1hdGVyaWFscy91dGlscy9TaGFkZXJDb21waWxlckhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBDb250ZXh0R0xUZXh0dXJlRm9ybWF0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTFRleHR1cmVGb3JtYXRcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJSZWdpc3RlckRhdGFcIik7XG5pbXBvcnQgU2hhZGVyUmVnaXN0ZXJFbGVtZW50XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyUmVnaXN0ZXJFbGVtZW50XCIpO1xuXG5jbGFzcyBTaGFkZXJDb21waWxlckhlbHBlclxue1xuXHQvKipcblx0ICogQSBoZWxwZXIgbWV0aG9kIHRoYXQgZ2VuZXJhdGVzIHN0YW5kYXJkIGNvZGUgZm9yIHNhbXBsaW5nIGZyb20gYSB0ZXh0dXJlIHVzaW5nIHRoZSBub3JtYWwgdXYgY29vcmRpbmF0ZXMuXG5cdCAqIEBwYXJhbSB2byBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSBzaGFyZWRSZWcgVGhlIHNoYXJlZCByZWdpc3RlciBvYmplY3QgZm9yIHRoZSBzaGFkZXIuXG5cdCAqIEBwYXJhbSBpbnB1dFJlZyBUaGUgdGV4dHVyZSBzdHJlYW0gcmVnaXN0ZXIuXG5cdCAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIHdoaWNoIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGdpdmVuIHNsb3QuXG5cdCAqIEBwYXJhbSB1dlJlZyBBbiBvcHRpb25hbCB1diByZWdpc3RlciBpZiBjb29yZGluYXRlcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJpbWFyeSB1diBjb29yZGluYXRlcyBhcmUgdG8gYmUgdXNlZC5cblx0ICogQHBhcmFtIGZvcmNlV3JhcCBJZiB0cnVlLCB0ZXh0dXJlIHdyYXBwaW5nIGlzIGVuYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGUgbWF0ZXJpYWwgc2V0dGluZy5cblx0ICogQHJldHVybiBUaGUgZnJhZ21lbnQgY29kZSB0aGF0IHBlcmZvcm1zIHRoZSBzYW1wbGluZy5cblx0ICpcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRUZXgyRFNhbXBsZUNvZGUodGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgc2hhcmVkUmVnOlNoYWRlclJlZ2lzdGVyRGF0YSwgaW5wdXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB0ZXh0dXJlOlRleHR1cmVQcm94eUJhc2UsIHNtb290aDpib29sZWFuLCByZXBlYXQ6Ym9vbGVhbiwgbWlwbWFwczpib29sZWFuLCB1dlJlZzpTaGFkZXJSZWdpc3RlckVsZW1lbnQgPSBudWxsLCBmb3JjZVdyYXA6c3RyaW5nID0gbnVsbCk6c3RyaW5nXG5cdHtcblx0XHR2YXIgd3JhcDpzdHJpbmcgPSBmb3JjZVdyYXAgfHwgKHJlcGVhdD8gXCJ3cmFwXCI6XCJjbGFtcFwiKTtcblx0XHR2YXIgZm9ybWF0OnN0cmluZyA9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldEZvcm1hdFN0cmluZ0ZvclRleHR1cmUodGV4dHVyZSk7XG5cdFx0dmFyIGVuYWJsZU1pcE1hcHM6Ym9vbGVhbiA9IG1pcG1hcHMgJiYgdGV4dHVyZS5oYXNNaXBtYXBzO1xuXHRcdHZhciBmaWx0ZXI6c3RyaW5nID0gKHNtb290aCk/IChlbmFibGVNaXBNYXBzPyBcImxpbmVhcixtaXBsaW5lYXJcIiA6IFwibGluZWFyXCIpIDogKGVuYWJsZU1pcE1hcHM/IFwibmVhcmVzdCxtaXBuZWFyZXN0XCIgOiBcIm5lYXJlc3RcIik7XG5cblx0XHRpZiAodXZSZWcgPT0gbnVsbClcblx0XHRcdHV2UmVnID0gc2hhcmVkUmVnLnV2VmFyeWluZztcblxuXHRcdHJldHVybiBcInRleCBcIiArIHRhcmdldFJlZyArIFwiLCBcIiArIHV2UmVnICsgXCIsIFwiICsgaW5wdXRSZWcgKyBcIiA8MmQsXCIgKyBmaWx0ZXIgKyBcIixcIiArIGZvcm1hdCArIHdyYXAgKyBcIj5cXG5cIjtcblxuXHR9XG5cblxuXHQvKipcblx0ICogQSBoZWxwZXIgbWV0aG9kIHRoYXQgZ2VuZXJhdGVzIHN0YW5kYXJkIGNvZGUgZm9yIHNhbXBsaW5nIGZyb20gYSBjdWJlIHRleHR1cmUuXG5cdCAqIEBwYXJhbSB2byBUaGUgTWV0aG9kVk8gb2JqZWN0IGxpbmtpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgcGFzcyBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXRSZWcgVGhlIHJlZ2lzdGVyIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBzYW1wbGVkIGNvbG91ci5cblx0ICogQHBhcmFtIGlucHV0UmVnIFRoZSB0ZXh0dXJlIHN0cmVhbSByZWdpc3Rlci5cblx0ICogQHBhcmFtIHRleHR1cmUgVGhlIGN1YmUgbWFwIHdoaWNoIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGdpdmVuIHNsb3QuXG5cdCAqIEBwYXJhbSB1dlJlZyBUaGUgZGlyZWN0aW9uIHZlY3RvciB3aXRoIHdoaWNoIHRvIHNhbXBsZSB0aGUgY3ViZSBtYXAuXG5cdCAqXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0VGV4Q3ViZVNhbXBsZUNvZGUodGFyZ2V0UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCwgaW5wdXRSZWc6U2hhZGVyUmVnaXN0ZXJFbGVtZW50LCB0ZXh0dXJlOlRleHR1cmVQcm94eUJhc2UsIHNtb290aDpib29sZWFuLCBtaXBtYXBzOmJvb2xlYW4sIHV2UmVnOlNoYWRlclJlZ2lzdGVyRWxlbWVudCk6c3RyaW5nXG5cdHtcblx0XHR2YXIgZmlsdGVyOnN0cmluZztcblx0XHR2YXIgZm9ybWF0OnN0cmluZyA9IFNoYWRlckNvbXBpbGVySGVscGVyLmdldEZvcm1hdFN0cmluZ0ZvclRleHR1cmUodGV4dHVyZSk7XG5cdFx0dmFyIGVuYWJsZU1pcE1hcHM6Ym9vbGVhbiA9IG1pcG1hcHMgJiYgdGV4dHVyZS5oYXNNaXBtYXBzO1xuXHRcdHZhciBmaWx0ZXI6c3RyaW5nID0gKHNtb290aCk/IChlbmFibGVNaXBNYXBzPyBcImxpbmVhcixtaXBsaW5lYXJcIiA6IFwibGluZWFyXCIpIDogKGVuYWJsZU1pcE1hcHM/IFwibmVhcmVzdCxtaXBuZWFyZXN0XCIgOiBcIm5lYXJlc3RcIik7XG5cblx0XHRyZXR1cm4gXCJ0ZXggXCIgKyB0YXJnZXRSZWcgKyBcIiwgXCIgKyB1dlJlZyArIFwiLCBcIiArIGlucHV0UmVnICsgXCIgPGN1YmUsXCIgKyBmb3JtYXQgKyBmaWx0ZXIgKyBcIj5cXG5cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSB0ZXh0dXJlIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBzYW1wbGUgaW5zdHJ1Y3Rpb24uXG5cdCAqIEBwYXJhbSB0ZXh0dXJlIFRoZSB0ZXh0dXJlIGZvciB3aGljaCB0byBnZXQgdGhlIGZvcm1hdCBzdHJpbmcuXG5cdCAqIEByZXR1cm5cblx0ICpcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRGb3JtYXRTdHJpbmdGb3JUZXh0dXJlKHRleHR1cmU6VGV4dHVyZVByb3h5QmFzZSk6c3RyaW5nXG5cdHtcblx0XHRzd2l0Y2ggKHRleHR1cmUuZm9ybWF0KSB7XG5cdFx0XHRjYXNlIENvbnRleHRHTFRleHR1cmVGb3JtYXQuQ09NUFJFU1NFRDpcblx0XHRcdFx0cmV0dXJuIFwiZHh0MSxcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIENvbnRleHRHTFRleHR1cmVGb3JtYXQuQ09NUFJFU1NFRF9BTFBIQTpcblx0XHRcdFx0cmV0dXJuIFwiZHh0NSxcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0ID0gU2hhZGVyQ29tcGlsZXJIZWxwZXI7Il19 \ No newline at end of file diff --git a/lib/materials/utils/ShaderCompilerHelper.ts b/lib/materials/utils/ShaderCompilerHelper.ts index b6a1a968..6c4bba5e 100644 --- a/lib/materials/utils/ShaderCompilerHelper.ts +++ b/lib/materials/utils/ShaderCompilerHelper.ts @@ -1,6 +1,6 @@ import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); -import ContextGLTextureFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLTextureFormat"); +import ContextGLTextureFormat = require("awayjs-stagegl/lib/base/ContextGLTextureFormat"); import ShaderRegisterData = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterData"); import ShaderRegisterElement = require("awayjs-stagegl/lib/materials/compilation/ShaderRegisterElement"); diff --git a/lib/pool/BillboardRenderable.js b/lib/pool/BillboardRenderable.js new file mode 100755 index 00000000..cc7384cb --- /dev/null +++ b/lib/pool/BillboardRenderable.js @@ -0,0 +1,60 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +/** + * @class away.pool.RenderableListItem + */ +var BillboardRenderable = (function (_super) { + __extends(BillboardRenderable, _super); + /** + * //TODO + * + * @param pool + * @param billboard + */ + function BillboardRenderable(pool, billboard) { + _super.call(this, pool, billboard, billboard); + this._billboard = billboard; + } + /** + * //TODO + * + * @returns {away.base.TriangleSubGeometry} + */ + BillboardRenderable.prototype._pGetSubGeometry = function () { + var material = this._billboard.material; + var geometry = BillboardRenderable._materialGeometry[material.id]; + if (!geometry) { + geometry = BillboardRenderable._materialGeometry[material.id] = new TriangleSubGeometry(true); + geometry.autoDeriveNormals = false; + geometry.autoDeriveTangents = false; + geometry.updateIndices(Array(0, 1, 2, 0, 2, 3)); + geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); + geometry.updateVertexNormals(Array(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0)); + geometry.updateVertexTangents(Array(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1)); + geometry.updateUVs(Array(0, 0, 1, 0, 1, 1, 0, 1)); + } + else { + geometry.updatePositions(Array(0, material.height, 0, material.width, material.height, 0, material.width, 0, 0, 0, 0, 0)); + } + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; + this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; + return geometry; + }; + BillboardRenderable._materialGeometry = new Object(); + /** + * + */ + BillboardRenderable.id = "billboard"; + return BillboardRenderable; +})(RenderableBase); +module.exports = BillboardRenderable; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL2JpbGxib2FyZHJlbmRlcmFibGUudHMiXSwibmFtZXMiOlsiQmlsbGJvYXJkUmVuZGVyYWJsZSIsIkJpbGxib2FyZFJlbmRlcmFibGUuY29uc3RydWN0b3IiLCJCaWxsYm9hcmRSZW5kZXJhYmxlLl9wR2V0U3ViR2VvbWV0cnkiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUt0RixJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTdFLEFBR0E7O0dBREc7SUFDRyxtQkFBbUI7SUFBU0EsVUFBNUJBLG1CQUFtQkEsVUFBdUJBO0lBYy9DQTs7Ozs7T0FLR0E7SUFDSEEsU0FwQktBLG1CQUFtQkEsQ0FvQlpBLElBQW1CQSxFQUFFQSxTQUFtQkE7UUFFbkRDLGtCQUFNQSxJQUFJQSxFQUFFQSxTQUFTQSxFQUFFQSxTQUFTQSxDQUFDQSxDQUFDQTtRQUVsQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsR0FBR0EsU0FBU0EsQ0FBQ0E7SUFDN0JBLENBQUNBO0lBRUREOzs7O09BSUdBO0lBQ0lBLDhDQUFnQkEsR0FBdkJBO1FBRUNFLElBQUlBLFFBQVFBLEdBQWdCQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUVyREEsSUFBSUEsUUFBUUEsR0FBdUJBLG1CQUFtQkEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxRQUFRQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUV0RkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDZkEsUUFBUUEsR0FBR0EsbUJBQW1CQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLG1CQUFtQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDOUZBLFFBQVFBLENBQUNBLGlCQUFpQkEsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDbkNBLFFBQVFBLENBQUNBLGtCQUFrQkEsR0FBR0EsS0FBS0EsQ0FBQ0E7WUFDcENBLFFBQVFBLENBQUNBLGFBQWFBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3hEQSxRQUFRQSxDQUFDQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFTQSxDQUFDQSxFQUFFQSxRQUFRQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxRQUFRQSxDQUFDQSxLQUFLQSxFQUFFQSxRQUFRQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQSxRQUFRQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsSUEsUUFBUUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxLQUFLQSxDQUFTQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNoRkEsUUFBUUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxLQUFLQSxDQUFTQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNyRkEsUUFBUUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDM0RBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ1BBLFFBQVFBLENBQUNBLGVBQWVBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLEtBQUtBLEVBQUVBLFFBQVFBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEVBQUVBLFFBQVFBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBQ25JQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDakVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxXQUFXQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUMvREEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxtQkFBbUJBLENBQUNBLFlBQVlBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2hFQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFM0RBLE1BQU1BLENBQUNBLFFBQVFBLENBQUNBO0lBQ2pCQSxDQUFDQTtJQXZEY0YscUNBQWlCQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtJQUV2REE7O09BRUdBO0lBQ1dBLHNCQUFFQSxHQUFVQSxXQUFXQSxDQUFDQTtJQW1EdkNBLDBCQUFDQTtBQUFEQSxDQTFEQSxBQTBEQ0EsRUExRGlDLGNBQWMsRUEwRC9DO0FBRUQsQUFBNkIsaUJBQXBCLG1CQUFtQixDQUFDIiwiZmlsZSI6InBvb2wvQmlsbGJvYXJkUmVuZGVyYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5pbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuaW1wb3J0IEJpbGxib2FyZFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvQmlsbGJvYXJkXCIpO1xuaW1wb3J0IE1hdGVyaWFsQmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL01hdGVyaWFsQmFzZVwiKTtcblxuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlJlbmRlcmFibGVMaXN0SXRlbVxuICovXG5jbGFzcyBCaWxsYm9hcmRSZW5kZXJhYmxlIGV4dGVuZHMgUmVuZGVyYWJsZUJhc2Vcbntcblx0cHJpdmF0ZSBzdGF0aWMgX21hdGVyaWFsR2VvbWV0cnk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBpZDpzdHJpbmcgPSBcImJpbGxib2FyZFwiO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBfYmlsbGJvYXJkOkJpbGxib2FyZDtcblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBwb29sXG5cdCAqIEBwYXJhbSBiaWxsYm9hcmRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBvb2w6UmVuZGVyYWJsZVBvb2wsIGJpbGxib2FyZDpCaWxsYm9hcmQpXG5cdHtcblx0XHRzdXBlcihwb29sLCBiaWxsYm9hcmQsIGJpbGxib2FyZCk7XG5cblx0XHR0aGlzLl9iaWxsYm9hcmQgPSBiaWxsYm9hcmQ7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEByZXR1cm5zIHthd2F5LmJhc2UuVHJpYW5nbGVTdWJHZW9tZXRyeX1cblx0ICovXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6U3ViR2VvbWV0cnlCYXNlXG5cdHtcblx0XHR2YXIgbWF0ZXJpYWw6TWF0ZXJpYWxCYXNlID0gdGhpcy5fYmlsbGJvYXJkLm1hdGVyaWFsO1xuXG5cdFx0dmFyIGdlb21ldHJ5OlRyaWFuZ2xlU3ViR2VvbWV0cnkgPSBCaWxsYm9hcmRSZW5kZXJhYmxlLl9tYXRlcmlhbEdlb21ldHJ5W21hdGVyaWFsLmlkXTtcblxuXHRcdGlmICghZ2VvbWV0cnkpIHtcblx0XHRcdGdlb21ldHJ5ID0gQmlsbGJvYXJkUmVuZGVyYWJsZS5fbWF0ZXJpYWxHZW9tZXRyeVttYXRlcmlhbC5pZF0gPSBuZXcgVHJpYW5nbGVTdWJHZW9tZXRyeSh0cnVlKTtcblx0XHRcdGdlb21ldHJ5LmF1dG9EZXJpdmVOb3JtYWxzID0gZmFsc2U7XG5cdFx0XHRnZW9tZXRyeS5hdXRvRGVyaXZlVGFuZ2VudHMgPSBmYWxzZTtcblx0XHRcdGdlb21ldHJ5LnVwZGF0ZUluZGljZXMoQXJyYXk8bnVtYmVyPigwLCAxLCAyLCAwLCAyLCAzKSk7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVQb3NpdGlvbnMoQXJyYXk8bnVtYmVyPigwLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCAwLCAwLCAwLCAwLCAwKSk7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVWZXJ0ZXhOb3JtYWxzKEFycmF5PG51bWJlcj4oMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCkpO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlVmVydGV4VGFuZ2VudHMoQXJyYXk8bnVtYmVyPigwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSkpO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlVVZzKEFycmF5PG51bWJlcj4oMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRnZW9tZXRyeS51cGRhdGVQb3NpdGlvbnMoQXJyYXk8bnVtYmVyPigwLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCBtYXRlcmlhbC5oZWlnaHQsIDAsIG1hdGVyaWFsLndpZHRoLCAwLCAwLCAwLCAwLCAwKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlBPU0lUSU9OX0RBVEFdID0gdHJ1ZTtcblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuTk9STUFMX0RBVEFdID0gdHJ1ZTtcblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuVEFOR0VOVF9EQVRBXSA9IHRydWU7XG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0RBVEFdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBnZW9tZXRyeTtcblx0fVxufVxuXG5leHBvcnQgPSBCaWxsYm9hcmRSZW5kZXJhYmxlOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/BillboardRenderable.ts b/lib/pool/BillboardRenderable.ts similarity index 96% rename from lib/core/pool/BillboardRenderable.ts rename to lib/pool/BillboardRenderable.ts index 729ded93..0b83dcd2 100644 --- a/lib/core/pool/BillboardRenderable.ts +++ b/lib/pool/BillboardRenderable.ts @@ -4,7 +4,7 @@ import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import Billboard = require("awayjs-display/lib/entities/Billboard"); import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.RenderableListItem diff --git a/lib/pool/IndexData.js b/lib/pool/IndexData.js new file mode 100755 index 00000000..9ed8cea3 --- /dev/null +++ b/lib/pool/IndexData.js @@ -0,0 +1,113 @@ +/** + * + */ +var IndexData = (function () { + function IndexData(level) { + this._dataDirty = true; + this.invalid = new Array(8); + this.contexts = new Array(8); + this.buffers = new Array(8); + this.level = level; + } + IndexData.prototype.updateData = function (offset, indices, numVertices) { + if (this._dataDirty) { + this._dataDirty = false; + if (indices.length < IndexData.LIMIT_INDICES && numVertices < IndexData.LIMIT_VERTS) { + //shortcut for those buffers that fit into the maximum buffer sizes + this.indexMappings = null; + this.originalIndices = null; + this.setData(indices); + this.offset = indices.length; + } + else { + var i; + var len; + var outIndex; + var j; + var k; + var splitIndices = new Array(); + this.indexMappings = new Array(indices.length); + this.originalIndices = new Array(); + i = this.indexMappings.length; + while (i--) + this.indexMappings[i] = -1; + var originalIndex; + var splitIndex; + // Loop over all triangles + outIndex = 0; + len = indices.length; + i = offset; + k = 0; + while (i < len && outIndex + 3 < IndexData.LIMIT_INDICES && k + 3 < IndexData.LIMIT_VERTS) { + for (j = 0; j < 3; j++) { + originalIndex = indices[i + j]; + if (this.indexMappings[originalIndex] >= 0) { + splitIndex = this.indexMappings[originalIndex]; + } + else { + // This vertex does not yet exist in the split list and + // needs to be copied from the long list. + splitIndex = k++; + this.indexMappings[originalIndex] = splitIndex; + this.originalIndices.push(originalIndex); + } + // Store new index, which may have come from the mapping look-up, + // or from copying a new set of vertex data from the original vector + splitIndices[outIndex + j] = splitIndex; + } + outIndex += 3; + i += 3; + } + this.setData(splitIndices); + this.offset = i; + } + } + }; + IndexData.prototype.invalidateData = function () { + this._dataDirty = true; + }; + IndexData.prototype.dispose = function () { + for (var i = 0; i < 8; ++i) { + if (this.contexts[i]) { + this.contexts[i].disposeIndexData(this); + this.contexts[i] = null; + } + } + }; + /** + * @private + */ + IndexData.prototype.disposeBuffers = function () { + for (var i = 0; i < 8; ++i) { + if (this.buffers[i]) { + this.buffers[i].dispose(); + this.buffers[i] = null; + } + } + }; + /** + * @private + */ + IndexData.prototype.invalidateBuffers = function () { + for (var i = 0; i < 8; ++i) + this.invalid[i] = true; + }; + /** + * + * @param data + * @private + */ + IndexData.prototype.setData = function (data) { + if (this.data && this.data.length != data.length) + this.disposeBuffers(); + else + this.invalidateBuffers(); + this.data = data; + }; + IndexData.LIMIT_VERTS = 0xffff; + IndexData.LIMIT_INDICES = 0xffffff; + return IndexData; +})(); +module.exports = IndexData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL2luZGV4ZGF0YS50cyJdLCJuYW1lcyI6WyJJbmRleERhdGEiLCJJbmRleERhdGEuY29uc3RydWN0b3IiLCJJbmRleERhdGEudXBkYXRlRGF0YSIsIkluZGV4RGF0YS5pbnZhbGlkYXRlRGF0YSIsIkluZGV4RGF0YS5kaXNwb3NlIiwiSW5kZXhEYXRhLmRpc3Bvc2VCdWZmZXJzIiwiSW5kZXhEYXRhLmludmFsaWRhdGVCdWZmZXJzIiwiSW5kZXhEYXRhLnNldERhdGEiXSwibWFwcGluZ3MiOiJBQUtBLEFBR0E7O0dBREc7SUFDRyxTQUFTO0lBd0JkQSxTQXhCS0EsU0FBU0EsQ0F3QkZBLEtBQVlBO1FBbEJoQkMsZUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFbkJBLFlBQU9BLEdBQWtCQSxJQUFJQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUV0Q0EsYUFBUUEsR0FBd0JBLElBQUlBLEtBQUtBLENBQWdCQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUU1REEsWUFBT0EsR0FBdUJBLElBQUlBLEtBQUtBLENBQWVBLENBQUNBLENBQUNBLENBQUNBO1FBYy9EQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxLQUFLQSxDQUFDQTtJQUNwQkEsQ0FBQ0E7SUFFTUQsOEJBQVVBLEdBQWpCQSxVQUFrQkEsTUFBYUEsRUFBRUEsT0FBcUJBLEVBQUVBLFdBQWtCQTtRQUV6RUUsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDckJBLElBQUlBLENBQUNBLFVBQVVBLEdBQUdBLEtBQUtBLENBQUNBO1lBRXhCQSxFQUFFQSxDQUFDQSxDQUFDQSxPQUFPQSxDQUFDQSxNQUFNQSxHQUFHQSxTQUFTQSxDQUFDQSxhQUFhQSxJQUFJQSxXQUFXQSxHQUFHQSxTQUFTQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDckZBLEFBQ0FBLG1FQURtRUE7Z0JBQ25FQSxJ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QSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUN4QkEsQ0FBQ0E7UUFDRkEsQ0FBQ0E7SUFDRkEsQ0FBQ0E7SUFFREw7O09BRUdBO0lBQ0tBLHFDQUFpQkEsR0FBekJBO1FBRUNNLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ2hDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFRE47Ozs7T0FJR0E7SUFDS0EsMkJBQU9BLEdBQWZBLFVBQWdCQSxJQUFrQkE7UUFFakNPLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLElBQUlBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLElBQUlBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO1lBQ2hEQSxJQUFJQSxDQUFDQSxjQUFjQSxFQUFFQSxDQUFDQTtRQUN2QkEsSUFBSUE7WUFDSEEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxFQUFFQSxDQUFDQTtRQUUxQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDbEJBLENBQUNBO0lBaEpjUCxxQkFBV0EsR0FBVUEsTUFBTUEsQ0FBQ0E7SUFFNUJBLHVCQUFhQSxHQUFVQSxRQUFRQSxDQUFDQTtJQStJaERBLGdCQUFDQTtBQUFEQSxDQW5KQSxBQW1KQ0EsSUFBQTtBQUVELEFBQW1CLGlCQUFWLFNBQVMsQ0FBQyIsImZpbGUiOiJwb29sL0luZGV4RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5cbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElJbmRleEJ1ZmZlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JSW5kZXhCdWZmZXJcIik7XG5cbi8qKlxuICpcbiAqL1xuY2xhc3MgSW5kZXhEYXRhXG57XG5cdHByaXZhdGUgc3RhdGljIExJTUlUX1ZFUlRTOm51bWJlciA9IDB4ZmZmZjtcblxuXHRwcml2YXRlIHN0YXRpYyBMSU1JVF9JTkRJQ0VTOm51bWJlciA9IDB4ZmZmZmZmO1xuXG5cdHByaXZhdGUgX2RhdGFEaXJ0eSA9IHRydWU7XG5cblx0cHVibGljIGludmFsaWQ6QXJyYXk8Ym9vbGVhbj4gPSBuZXcgQXJyYXkoOCk7XG5cblx0cHVibGljIGNvbnRleHRzOkFycmF5PENvbnRleHRHTEJhc2U+ID0gbmV3IEFycmF5PENvbnRleHRHTEJhc2U+KDgpO1xuXG5cdHB1YmxpYyBidWZmZXJzOkFycmF5PElJbmRleEJ1ZmZlcj4gPSBuZXcgQXJyYXk8SUluZGV4QnVmZmVyPig4KTtcblxuXHRwdWJsaWMgZGF0YTpBcnJheTxudW1iZXI+O1xuXG5cdHB1YmxpYyBpbmRleE1hcHBpbmdzOkFycmF5PG51bWJlcj47XG5cblx0cHVibGljIG9yaWdpbmFsSW5kaWNlczpBcnJheTxudW1iZXI+O1xuXG5cdHB1YmxpYyBvZmZzZXQ6bnVtYmVyO1xuXG5cdHB1YmxpYyBsZXZlbDpudW1iZXI7XG5cblx0Y29uc3RydWN0b3IobGV2ZWw6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy5sZXZlbCA9IGxldmVsO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZURhdGEob2Zmc2V0Om51bWJlciwgaW5kaWNlczpBcnJheTxudW1iZXI+LCBudW1WZXJ0aWNlczpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fZGF0YURpcnR5KSB7XG5cdFx0XHR0aGlzLl9kYXRhRGlydHkgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGluZGljZXMubGVuZ3RoIDwgSW5kZXhEYXRhLkxJTUlUX0lORElDRVMgJiYgbnVtVmVydGljZXMgPCBJbmRleERhdGEuTElNSVRfVkVSVFMpIHtcblx0XHRcdFx0Ly9zaG9ydGN1dCBmb3IgdGhvc2UgYnVmZmVycyB0aGF0IGZpdCBpbnRvIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplc1xuXHRcdFx0XHR0aGlzLmluZGV4TWFwcGluZ3MgPSBudWxsO1xuXHRcdFx0XHR0aGlzLm9yaWdpbmFsSW5kaWNlcyA9IG51bGw7XG5cdFx0XHRcdHRoaXMuc2V0RGF0YShpbmRpY2VzKTtcblx0XHRcdFx0dGhpcy5vZmZzZXQgPSBpbmRpY2VzLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBpOm51bWJlcjtcblx0XHRcdFx0dmFyIGxlbjpudW1iZXI7XG5cdFx0XHRcdHZhciBvdXRJbmRleDpudW1iZXI7XG5cdFx0XHRcdHZhciBqOm51bWJlcjtcblx0XHRcdFx0dmFyIGs6bnVtYmVyO1xuXHRcdFx0XHR2YXIgc3BsaXRJbmRpY2VzOkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG5cdFx0XHRcdHRoaXMuaW5kZXhNYXBwaW5ncyA9IG5ldyBBcnJheTxudW1iZXI+KGluZGljZXMubGVuZ3RoKTtcblx0XHRcdFx0dGhpcy5vcmlnaW5hbEluZGljZXMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG5cdFx0XHRcdGkgPSB0aGlzLmluZGV4TWFwcGluZ3MubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pXG5cdFx0XHRcdFx0dGhpcy5pbmRleE1hcHBpbmdzW2ldID0gLTE7XG5cblx0XHRcdFx0dmFyIG9yaWdpbmFsSW5kZXg6bnVtYmVyO1xuXHRcdFx0XHR2YXIgc3BsaXRJbmRleDpudW1iZXI7XG5cblx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB0cmlhbmdsZXNcblx0XHRcdFx0b3V0SW5kZXggPSAwO1xuXHRcdFx0XHRsZW4gPSBpbmRpY2VzLmxlbmd0aDtcblx0XHRcdFx0aSA9IG9mZnNldDtcblx0XHRcdFx0ayA9IDA7XG5cdFx0XHRcdHdoaWxlIChpIDwgbGVuICYmIG91dEluZGV4ICsgMyA8IEluZGV4RGF0YS5MSU1JVF9JTkRJQ0VTICYmIGsgKyAzIDwgSW5kZXhEYXRhLkxJTUlUX1ZFUlRTKSB7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2ZXJ0aWNlcyBpbiBhIHRyaWFuZ2xlIC8vVE9ETyBlbnN1cmUgdGhpcyB3b3JrcyBmb3Igc2VnbWVudHMgb3IgYW55IGdyb3VwaW5nXG5cdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IDM7IGorKykge1xuXG5cdFx0XHRcdFx0XHRvcmlnaW5hbEluZGV4ID0gaW5kaWNlc1tpICsgal07XG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLmluZGV4TWFwcGluZ3Nbb3JpZ2luYWxJbmRleF0gPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRzcGxpdEluZGV4ID0gdGhpcy5pbmRleE1hcHBpbmdzW29yaWdpbmFsSW5kZXhdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIHZlcnRleCBkb2VzIG5vdCB5ZXQgZXhpc3QgaW4gdGhlIHNwbGl0IGxpc3QgYW5kXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRzIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBsb25nIGxpc3QuXG5cdFx0XHRcdFx0XHRcdHNwbGl0SW5kZXggPSBrKys7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW5kZXhNYXBwaW5nc1tvcmlnaW5hbEluZGV4XSA9IHNwbGl0SW5kZXg7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3JpZ2luYWxJbmRpY2VzLnB1c2gob3JpZ2luYWxJbmRleCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFN0b3JlIG5ldyBpbmRleCwgd2hpY2ggbWF5IGhhdmUgY29tZSBmcm9tIHRoZSBtYXBwaW5nIGxvb2stdXAsXG5cdFx0XHRcdFx0XHQvLyBvciBmcm9tIGNvcHlpbmcgYSBuZXcgc2V0IG9mIHZlcnRleCBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIHZlY3RvclxuXHRcdFx0XHRcdFx0c3BsaXRJbmRpY2VzW291dEluZGV4ICsgal0gPSBzcGxpdEluZGV4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dEluZGV4ICs9IDM7XG5cdFx0XHRcdFx0aSArPSAzXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldERhdGEoc3BsaXRJbmRpY2VzKTtcblx0XHRcdFx0dGhpcy5vZmZzZXQgPSBpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpbnZhbGlkYXRlRGF0YSgpXG5cdHtcblx0XHR0aGlzLl9kYXRhRGlydHkgPSB0cnVlO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgODsgKytpKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZXh0c1tpXSkge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRzW2ldLmRpc3Bvc2VJbmRleERhdGEodGhpcyk7XG5cdFx0XHRcdHRoaXMuY29udGV4dHNbaV0gPSBudWxsXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGRpc3Bvc2VCdWZmZXJzKClcblx0e1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IDg7ICsraSkge1xuXHRcdFx0aWYgKHRoaXMuYnVmZmVyc1tpXSkge1xuXHRcdFx0XHR0aGlzLmJ1ZmZlcnNbaV0uZGlzcG9zZSgpO1xuXHRcdFx0XHR0aGlzLmJ1ZmZlcnNbaV0gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQnVmZmVycygpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA4OyArK2kpXG5cdFx0XHR0aGlzLmludmFsaWRbaV0gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIHNldERhdGEoZGF0YTpBcnJheTxudW1iZXI+KVxuXHR7XG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoICE9IGRhdGEubGVuZ3RoKVxuXHRcdFx0dGhpcy5kaXNwb3NlQnVmZmVycygpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuaW52YWxpZGF0ZUJ1ZmZlcnMoKTtcblxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdH1cbn1cblxuZXhwb3J0ID0gSW5kZXhEYXRhOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/IndexData.ts b/lib/pool/IndexData.ts similarity index 95% rename from lib/core/pool/IndexData.ts rename to lib/pool/IndexData.ts index 05473efd..a7ef1db6 100644 --- a/lib/core/pool/IndexData.ts +++ b/lib/pool/IndexData.ts @@ -1,7 +1,7 @@ import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); /** * diff --git a/lib/pool/IndexDataPool.js b/lib/pool/IndexDataPool.js new file mode 100755 index 00000000..60ab2bb3 --- /dev/null +++ b/lib/pool/IndexDataPool.js @@ -0,0 +1,33 @@ +var IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +/** + * + */ +var IndexDataPool = (function () { + function IndexDataPool() { + } + IndexDataPool.getItem = function (subGeometry, level, indexOffset) { + var subGeometryData = (IndexDataPool._pool[subGeometry.id] || (IndexDataPool._pool[subGeometry.id] = new Array())); + var indexData = subGeometryData[level] || (subGeometryData[level] = new IndexData(level)); + indexData.updateData(indexOffset, subGeometry.indices, subGeometry.numVertices); + return indexData; + }; + IndexDataPool.disposeItem = function (id, level) { + var subGeometryData = this._pool[id]; + subGeometryData[level].dispose(); + subGeometryData[level] = null; + }; + IndexDataPool.prototype.disposeData = function (id) { + var subGeometryData = IndexDataPool._pool[id]; + var len = subGeometryData.length; + for (var i = 0; i < len; i++) { + subGeometryData[i].dispose(); + subGeometryData[i] = null; + } + IndexDataPool._pool[id] = null; + }; + IndexDataPool._pool = new Object(); + return IndexDataPool; +})(); +module.exports = IndexDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL2luZGV4ZGF0YXBvb2wudHMiXSwibmFtZXMiOlsiSW5kZXhEYXRhUG9vbCIsIkluZGV4RGF0YVBvb2wuY29uc3RydWN0b3IiLCJJbmRleERhdGFQb29sLmdldEl0ZW0iLCJJbmRleERhdGFQb29sLmRpc3Bvc2VJdGVtIiwiSW5kZXhEYXRhUG9vbC5kaXNwb3NlRGF0YSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxTQUFTLFdBQWUsbUNBQW1DLENBQUMsQ0FBQztBQUVwRSxBQUdBOztHQURHO0lBQ0csYUFBYTtJQUlsQkEsU0FKS0EsYUFBYUE7SUFNbEJDLENBQUNBO0lBRWFELHFCQUFPQSxHQUFyQkEsVUFBc0JBLFdBQTJCQSxFQUFFQSxLQUFZQSxFQUFFQSxXQUFrQkE7UUFFbEZFLElBQUlBLGVBQWVBLEdBQXVDQSxDQUFDQSxhQUFhQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxFQUFFQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxLQUFLQSxFQUFhQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUVsS0EsSUFBSUEsU0FBU0EsR0FBYUEsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsSUFBSUEsU0FBU0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDcEdBLFNBQVNBLENBQUNBLFVBQVVBLENBQUNBLFdBQVdBLEVBQUVBLFdBQVdBLENBQUNBLE9BQU9BLEVBQUVBLFdBQVdBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBO1FBRWhGQSxNQUFNQSxDQUFDQSxTQUFTQSxDQUFDQTtJQUNsQkEsQ0FBQ0E7SUFFYUYseUJBQVdBLEdBQXpCQSxVQUEwQkEsRUFBU0EsRUFBRUEsS0FBWUE7UUFFaERHLElBQUlBLGVBQWVBLEdBQXVDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUV6RUEsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDakNBLGVBQWVBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO0lBQy9CQSxDQUFDQTtJQUVNSCxtQ0FBV0EsR0FBbEJBLFVBQW1CQSxFQUFTQTtRQUUzQkksSUFBSUEsZUFBZUEsR0FBdUNBLGFBQWFBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBRWxGQSxJQUFJQSxHQUFHQSxHQUFVQSxlQUFlQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUN4Q0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDckNBLGVBQWVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1lBQzdCQSxlQUFlQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7UUFFREEsYUFBYUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDaENBLENBQUNBO0lBbkNjSixtQkFBS0EsR0FBVUEsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7SUFvQzVDQSxvQkFBQ0E7QUFBREEsQ0F0Q0EsQUFzQ0NBLElBQUE7QUFFRCxBQUF1QixpQkFBZCxhQUFhLENBQUMiLCJmaWxlIjoicG9vbC9JbmRleERhdGFQb29sLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdWJHZW9tZXRyeUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1N1Ykdlb21ldHJ5QmFzZVwiKTtcblxuaW1wb3J0IEluZGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9JbmRleERhdGFcIik7XG5cbi8qKlxuICpcbiAqL1xuY2xhc3MgSW5kZXhEYXRhUG9vbFxue1xuXHRwcml2YXRlIHN0YXRpYyBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGdldEl0ZW0oc3ViR2VvbWV0cnk6U3ViR2VvbWV0cnlCYXNlLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6SW5kZXhEYXRhXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gKEluZGV4RGF0YVBvb2wuX3Bvb2xbc3ViR2VvbWV0cnkuaWRdIHx8IChJbmRleERhdGFQb29sLl9wb29sW3N1Ykdlb21ldHJ5LmlkXSA9IG5ldyBBcnJheTxJbmRleERhdGE+KCkpKTtcblxuXHRcdHZhciBpbmRleERhdGE6SW5kZXhEYXRhID0gc3ViR2VvbWV0cnlEYXRhW2xldmVsXSB8fCAoc3ViR2VvbWV0cnlEYXRhW2xldmVsXSA9IG5ldyBJbmRleERhdGEobGV2ZWwpKTtcblx0XHRpbmRleERhdGEudXBkYXRlRGF0YShpbmRleE9mZnNldCwgc3ViR2VvbWV0cnkuaW5kaWNlcywgc3ViR2VvbWV0cnkubnVtVmVydGljZXMpO1xuXG5cdFx0cmV0dXJuIGluZGV4RGF0YTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZGlzcG9zZUl0ZW0oaWQ6bnVtYmVyLCBsZXZlbDpudW1iZXIpXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gdGhpcy5fcG9vbFtpZF07XG5cblx0XHRzdWJHZW9tZXRyeURhdGFbbGV2ZWxdLmRpc3Bvc2UoKTtcblx0XHRzdWJHZW9tZXRyeURhdGFbbGV2ZWxdID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlRGF0YShpZDpudW1iZXIpXG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PEluZGV4RGF0YT4gPSA8QXJyYXk8SW5kZXhEYXRhPj4gSW5kZXhEYXRhUG9vbC5fcG9vbFtpZF07XG5cblx0XHR2YXIgbGVuOm51bWJlciA9IHN1Ykdlb21ldHJ5RGF0YS5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdHN1Ykdlb21ldHJ5RGF0YVtpXS5kaXNwb3NlKCk7XG5cdFx0XHRzdWJHZW9tZXRyeURhdGFbaV0gPSBudWxsO1xuXHRcdH1cblxuXHRcdEluZGV4RGF0YVBvb2wuX3Bvb2xbaWRdID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgPSBJbmRleERhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/IndexDataPool.ts b/lib/pool/IndexDataPool.ts similarity index 94% rename from lib/core/pool/IndexDataPool.ts rename to lib/pool/IndexDataPool.ts index 4e9d3d5e..cf53efbc 100644 --- a/lib/core/pool/IndexDataPool.ts +++ b/lib/pool/IndexDataPool.ts @@ -1,6 +1,6 @@ import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); +import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); /** * diff --git a/lib/pool/LineSubMeshRenderable.js b/lib/pool/LineSubMeshRenderable.js new file mode 100755 index 00000000..886de7a2 --- /dev/null +++ b/lib/pool/LineSubMeshRenderable.js @@ -0,0 +1,65 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +/** + * @class away.pool.LineSubMeshRenderable + */ +var LineSubMeshRenderable = (function (_super) { + __extends(LineSubMeshRenderable, _super); + /** + * //TODO + * + * @param pool + * @param subMesh + * @param level + * @param dataOffset + */ + function LineSubMeshRenderable(pool, subMesh, level, indexOffset) { + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); + this.subMesh = subMesh; + } + /** + * //TODO + * + * @returns {base.LineSubGeometry} + * @protected + */ + LineSubMeshRenderable.prototype._pGetSubGeometry = function () { + var subGeometry = this.subMesh.subGeometry; + this._pVertexDataDirty[LineSubGeometry.START_POSITION_DATA] = true; + this._pVertexDataDirty[LineSubGeometry.END_POSITION_DATA] = true; + if (subGeometry.thickness) + this._pVertexDataDirty[LineSubGeometry.THICKNESS_DATA] = true; + if (subGeometry.startColors) + this._pVertexDataDirty[LineSubGeometry.COLOR_DATA] = true; + return subGeometry; + }; + /** + * //TODO + * + * @param pool + * @param materialOwner + * @param level + * @param indexOffset + * @returns {away.pool.LineSubMeshRenderable} + * @private + */ + LineSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + return new LineSubMeshRenderable(pool, materialOwner, level, indexOffset); + }; + /** + * + */ + LineSubMeshRenderable.id = "linesubmesh"; + return LineSubMeshRenderable; +})(RenderableBase); +module.exports = LineSubMeshRenderable; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL2xpbmVzdWJtZXNocmVuZGVyYWJsZS50cyJdLCJuYW1lcyI6WyJMaW5lU3ViTWVzaFJlbmRlcmFibGUiLCJMaW5lU3ViTWVzaFJlbmRlcmFibGUuY29uc3RydWN0b3IiLCJMaW5lU3ViTWVzaFJlbmRlcmFibGUuX3BHZXRTdWJHZW9tZXRyeSIsIkxpbmVTdWJNZXNoUmVuZGVyYWJsZS5fcEdldE92ZXJmbG93UmVuZGVyYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBTyxlQUFlLFdBQWMseUNBQXlDLENBQUMsQ0FBQztBQUkvRSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTdFLEFBR0E7O0dBREc7SUFDRyxxQkFBcUI7SUFBU0EsVUFBOUJBLHFCQUFxQkEsVUFBdUJBO0lBWWpEQTs7Ozs7OztPQU9HQTtJQUNIQSxTQXBCS0EscUJBQXFCQSxDQW9CZEEsSUFBbUJBLEVBQUVBLE9BQW1CQSxFQUFFQSxLQUFnQkEsRUFBRUEsV0FBc0JBO1FBQXhDQyxxQkFBZ0JBLEdBQWhCQSxTQUFnQkE7UUFBRUEsMkJBQXNCQSxHQUF0QkEsZUFBc0JBO1FBRTdGQSxrQkFBTUEsSUFBSUEsRUFBRUEsT0FBT0EsQ0FBQ0EsVUFBVUEsRUFBRUEsT0FBT0EsRUFBRUEsS0FBS0EsRUFBRUEsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFFN0RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE9BQU9BLENBQUNBO0lBQ3hCQSxDQUFDQTtJQUVERDs7Ozs7T0FLR0E7SUFDSUEsZ0RBQWdCQSxHQUF2QkE7UUFFQ0UsSUFBSUEsV0FBV0EsR0FBbUJBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLFdBQVdBLENBQUNBO1FBRTNEQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLGVBQWVBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDbkVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVqRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDekJBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFL0RBLEVBQUVBLENBQUNBLENBQUNBLFdBQVdBLENBQUNBLFdBQVdBLENBQUNBO1lBQzNCQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLGVBQWVBLENBQUNBLFVBQVVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBRTNEQSxNQUFNQSxDQUFDQSxXQUFXQSxDQUFDQTtJQUNwQkEsQ0FBQ0E7SUFFREY7Ozs7Ozs7OztPQVNHQTtJQUNJQSx1REFBdUJBLEdBQTlCQSxVQUErQkEsSUFBbUJBLEVBQUVBLGFBQTRCQSxFQUFFQSxLQUFZQSxFQUFFQSxXQUFrQkE7UUFFakhHLE1BQU1BLENBQUNBLElBQUlBLHFCQUFxQkEsQ0FBQ0EsSUFBSUEsRUFBZ0JBLGFBQWFBLEVBQUVBLEtBQUtBLEVBQUVBLFdBQVdBLENBQUNBLENBQUNBO0lBQ3pGQSxDQUFDQTtJQTVEREg7O09BRUdBO0lBQ1dBLHdCQUFFQSxHQUFVQSxhQUFhQSxDQUFDQTtJQTBEekNBLDRCQUFDQTtBQUFEQSxDQS9EQSxBQStEQ0EsRUEvRG1DLGNBQWMsRUErRGpEO0FBRUQsQUFBK0IsaUJBQXRCLHFCQUFxQixDQUFDIiwiZmlsZSI6InBvb2wvTGluZVN1Yk1lc2hSZW5kZXJhYmxlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJTWF0ZXJpYWxPd25lclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvSU1hdGVyaWFsT3duZXJcIik7XG5pbXBvcnQgTGluZVN1Yk1lc2hcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvTGluZVN1Yk1lc2hcIik7XG5pbXBvcnQgTGluZVN1Ykdlb21ldHJ5XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9MaW5lU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuaW1wb3J0IFN1Ykdlb21ldHJ5RXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvU3ViR2VvbWV0cnlFdmVudFwiKTtcblxuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLkxpbmVTdWJNZXNoUmVuZGVyYWJsZVxuICovXG5jbGFzcyBMaW5lU3ViTWVzaFJlbmRlcmFibGUgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZVxue1xuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaWQ6c3RyaW5nID0gXCJsaW5lc3VibWVzaFwiO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHN1Yk1lc2g6TGluZVN1Yk1lc2g7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gcG9vbFxuXHQgKiBAcGFyYW0gc3ViTWVzaFxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIGRhdGFPZmZzZXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBvb2w6UmVuZGVyYWJsZVBvb2wsIHN1Yk1lc2g6TGluZVN1Yk1lc2gsIGxldmVsOm51bWJlciA9IDAsIGluZGV4T2Zmc2V0Om51bWJlciA9IDApXG5cdHtcblx0XHRzdXBlcihwb29sLCBzdWJNZXNoLnBhcmVudE1lc2gsIHN1Yk1lc2gsIGxldmVsLCBpbmRleE9mZnNldCk7XG5cblx0XHR0aGlzLnN1Yk1lc2ggPSBzdWJNZXNoO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7YmFzZS5MaW5lU3ViR2VvbWV0cnl9XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6TGluZVN1Ykdlb21ldHJ5XG5cdHtcblx0XHR2YXIgc3ViR2VvbWV0cnk6TGluZVN1Ykdlb21ldHJ5ID0gdGhpcy5zdWJNZXNoLnN1Ykdlb21ldHJ5O1xuXG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtMaW5lU3ViR2VvbWV0cnkuU1RBUlRfUE9TSVRJT05fREFUQV0gPSB0cnVlO1xuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbTGluZVN1Ykdlb21ldHJ5LkVORF9QT1NJVElPTl9EQVRBXSA9IHRydWU7XG5cblx0XHRpZiAoc3ViR2VvbWV0cnkudGhpY2tuZXNzKVxuXHRcdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtMaW5lU3ViR2VvbWV0cnkuVEhJQ0tORVNTX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS5zdGFydENvbG9ycylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbTGluZVN1Ykdlb21ldHJ5LkNPTE9SX0RBVEFdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBzdWJHZW9tZXRyeTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHBvb2xcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICogQHBhcmFtIGxldmVsXG5cdCAqIEBwYXJhbSBpbmRleE9mZnNldFxuXHQgKiBAcmV0dXJucyB7YXdheS5wb29sLkxpbmVTdWJNZXNoUmVuZGVyYWJsZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBfcEdldE92ZXJmbG93UmVuZGVyYWJsZShwb29sOlJlbmRlcmFibGVQb29sLCBtYXRlcmlhbE93bmVyOklNYXRlcmlhbE93bmVyLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdHJldHVybiBuZXcgTGluZVN1Yk1lc2hSZW5kZXJhYmxlKHBvb2wsIDxMaW5lU3ViTWVzaD4gbWF0ZXJpYWxPd25lciwgbGV2ZWwsIGluZGV4T2Zmc2V0KTtcblx0fVxufVxuXG5leHBvcnQgPSBMaW5lU3ViTWVzaFJlbmRlcmFibGU7Il19 \ No newline at end of file diff --git a/lib/core/pool/LineSubMeshRenderable.ts b/lib/pool/LineSubMeshRenderable.ts similarity index 95% rename from lib/core/pool/LineSubMeshRenderable.ts rename to lib/pool/LineSubMeshRenderable.ts index e460aebd..0cf105ed 100644 --- a/lib/core/pool/LineSubMeshRenderable.ts +++ b/lib/pool/LineSubMeshRenderable.ts @@ -4,7 +4,7 @@ import LineSubGeometry = require("awayjs-display/lib/base/LineSubGeometry"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.LineSubMeshRenderable diff --git a/lib/pool/MaterialData.js b/lib/pool/MaterialData.js new file mode 100755 index 00000000..c12c7058 --- /dev/null +++ b/lib/pool/MaterialData.js @@ -0,0 +1,69 @@ +var MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); +/** + * + * @class away.pool.MaterialData + */ +var MaterialData = (function () { + function MaterialData(pool, context, material) { + this.invalidAnimation = true; + this._pool = pool; + this.context = context; + this.material = material; + this._materialPassDataPool = new MaterialPassDataPool(material); + } + MaterialData.prototype.getMaterialPass = function (materialPass, profile) { + var materialPassData = this._materialPassDataPool.getItem(materialPass); + if (!materialPassData.shaderObject) { + materialPassData.shaderObject = materialPass.createShaderObject(profile); + materialPassData.invalid = true; + } + if (materialPassData.invalid) { + materialPassData.invalid = false; + var compiler = materialPassData.shaderObject.createCompiler(this.material, materialPass); + compiler.compile(); + materialPassData.shadedTarget = compiler.shadedTarget; + materialPassData.vertexCode = compiler.vertexCode; + materialPassData.fragmentCode = compiler.fragmentCode; + materialPassData.postAnimationFragmentCode = compiler.postAnimationFragmentCode; + materialPassData.key = ""; + } + return materialPassData; + }; + MaterialData.prototype.getMaterialPasses = function (profile) { + if (this._passes == null) { + var passes = this.material._iScreenPasses; + var numPasses = passes.length; + //reset the material passes in MaterialData + this._passes = new Array(numPasses); + for (var i = 0; i < numPasses; i++) + this._passes[i] = this.getMaterialPass(passes[i], profile); + } + return this._passes; + }; + /** + * + */ + MaterialData.prototype.dispose = function () { + this._materialPassDataPool.disposePool(); + this._materialPassDataPool = null; + this._pool.disposeItem(this.material); + this._passes = null; + }; + /** + * + */ + MaterialData.prototype.invalidateMaterial = function () { + this._passes = null; + this.invalidateAnimation(); + }; + /** + * + */ + MaterialData.prototype.invalidateAnimation = function () { + this.invalidAnimation = true; + }; + return MaterialData; +})(); +module.exports = MaterialData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL21hdGVyaWFsZGF0YS50cyJdLCJuYW1lcyI6WyJNYXRlcmlhbERhdGEiLCJNYXRlcmlhbERhdGEuY29uc3RydWN0b3IiLCJNYXRlcmlhbERhdGEuZ2V0TWF0ZXJpYWxQYXNzIiwiTWF0ZXJpYWxEYXRhLmdldE1hdGVyaWFsUGFzc2VzIiwiTWF0ZXJpYWxEYXRhLmRpc3Bvc2UiLCJNYXRlcmlhbERhdGEuaW52YWxpZGF0ZU1hdGVyaWFsIiwiTWF0ZXJpYWxEYXRhLmludmFsaWRhdGVBbmltYXRpb24iXSwibWFwcGluZ3MiOiJBQUlBLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQU94RixBQUlBOzs7R0FERztJQUNHLFlBQVk7SUFnQmpCQSxTQWhCS0EsWUFBWUEsQ0FnQkxBLElBQXFCQSxFQUFFQSxPQUFxQkEsRUFBRUEsUUFBNEJBO1FBRi9FQyxxQkFBZ0JBLEdBQVdBLElBQUlBLENBQUNBO1FBSXRDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNsQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLFFBQVFBLENBQUNBO1FBRXpCQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLElBQUlBLG9CQUFvQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7SUFDakVBLENBQUNBO0lBRU1ELHNDQUFlQSxHQUF0QkEsVUFBdUJBLFlBQTZCQSxFQUFFQSxPQUFjQTtRQUVuRUUsSUFBSUEsZ0JBQWdCQSxHQUFvQkEsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxPQUFPQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV6RkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNwQ0EsZ0JBQWdCQSxDQUFDQSxZQUFZQSxHQUFHQSxZQUFZQSxD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QWIsWUFBWSxDQUFDIiwiZmlsZSI6InBvb2wvTWF0ZXJpYWxEYXRhLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJTWF0ZXJpYWxEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9JTWF0ZXJpYWxEYXRhXCIpO1xuXG5pbXBvcnQgTWF0ZXJpYWxEYXRhUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxEYXRhUG9vbFwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFQb29sXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxQYXNzRGF0YVBvb2xcIik7XG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBTdGFnZUdMTWF0ZXJpYWxCYXNlXHRcdFx0PSByZXF1aXJlKFwibWF0ZXJpYWxzL1N0YWdlR0xNYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxQYXNzQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwibWF0ZXJpYWxzL3Bhc3Nlcy9NYXRlcmlhbFBhc3NCYXNlXCIpO1xuaW1wb3J0IFNoYWRlckNvbXBpbGVyQmFzZVx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9jb21waWxhdGlvbi9TaGFkZXJDb21waWxlckJhc2VcIik7XG5pbXBvcnQgU2hhZGVyT2JqZWN0QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwibWF0ZXJpYWxzL2NvbXBpbGF0aW9uL1NoYWRlck9iamVjdEJhc2VcIik7XG5cbi8qKlxuICpcbiAqIEBjbGFzcyBhd2F5LnBvb2wuTWF0ZXJpYWxEYXRhXG4gKi9cbmNsYXNzIE1hdGVyaWFsRGF0YSBpbXBsZW1lbnRzIElNYXRlcmlhbERhdGFcbntcblx0cHJpdmF0ZSBfcG9vbDpNYXRlcmlhbERhdGFQb29sO1xuXG5cdHByaXZhdGUgX21hdGVyaWFsUGFzc0RhdGFQb29sOk1hdGVyaWFsUGFzc0RhdGFQb29sO1xuXG5cdHByaXZhdGUgX3Bhc3NlczpBcnJheTxNYXRlcmlhbFBhc3NEYXRhPjtcblxuXHRwdWJsaWMgY29udGV4dDpDb250ZXh0R0xCYXNlO1xuXG5cdHB1YmxpYyBtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlO1xuXG5cdHB1YmxpYyByZW5kZXJPcmRlcklkOm51bWJlcjtcblxuXHRwdWJsaWMgaW52YWxpZEFuaW1hdGlvbjpib29sZWFuID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwb29sOk1hdGVyaWFsRGF0YVBvb2wsIGNvbnRleHQ6Q29udGV4dEdMQmFzZSwgbWF0ZXJpYWw6U3RhZ2VHTE1hdGVyaWFsQmFzZSlcblx0e1xuXHRcdHRoaXMuX3Bvb2wgPSBwb29sO1xuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXG5cdFx0dGhpcy5fbWF0ZXJpYWxQYXNzRGF0YVBvb2wgPSBuZXcgTWF0ZXJpYWxQYXNzRGF0YVBvb2wobWF0ZXJpYWwpO1xuXHR9XG5cblx0cHVibGljIGdldE1hdGVyaWFsUGFzcyhtYXRlcmlhbFBhc3M6TWF0ZXJpYWxQYXNzQmFzZSwgcHJvZmlsZTpzdHJpbmcpOk1hdGVyaWFsUGFzc0RhdGFcblx0e1xuXHRcdHZhciBtYXRlcmlhbFBhc3NEYXRhOk1hdGVyaWFsUGFzc0RhdGEgPSB0aGlzLl9tYXRlcmlhbFBhc3NEYXRhUG9vbC5nZXRJdGVtKG1hdGVyaWFsUGFzcyk7XG5cblx0XHRpZiAoIW1hdGVyaWFsUGFzc0RhdGEuc2hhZGVyT2JqZWN0KSB7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLnNoYWRlck9iamVjdCA9IG1hdGVyaWFsUGFzcy5jcmVhdGVTaGFkZXJPYmplY3QocHJvZmlsZSk7XG5cdFx0XHRtYXRlcmlhbFBhc3NEYXRhLmludmFsaWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChtYXRlcmlhbFBhc3NEYXRhLmludmFsaWQpIHtcblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuaW52YWxpZCA9IGZhbHNlO1xuXHRcdFx0dmFyIGNvbXBpbGVyOlNoYWRlckNvbXBpbGVyQmFzZSA9IG1hdGVyaWFsUGFzc0RhdGEuc2hhZGVyT2JqZWN0LmNyZWF0ZUNvbXBpbGVyKHRoaXMubWF0ZXJpYWwsIG1hdGVyaWFsUGFzcyk7XG5cdFx0XHRjb21waWxlci5jb21waWxlKCk7XG5cblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuc2hhZGVkVGFyZ2V0ID0gY29tcGlsZXIuc2hhZGVkVGFyZ2V0O1xuXHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS52ZXJ0ZXhDb2RlID0gY29tcGlsZXIudmVydGV4Q29kZTtcblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEuZnJhZ21lbnRDb2RlID0gY29tcGlsZXIuZnJhZ21lbnRDb2RlO1xuXHRcdFx0bWF0ZXJpYWxQYXNzRGF0YS5wb3N0QW5pbWF0aW9uRnJhZ21lbnRDb2RlID0gY29tcGlsZXIucG9zdEFuaW1hdGlvbkZyYWdtZW50Q29kZTtcblx0XHRcdG1hdGVyaWFsUGFzc0RhdGEua2V5ID0gXCJcIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0ZXJpYWxQYXNzRGF0YTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNYXRlcmlhbFBhc3Nlcyhwcm9maWxlOnN0cmluZyk6QXJyYXk8TWF0ZXJpYWxQYXNzRGF0YT5cblx0e1xuXHRcdGlmICh0aGlzLl9wYXNzZXMgPT0gbnVsbCkge1xuXHRcdFx0dmFyIHBhc3NlczpBcnJheTxNYXRlcmlhbFBhc3NCYXNlPiA9IDxBcnJheTxNYXRlcmlhbFBhc3NCYXNlPj4gdGhpcy5tYXRlcmlhbC5faVNjcmVlblBhc3Nlcztcblx0XHRcdHZhciBudW1QYXNzZXM6bnVtYmVyID0gcGFzc2VzLmxlbmd0aDtcblxuXHRcdFx0Ly9yZXNldCB0aGUgbWF0ZXJpYWwgcGFzc2VzIGluIE1hdGVyaWFsRGF0YVxuXHRcdFx0dGhpcy5fcGFzc2VzID0gbmV3IEFycmF5PE1hdGVyaWFsUGFzc0RhdGE+KG51bVBhc3Nlcyk7XG5cblx0XHRcdC8vZ2V0IHRoZSBzaGFkZXIgb2JqZWN0IGZvciBlYWNoIHNjcmVlbiBwYXNzIGFuZCBzdG9yZVxuXHRcdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgbnVtUGFzc2VzOyBpKyspXG5cdFx0XHRcdHRoaXMuX3Bhc3Nlc1tpXSA9IHRoaXMuZ2V0TWF0ZXJpYWxQYXNzKHBhc3Nlc1tpXSwgcHJvZmlsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3Bhc3Nlcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fbWF0ZXJpYWxQYXNzRGF0YVBvb2wuZGlzcG9zZVBvb2woKTtcblxuXHRcdHRoaXMuX21hdGVyaWFsUGFzc0RhdGFQb29sID0gbnVsbDtcblxuXHRcdHRoaXMuX3Bvb2wuZGlzcG9zZUl0ZW0odGhpcy5tYXRlcmlhbCk7XG5cblx0XHR0aGlzLl9wYXNzZXMgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgaW52YWxpZGF0ZU1hdGVyaWFsKClcblx0e1xuXHRcdHRoaXMuX3Bhc3NlcyA9IG51bGw7XG5cblx0XHR0aGlzLmludmFsaWRhdGVBbmltYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGludmFsaWRhdGVBbmltYXRpb24oKVxuXHR7XG5cdFx0dGhpcy5pbnZhbGlkQW5pbWF0aW9uID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgPSBNYXRlcmlhbERhdGE7Il19 \ No newline at end of file diff --git a/lib/core/pool/MaterialData.ts b/lib/pool/MaterialData.ts similarity index 77% rename from lib/core/pool/MaterialData.ts rename to lib/pool/MaterialData.ts index 88b4d5eb..734fc8ff 100644 --- a/lib/core/pool/MaterialData.ts +++ b/lib/pool/MaterialData.ts @@ -1,13 +1,13 @@ import IMaterialData = require("awayjs-display/lib/pool/IMaterialData"); -import MaterialDataPool = require("awayjs-stagegl/lib/core/pool/MaterialDataPool"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -import ShaderCompilerBase = require("awayjs-stagegl/lib/materials/compilation/ShaderCompilerBase"); -import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +import MaterialDataPool = require("awayjs-stagegl/lib/pool/MaterialDataPool"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import StageGLMaterialBase = require("materials/StageGLMaterialBase"); +import MaterialPassBase = require("materials/passes/MaterialPassBase"); +import ShaderCompilerBase = require("materials/compilation/ShaderCompilerBase"); +import ShaderObjectBase = require("materials/compilation/ShaderObjectBase"); /** * diff --git a/lib/pool/MaterialDataPool.js b/lib/pool/MaterialDataPool.js new file mode 100755 index 00000000..282f2d9f --- /dev/null +++ b/lib/pool/MaterialDataPool.js @@ -0,0 +1,37 @@ +var MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +/** + * @class away.pool.MaterialDataPool + */ +var MaterialDataPool = (function () { + /** + * //TODO + * + * @param textureDataClass + */ + function MaterialDataPool(context) { + this._pool = new Object(); + this._context = context; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + MaterialDataPool.prototype.getItem = function (material) { + return (this._pool[material.id] || (this._pool[material.id] = material._iAddMaterialData(new MaterialData(this, this._context, material)))); + }; + /** + * //TODO + * + * @param materialOwner + */ + MaterialDataPool.prototype.disposeItem = function (material) { + material._iRemoveMaterialData(this._pool[material.id]); + this._pool[material.id] = null; + }; + return MaterialDataPool; +})(); +module.exports = MaterialDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL21hdGVyaWFsZGF0YXBvb2wudHMiXSwibmFtZXMiOlsiTWF0ZXJpYWxEYXRhUG9vbCIsIk1hdGVyaWFsRGF0YVBvb2wuY29uc3RydWN0b3IiLCJNYXRlcmlhbERhdGFQb29sLmdldEl0ZW0iLCJNYXRlcmlhbERhdGFQb29sLmRpc3Bvc2VJdGVtIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLFlBQVksV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBSTFFLEFBR0E7O0dBREc7SUFDRyxnQkFBZ0I7SUFLckJBOzs7O09BSUdBO0lBQ0hBLFNBVktBLGdCQUFnQkEsQ0FVVEEsT0FBcUJBO1FBUnpCQyxVQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtRQVVuQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsT0FBT0EsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSxrQ0FBT0EsR0FBZEEsVUFBZUEsUUFBNEJBO1FBRTFDRSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQSxFQUFFQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxRQUFRQSxDQUFDQSxpQkFBaUJBLENBQUNBLElBQUlBLFlBQVlBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLEVBQUVBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUFBO0lBQzVJQSxDQUFDQTtJQUVERjs7OztPQUlHQTtJQUNJQSxzQ0FBV0EsR0FBbEJBLFVBQW1CQSxRQUE0QkE7UUFFOUNHLFFBQVFBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFdkRBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO0lBQ2hDQSxDQUFDQTtJQUNGSCx1QkFBQ0E7QUFBREEsQ0FyQ0EsQUFxQ0NBLElBQUE7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoicG9vbC9NYXRlcmlhbERhdGFQb29sLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYXRlcmlhbERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvTWF0ZXJpYWxEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTEJhc2VcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuXG4vKipcbiAqIEBjbGFzcyBhd2F5LnBvb2wuTWF0ZXJpYWxEYXRhUG9vbFxuICovXG5jbGFzcyBNYXRlcmlhbERhdGFQb29sXG57XG5cdHByaXZhdGUgX3Bvb2w6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRHTEJhc2U7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gdGV4dHVyZURhdGFDbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0R0xCYXNlKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqIEByZXR1cm5zIElUZXh0dXJlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SXRlbShtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlKTpNYXRlcmlhbERhdGFcblx0e1xuXHRcdHJldHVybiAodGhpcy5fcG9vbFttYXRlcmlhbC5pZF0gfHwgKHRoaXMuX3Bvb2xbbWF0ZXJpYWwuaWRdID0gbWF0ZXJpYWwuX2lBZGRNYXRlcmlhbERhdGEobmV3IE1hdGVyaWFsRGF0YSh0aGlzLCB0aGlzLl9jb250ZXh0LCBtYXRlcmlhbCkpKSlcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlSXRlbShtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlKVxuXHR7XG5cdFx0bWF0ZXJpYWwuX2lSZW1vdmVNYXRlcmlhbERhdGEodGhpcy5fcG9vbFttYXRlcmlhbC5pZF0pO1xuXG5cdFx0dGhpcy5fcG9vbFttYXRlcmlhbC5pZF0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCA9IE1hdGVyaWFsRGF0YVBvb2w7Il19 \ No newline at end of file diff --git a/lib/core/pool/MaterialDataPool.ts b/lib/pool/MaterialDataPool.ts similarity index 75% rename from lib/core/pool/MaterialDataPool.ts rename to lib/pool/MaterialDataPool.ts index 5fa2f555..a78a0f08 100644 --- a/lib/core/pool/MaterialDataPool.ts +++ b/lib/pool/MaterialDataPool.ts @@ -1,6 +1,6 @@ -import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); +import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import StageGLMaterialBase = require("materials/StageGLMaterialBase"); /** * @class away.pool.MaterialDataPool diff --git a/lib/pool/MaterialPassData.js b/lib/pool/MaterialPassData.js new file mode 100755 index 00000000..0e777514 --- /dev/null +++ b/lib/pool/MaterialPassData.js @@ -0,0 +1,33 @@ +/** + * + * @class away.pool.MaterialPassData + */ +var MaterialPassData = (function () { + function MaterialPassData(pool, material, materialPass) { + this.animationVertexCode = ""; + this.animationFragmentCode = ""; + this._pool = pool; + this.material = material; + this.materialPass = materialPass; + } + /** + * + */ + MaterialPassData.prototype.dispose = function () { + this._pool.disposeItem(this.materialPass); + this.shaderObject.dispose(); + this.shaderObject = null; + this.programData.dispose(); + this.programData = null; + }; + /** + * + */ + MaterialPassData.prototype.invalidate = function () { + this.invalid = true; + }; + return MaterialPassData; +})(); +module.exports = MaterialPassData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL21hdGVyaWFscGFzc2RhdGEudHMiXSwibmFtZXMiOlsiTWF0ZXJpYWxQYXNzRGF0YSIsIk1hdGVyaWFsUGFzc0RhdGEuY29uc3RydWN0b3IiLCJNYXRlcmlhbFBhc3NEYXRhLmRpc3Bvc2UiLCJNYXRlcmlhbFBhc3NEYXRhLmludmFsaWRhdGUiXSwibWFwcGluZ3MiOiJBQVNBLEFBSUE7OztHQURHO0lBQ0csZ0JBQWdCO0lBOEJyQkEsU0E5QktBLGdCQUFnQkEsQ0E4QlRBLElBQXlCQSxFQUFFQSxRQUE0QkEsRUFBRUEsWUFBNkJBO1FBVjNGQyx3QkFBbUJBLEdBQVVBLEVBQUVBLENBQUNBO1FBRWhDQSwwQkFBcUJBLEdBQVVBLEVBQUVBLENBQUNBO1FBVXhDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNsQkEsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFDekJBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLFlBQVlBLENBQUNBO0lBQ2xDQSxDQUFDQTtJQUVERDs7T0FFR0E7SUFDSUEsa0NBQU9BLEdBQWRBO1FBRUNFLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLENBQUNBO1FBRTFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUM1QkEsSUFBSUEsQ0FBQ0EsWUFBWUEsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFekJBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQzNCQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFREY7O09BRUdBO0lBQ0lBLHFDQUFVQSxHQUFqQkE7UUFFQ0csSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDckJBLENBQUNBO0lBQ0ZILHVCQUFDQTtBQUFEQSxDQTFEQSxBQTBEQ0EsSUFBQTtBQUVELEFBQTBCLGlCQUFqQixnQkFBZ0IsQ0FBQyIsImZpbGUiOiJwb29sL01hdGVyaWFsUGFzc0RhdGEuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElNYXRlcmlhbFBhc3NEYXRhXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvSU1hdGVyaWFsUGFzc0RhdGFcIik7XG5cbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhUG9vbFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsUGFzc0RhdGFQb29sXCIpO1xuaW1wb3J0IFByb2dyYW1EYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1Byb2dyYW1EYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTEJhc2VcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJtYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcblxuLyoqXG4gKlxuICogQGNsYXNzIGF3YXkucG9vbC5NYXRlcmlhbFBhc3NEYXRhXG4gKi9cbmNsYXNzIE1hdGVyaWFsUGFzc0RhdGEgaW1wbGVtZW50cyBJTWF0ZXJpYWxQYXNzRGF0YVxue1xuXHRwcml2YXRlIF9wb29sOk1hdGVyaWFsUGFzc0RhdGFQb29sO1xuXG5cdHB1YmxpYyBtYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlO1xuXG5cdHB1YmxpYyBzaGFkZXJPYmplY3Q6U2hhZGVyT2JqZWN0QmFzZTtcblxuXHRwdWJsaWMgbWF0ZXJpYWxQYXNzOk1hdGVyaWFsUGFzc0Jhc2U7XG5cblx0cHVibGljIHByb2dyYW1EYXRhOlByb2dyYW1EYXRhO1xuXG5cdHB1YmxpYyBzaGFkZWRUYXJnZXQ6c3RyaW5nO1xuXG5cdHB1YmxpYyB2ZXJ0ZXhDb2RlOnN0cmluZztcblxuXHRwdWJsaWMgcG9zdEFuaW1hdGlvbkZyYWdtZW50Q29kZTpzdHJpbmc7XG5cblx0cHVibGljIGZyYWdtZW50Q29kZTpzdHJpbmc7XG5cblx0cHVibGljIGFuaW1hdGlvblZlcnRleENvZGU6c3RyaW5nID0gXCJcIjtcblxuXHRwdWJsaWMgYW5pbWF0aW9uRnJhZ21lbnRDb2RlOnN0cmluZyA9IFwiXCI7XG5cblx0cHVibGljIGtleTpzdHJpbmc7XG5cblx0cHVibGljIGludmFsaWQ6Ym9vbGVhbjtcblxuXHRwdWJsaWMgdXNlc0FuaW1hdGlvbjpib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHBvb2w6TWF0ZXJpYWxQYXNzRGF0YVBvb2wsIG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UsIG1hdGVyaWFsUGFzczpNYXRlcmlhbFBhc3NCYXNlKVxuXHR7XG5cdFx0dGhpcy5fcG9vbCA9IHBvb2w7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHRoaXMubWF0ZXJpYWxQYXNzID0gbWF0ZXJpYWxQYXNzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9wb29sLmRpc3Bvc2VJdGVtKHRoaXMubWF0ZXJpYWxQYXNzKTtcblxuXHRcdHRoaXMuc2hhZGVyT2JqZWN0LmRpc3Bvc2UoKTtcblx0XHR0aGlzLnNoYWRlck9iamVjdCA9IG51bGw7XG5cblx0XHR0aGlzLnByb2dyYW1EYXRhLmRpc3Bvc2UoKTtcblx0XHR0aGlzLnByb2dyYW1EYXRhID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGludmFsaWRhdGUoKVxuXHR7XG5cdFx0dGhpcy5pbnZhbGlkID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgPSBNYXRlcmlhbFBhc3NEYXRhOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/MaterialPassData.ts b/lib/pool/MaterialPassData.ts similarity index 68% rename from lib/core/pool/MaterialPassData.ts rename to lib/pool/MaterialPassData.ts index 56382b36..ba4986b2 100644 --- a/lib/core/pool/MaterialPassData.ts +++ b/lib/pool/MaterialPassData.ts @@ -1,11 +1,11 @@ import IMaterialPassData = require("awayjs-display/lib/pool/IMaterialPassData"); -import MaterialPassDataPool = require("awayjs-stagegl/lib/core/pool/MaterialPassDataPool"); -import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); -import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +import MaterialPassDataPool = require("awayjs-stagegl/lib/pool/MaterialPassDataPool"); +import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import StageGLMaterialBase = require("materials/StageGLMaterialBase"); +import MaterialPassBase = require("materials/passes/MaterialPassBase"); +import ShaderObjectBase = require("materials/compilation/ShaderObjectBase"); /** * diff --git a/lib/pool/MaterialPassDataPool.js b/lib/pool/MaterialPassDataPool.js new file mode 100755 index 00000000..ce73fcb8 --- /dev/null +++ b/lib/pool/MaterialPassDataPool.js @@ -0,0 +1,42 @@ +var MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +/** + * @class away.pool.MaterialPassDataPool + */ +var MaterialPassDataPool = (function () { + /** + * //TODO + * + * @param textureDataClass + */ + function MaterialPassDataPool(material) { + this._pool = new Object(); + this._material = material; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + MaterialPassDataPool.prototype.getItem = function (materialPass) { + return (this._pool[materialPass.id] || (this._pool[materialPass.id] = this._material._iAddMaterialPassData(materialPass._iAddMaterialPassData(new MaterialPassData(this, this._material, materialPass))))); + }; + /** + * //TODO + * + * @param materialOwner + */ + MaterialPassDataPool.prototype.disposeItem = function (materialPass) { + materialPass._iRemoveMaterialPassData(this._pool[materialPass.id]); + delete this._pool[materialPass.id]; + }; + MaterialPassDataPool.prototype.disposePool = function () { + for (var id in this._pool) + this._pool[id].materialPass._iRemoveMaterialPassData(this._pool[id]); + delete this._pool; + }; + return MaterialPassDataPool; +})(); +module.exports = MaterialPassDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL21hdGVyaWFscGFzc2RhdGFwb29sLnRzIl0sIm5hbWVzIjpbIk1hdGVyaWFsUGFzc0RhdGFQb29sIiwiTWF0ZXJpYWxQYXNzRGF0YVBvb2wuY29uc3RydWN0b3IiLCJNYXRlcmlhbFBhc3NEYXRhUG9vbC5nZXRJdGVtIiwiTWF0ZXJpYWxQYXNzRGF0YVBvb2wuZGlzcG9zZUl0ZW0iLCJNYXRlcmlhbFBhc3NEYXRhUG9vbC5kaXNwb3NlUG9vbCJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxnQkFBZ0IsV0FBYywwQ0FBMEMsQ0FBQyxDQUFDO0FBSWpGLEFBR0E7O0dBREc7SUFDRyxvQkFBb0I7SUFLekJBOzs7O09BSUdBO0lBQ0hBLFNBVktBLG9CQUFvQkEsQ0FVYkEsUUFBNEJBO1FBUmhDQyxVQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtRQVVuQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsUUFBUUEsQ0FBQ0E7SUFDM0JBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSxzQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxxQkFBcUJBLENBQUNBLFlBQVlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsSUFBSUEsZ0JBQWdCQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxTQUFTQSxFQUFFQSxZQUFZQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUM1TUEsQ0FBQ0E7SUFFREY7Ozs7T0FJR0E7SUFDSUEsMENBQVdBLEdBQWxCQSxVQUFtQkEsWUFBNkJBO1FBRS9DRyxZQUFZQSxDQUFDQSx3QkFBd0JBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBRW5FQSxPQUFPQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQTtJQUNwQ0EsQ0FBQ0E7SUFFTUgsMENBQVdBLEdBQWxCQTtRQUVDSSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxJQUFJQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQTtZQUNMQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFFQSxDQUFDQSxZQUFZQSxDQUFDQSx3QkFBd0JBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBRTNGQSxPQUFPQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQTtJQUNuQkEsQ0FBQ0E7SUFDRkosMkJBQUNBO0FBQURBLENBN0NBLEFBNkNDQSxJQUFBO0FBRUQsQUFBOEIsaUJBQXJCLG9CQUFvQixDQUFDIiwiZmlsZSI6InBvb2wvTWF0ZXJpYWxQYXNzRGF0YVBvb2wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdGVyaWFsUGFzc0RhdGFcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsUGFzc0RhdGFcIik7XG5pbXBvcnQgU3RhZ2VHTE1hdGVyaWFsQmFzZVx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9TdGFnZUdMTWF0ZXJpYWxCYXNlXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcIm1hdGVyaWFscy9wYXNzZXMvTWF0ZXJpYWxQYXNzQmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLk1hdGVyaWFsUGFzc0RhdGFQb29sXG4gKi9cbmNsYXNzIE1hdGVyaWFsUGFzc0RhdGFQb29sXG57XG5cdHByaXZhdGUgX3Bvb2w6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9tYXRlcmlhbDpTdGFnZUdMTWF0ZXJpYWxCYXNlO1xuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHRleHR1cmVEYXRhQ2xhc3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKG1hdGVyaWFsOlN0YWdlR0xNYXRlcmlhbEJhc2UpXG5cdHtcblx0XHR0aGlzLl9tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxPd25lclxuXHQgKiBAcmV0dXJucyBJVGV4dHVyZVxuXHQgKi9cblx0cHVibGljIGdldEl0ZW0obWF0ZXJpYWxQYXNzOk1hdGVyaWFsUGFzc0Jhc2UpOk1hdGVyaWFsUGFzc0RhdGFcblx0e1xuXHRcdHJldHVybiAodGhpcy5fcG9vbFttYXRlcmlhbFBhc3MuaWRdIHx8ICh0aGlzLl9wb29sW21hdGVyaWFsUGFzcy5pZF0gPSB0aGlzLl9tYXRlcmlhbC5faUFkZE1hdGVyaWFsUGFzc0RhdGEobWF0ZXJpYWxQYXNzLl9pQWRkTWF0ZXJpYWxQYXNzRGF0YShuZXcgTWF0ZXJpYWxQYXNzRGF0YSh0aGlzLCB0aGlzLl9tYXRlcmlhbCwgbWF0ZXJpYWxQYXNzKSkpKSk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZUl0ZW0obWF0ZXJpYWxQYXNzOk1hdGVyaWFsUGFzc0Jhc2UpXG5cdHtcblx0XHRtYXRlcmlhbFBhc3MuX2lSZW1vdmVNYXRlcmlhbFBhc3NEYXRhKHRoaXMuX3Bvb2xbbWF0ZXJpYWxQYXNzLmlkXSk7XG5cblx0XHRkZWxldGUgdGhpcy5fcG9vbFttYXRlcmlhbFBhc3MuaWRdO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2VQb29sKClcblx0e1xuXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX3Bvb2wpXG5cdFx0XHQoPE1hdGVyaWFsUGFzc0RhdGE+IHRoaXMuX3Bvb2xbaWRdKS5tYXRlcmlhbFBhc3MuX2lSZW1vdmVNYXRlcmlhbFBhc3NEYXRhKHRoaXMuX3Bvb2xbaWRdKTtcblxuXHRcdGRlbGV0ZSB0aGlzLl9wb29sO1xuXHR9XG59XG5cbmV4cG9ydCA9IE1hdGVyaWFsUGFzc0RhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/MaterialPassDataPool.ts b/lib/pool/MaterialPassDataPool.ts similarity index 79% rename from lib/core/pool/MaterialPassDataPool.ts rename to lib/pool/MaterialPassDataPool.ts index b346c5a5..e83efe98 100644 --- a/lib/core/pool/MaterialPassDataPool.ts +++ b/lib/pool/MaterialPassDataPool.ts @@ -1,6 +1,6 @@ -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import StageGLMaterialBase = require("awayjs-stagegl/lib/materials/StageGLMaterialBase"); -import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import StageGLMaterialBase = require("materials/StageGLMaterialBase"); +import MaterialPassBase = require("materials/passes/MaterialPassBase"); /** * @class away.pool.MaterialPassDataPool diff --git a/lib/pool/ProgramData.js b/lib/pool/ProgramData.js new file mode 100755 index 00000000..14f30ecb --- /dev/null +++ b/lib/pool/ProgramData.js @@ -0,0 +1,31 @@ +/** + * + * @class away.pool.ProgramDataBase + */ +var ProgramData = (function () { + function ProgramData(pool, context, key) { + this.usages = 0; + this._pool = pool; + this.context = context; + this._key = key; + this.context.registerProgram(this); + } + /** + * + */ + ProgramData.prototype.dispose = function () { + this.usages--; + if (!this.usages) { + this._pool.disposeItem(this._key); + this.context.unRegisterProgram(this); + if (this.program) + this.program.dispose(); + } + this.program = null; + }; + ProgramData.PROGRAMDATA_ID_COUNT = 0; + return ProgramData; +})(); +module.exports = ProgramData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3Byb2dyYW1kYXRhLnRzIl0sIm5hbWVzIjpbIlByb2dyYW1EYXRhIiwiUHJvZ3JhbURhdGEuY29uc3RydWN0b3IiLCJQcm9ncmFtRGF0YS5kaXNwb3NlIl0sIm1hcHBpbmdzIjoiQUFJQSxBQUlBOzs7R0FERztJQUNHLFdBQVc7SUFlaEJBLFNBZktBLFdBQVdBLENBZUpBLElBQW9CQSxFQUFFQSxPQUFxQkEsRUFBRUEsR0FBVUE7UUFONURDLFdBQU1BLEdBQVVBLENBQUNBLENBQUNBO1FBUXhCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNsQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsT0FBT0EsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLEdBQUdBLENBQUNBO1FBQ2hCQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtJQUNwQ0EsQ0FBQ0E7SUFFREQ7O09BRUdBO0lBQ0lBLDZCQUFPQSxHQUFkQTtRQUVDRSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQTtRQUVkQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNsQkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFFbENBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLGlCQUFpQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFFckNBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBO2dCQUNoQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDekJBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQXRDYUYsZ0NBQW9CQSxHQUFVQSxDQUFDQSxDQUFDQTtJQXVDL0NBLGtCQUFDQTtBQUFEQSxDQXpDQSxBQXlDQ0EsSUFBQTtBQUVELEFBQXFCLGlCQUFaLFdBQVcsQ0FBQyIsImZpbGUiOiJwb29sL1Byb2dyYW1EYXRhLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9ncmFtRGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1Byb2dyYW1EYXRhUG9vbFwiKTtcbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElQcm9ncmFtXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSVByb2dyYW1cIik7XG5cbi8qKlxuICpcbiAqIEBjbGFzcyBhd2F5LnBvb2wuUHJvZ3JhbURhdGFCYXNlXG4gKi9cbmNsYXNzIFByb2dyYW1EYXRhXG57XG5cdHB1YmxpYyBzdGF0aWMgUFJPR1JBTURBVEFfSURfQ09VTlQ6bnVtYmVyID0gMDtcblxuXHRwcml2YXRlIF9wb29sOlByb2dyYW1EYXRhUG9vbDtcblx0cHJpdmF0ZSBfa2V5OnN0cmluZztcblxuXHRwdWJsaWMgY29udGV4dDpDb250ZXh0R0xCYXNlO1xuXG5cdHB1YmxpYyB1c2FnZXM6bnVtYmVyID0gMDtcblxuXHRwdWJsaWMgcHJvZ3JhbTpJUHJvZ3JhbTtcblxuXHRwdWJsaWMgaWQ6bnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKHBvb2w6UHJvZ3JhbURhdGFQb29sLCBjb250ZXh0OkNvbnRleHRHTEJhc2UsIGtleTpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9wb29sID0gcG9vbDtcblx0XHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHRcdHRoaXMuX2tleSA9IGtleTtcblx0XHR0aGlzLmNvbnRleHQucmVnaXN0ZXJQcm9ncmFtKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLnVzYWdlcy0tO1xuXG5cdFx0aWYgKCF0aGlzLnVzYWdlcykge1xuXHRcdFx0dGhpcy5fcG9vbC5kaXNwb3NlSXRlbSh0aGlzLl9rZXkpO1xuXG5cdFx0XHR0aGlzLmNvbnRleHQudW5SZWdpc3RlclByb2dyYW0odGhpcyk7XG5cblx0XHRcdGlmICh0aGlzLnByb2dyYW0pXG5cdFx0XHRcdHRoaXMucHJvZ3JhbS5kaXNwb3NlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9ncmFtID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgPSBQcm9ncmFtRGF0YTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/ProgramData.ts b/lib/pool/ProgramData.ts similarity index 74% rename from lib/core/pool/ProgramData.ts rename to lib/pool/ProgramData.ts index b27622b8..d77a3532 100644 --- a/lib/core/pool/ProgramData.ts +++ b/lib/pool/ProgramData.ts @@ -1,6 +1,6 @@ -import ProgramDataPool = require("awayjs-stagegl/lib/core/pool/ProgramDataPool"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import IProgram = require("awayjs-stagegl/lib/core/stagegl/IProgram"); +import ProgramDataPool = require("awayjs-stagegl/lib/pool/ProgramDataPool"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import IProgram = require("awayjs-stagegl/lib/base/IProgram"); /** * diff --git a/lib/pool/ProgramDataPool.js b/lib/pool/ProgramDataPool.js new file mode 100755 index 00000000..1b333a84 --- /dev/null +++ b/lib/pool/ProgramDataPool.js @@ -0,0 +1,36 @@ +var ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); +/** + * @class away.pool.ProgramDataPool + */ +var ProgramDataPool = (function () { + /** + * //TODO + * + * @param textureDataClass + */ + function ProgramDataPool(context) { + this._pool = new Object(); + this._context = context; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + ProgramDataPool.prototype.getItem = function (key) { + return this._pool[key] || (this._pool[key] = new ProgramData(this, this._context, key)); + }; + /** + * //TODO + * + * @param materialOwner + */ + ProgramDataPool.prototype.disposeItem = function (key) { + this._pool[key] = null; + }; + return ProgramDataPool; +})(); +module.exports = ProgramDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3Byb2dyYW1kYXRhcG9vbC50cyJdLCJuYW1lcyI6WyJQcm9ncmFtRGF0YVBvb2wiLCJQcm9ncmFtRGF0YVBvb2wuY29uc3RydWN0b3IiLCJQcm9ncmFtRGF0YVBvb2wuZ2V0SXRlbSIsIlByb2dyYW1EYXRhUG9vbC5kaXNwb3NlSXRlbSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxXQUFXLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUl4RSxBQUdBOztHQURHO0lBQ0csZUFBZTtJQUtwQkE7Ozs7T0FJR0E7SUFDSEEsU0FWS0EsZUFBZUEsQ0FVUkEsT0FBcUJBO1FBUnpCQyxVQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtRQVVuQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsT0FBT0EsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSxpQ0FBT0EsR0FBZEEsVUFBZUEsR0FBVUE7UUFFeEJFLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLENBQUNBLEdBQUdBLElBQUlBLFdBQVdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLEVBQUVBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO0lBQ3pGQSxDQUFDQTtJQUVERjs7OztPQUlHQTtJQUNJQSxxQ0FBV0EsR0FBbEJBLFVBQW1CQSxHQUFVQTtRQUU1QkcsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDeEJBLENBQUNBO0lBQ0ZILHNCQUFDQTtBQUFEQSxDQW5DQSxBQW1DQ0EsSUFBQTtBQUVELEFBQXlCLGlCQUFoQixlQUFlLENBQUMiLCJmaWxlIjoicG9vbC9Qcm9ncmFtRGF0YVBvb2wuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlUHJveHlCYXNlXCIpO1xuXG5pbXBvcnQgUHJvZ3JhbURhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUHJvZ3JhbURhdGFcIik7XG5pbXBvcnQgQ29udGV4dEdMQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmFzZVwiKTtcbmltcG9ydCBTaGFkZXJPYmplY3RCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJtYXRlcmlhbHMvY29tcGlsYXRpb24vU2hhZGVyT2JqZWN0QmFzZVwiKTtcblxuLyoqXG4gKiBAY2xhc3MgYXdheS5wb29sLlByb2dyYW1EYXRhUG9vbFxuICovXG5jbGFzcyBQcm9ncmFtRGF0YVBvb2xcbntcblx0cHJpdmF0ZSBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cdHByaXZhdGUgX2NvbnRleHQ6Q29udGV4dEdMQmFzZTtcblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSB0ZXh0dXJlRGF0YUNsYXNzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OkNvbnRleHRHTEJhc2UpXG5cdHtcblx0XHR0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIG1hdGVyaWFsT3duZXJcblx0ICogQHJldHVybnMgSVRleHR1cmVcblx0ICovXG5cdHB1YmxpYyBnZXRJdGVtKGtleTpzdHJpbmcpOlByb2dyYW1EYXRhXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fcG9vbFtrZXldIHx8ICh0aGlzLl9wb29sW2tleV0gPSBuZXcgUHJvZ3JhbURhdGEodGhpcywgdGhpcy5fY29udGV4dCwga2V5KSk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqL1xuXHRwdWJsaWMgZGlzcG9zZUl0ZW0oa2V5OnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3Bvb2xba2V5XSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gUHJvZ3JhbURhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/ProgramDataPool.ts b/lib/pool/ProgramDataPool.ts similarity index 72% rename from lib/core/pool/ProgramDataPool.ts rename to lib/pool/ProgramDataPool.ts index 74ca6487..d203d858 100644 --- a/lib/core/pool/ProgramDataPool.ts +++ b/lib/pool/ProgramDataPool.ts @@ -1,8 +1,8 @@ import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); -import ProgramData = require("awayjs-stagegl/lib/core/pool/ProgramData"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import ShaderObjectBase = require("awayjs-stagegl/lib/materials/compilation/ShaderObjectBase"); +import ProgramData = require("awayjs-stagegl/lib/pool/ProgramData"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import ShaderObjectBase = require("materials/compilation/ShaderObjectBase"); /** * @class away.pool.ProgramDataPool diff --git a/lib/pool/RenderableBase.js b/lib/pool/RenderableBase.js new file mode 100755 index 00000000..039898ed --- /dev/null +++ b/lib/pool/RenderableBase.js @@ -0,0 +1,228 @@ +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); +var IndexDataPool = require("awayjs-stagegl/lib/pool/IndexDataPool"); +var VertexDataPool = require("awayjs-stagegl/lib/pool/VertexDataPool"); +/** + * @class RenderableListItem + */ +var RenderableBase = (function () { + /** + * + * @param sourceEntity + * @param materialOwner + * @param subGeometry + * @param animationSubGeometry + */ + function RenderableBase(pool, sourceEntity, materialOwner, level, indexOffset) { + var _this = this; + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + this._geometryDirty = true; + this._indexDataDirty = true; + this._vertexData = new Object(); + this._pVertexDataDirty = new Object(); + this._vertexOffset = new Object(); + this._onIndicesUpdatedDelegate = function (event) { return _this._onIndicesUpdated(event); }; + this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; + //store a reference to the pool for later disposal + this._pool = pool; + //reference to level of overflow + this._level = level; + //reference to the offset on indices (if this is an overflow renderable) + this._indexOffset = indexOffset; + this.sourceEntity = sourceEntity; + this.materialOwner = materialOwner; + } + Object.defineProperty(RenderableBase.prototype, "overflow", { + /** + * + */ + get: function () { + if (this._indexDataDirty) + this._updateIndexData(); + return this._overflow; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RenderableBase.prototype, "numTriangles", { + /** + * + */ + get: function () { + return this._numTriangles; + }, + enumerable: true, + configurable: true + }); + /** + * + */ + RenderableBase.prototype.getIndexData = function () { + if (this._indexDataDirty) + this._updateIndexData(); + return this._indexData; + }; + /** + * + */ + RenderableBase.prototype.getVertexData = function (dataType) { + if (this._indexDataDirty) + this._updateIndexData(); + if (this._pVertexDataDirty[dataType]) + this._updateVertexData(dataType); + return this._vertexData[this._concatenateArrays ? TriangleSubGeometry.VERTEX_DATA : dataType]; + }; + /** + * + */ + RenderableBase.prototype.getVertexOffset = function (dataType) { + if (this._indexDataDirty) + this._updateIndexData(); + if (this._pVertexDataDirty[dataType]) + this._updateVertexData(dataType); + return this._vertexOffset[dataType]; + }; + RenderableBase.prototype.dispose = function () { + this._pool.disposeItem(this.materialOwner); + this._indexData.dispose(); + this._indexData = null; + for (var dataType in this._vertexData) { + this._vertexData[dataType].dispose(); + this._vertexData[dataType] = null; + } + if (this._overflow) { + this._overflow.dispose(); + this._overflow = null; + } + }; + RenderableBase.prototype.invalidateGeometry = function () { + this._geometryDirty = true; + //invalidate indices + if (this._level == 0) + this._indexDataDirty = true; + if (this._overflow) + this._overflow.invalidateGeometry(); + }; + /** + * + */ + RenderableBase.prototype.invalidateIndexData = function () { + this._indexDataDirty = true; + }; + /** + * //TODO + * + * @param dataType + */ + RenderableBase.prototype.invalidateVertexData = function (dataType) { + this._pVertexDataDirty[dataType] = true; + }; + RenderableBase.prototype._pGetSubGeometry = function () { + throw new AbstractMethodError(); + }; + /** + * //TODO + * + * @param subGeometry + * @param offset + * @internal + */ + RenderableBase.prototype._iFillIndexData = function (indexOffset) { + if (this._geometryDirty) + this._updateGeometry(); + this._indexData = IndexDataPool.getItem(this._subGeometry, this._level, indexOffset); + this._numTriangles = this._indexData.data.length / 3; + indexOffset = this._indexData.offset; + //check if there is more to split + if (indexOffset < this._subGeometry.indices.length) { + if (!this._overflow) + this._overflow = this._pGetOverflowRenderable(this._pool, this.materialOwner, indexOffset, this._level + 1); + this._overflow._iFillIndexData(indexOffset); + } + else if (this._overflow) { + this._overflow.dispose(); + this._overflow = null; + } + }; + RenderableBase.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + throw new AbstractMethodError(); + }; + /** + * //TODO + * + * @private + */ + RenderableBase.prototype._updateGeometry = function () { + if (this._subGeometry) { + if (this._level == 0) + this._subGeometry.removeEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); + this._subGeometry.removeEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + } + this._subGeometry = this._pGetSubGeometry(); + this._concatenateArrays = this._subGeometry.concatenateArrays; + if (this._subGeometry) { + if (this._level == 0) + this._subGeometry.addEventListener(SubGeometryEvent.INDICES_UPDATED, this._onIndicesUpdatedDelegate); + this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + } + //dispose + // if (this._indexData) { + // this._indexData.dispose(); //TODO where is a good place to dispose? + // this._indexData = null; + // } + // for (var dataType in this._vertexData) { + // ( this._vertexData[dataType]).dispose(); //TODO where is a good place to dispose? + // this._vertexData[dataType] = null; + // } + this._geometryDirty = false; + //specific vertex data types have to be invalidated in the specific renderable + }; + /** + * //TODO + * + * @private + */ + RenderableBase.prototype._updateIndexData = function () { + this._iFillIndexData(this._indexOffset); + this._indexDataDirty = false; + }; + /** + * //TODO + * + * @param dataType + * @private + */ + RenderableBase.prototype._updateVertexData = function (dataType) { + this._vertexOffset[dataType] = this._subGeometry.getOffset(dataType); + if (this._subGeometry.concatenateArrays) + dataType = SubGeometryBase.VERTEX_DATA; + this._vertexData[dataType] = VertexDataPool.getItem(this._subGeometry, this.getIndexData(), dataType); + this._pVertexDataDirty[dataType] = false; + }; + /** + * //TODO + * + * @param event + * @private + */ + RenderableBase.prototype._onIndicesUpdated = function (event) { + this.invalidateIndexData(); + }; + /** + * //TODO + * + * @param event + * @private + */ + RenderableBase.prototype._onVerticesUpdated = function (event) { + this._concatenateArrays = event.target.concatenateArrays; + this.invalidateVertexData(event.dataType); + }; + return RenderableBase; +})(); +module.exports = RenderableBase; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3JlbmRlcmFibGViYXNlLnRzIl0sIm5hbWVzIjpbIlJlbmRlcmFibGVCYXNlIiwiUmVuZGVyYWJsZUJhc2UuY29uc3RydWN0b3IiLCJSZW5kZXJhYmxlQmFzZS5vdmVyZmxvdyIsIlJlbmRlcmFibGVCYXNlLm51bVRyaWFuZ2xlcyIsIlJlbmRlcmFibGVCYXNlLmdldEluZGV4RGF0YSIsIlJlbmRlcmFibGVCYXNlLmdldFZlcnRleERhdGEiLCJSZW5kZXJhYmxlQmFzZS5nZXRWZXJ0ZXhPZmZzZXQiLCJSZW5kZXJhYmxlQmFzZS5kaXNwb3NlIiwiUmVuZGVyYWJsZUJhc2UuaW52YWxpZGF0ZUdlb21ldHJ5IiwiUmVuZGVyYWJsZUJhc2UuaW52YWxpZGF0ZUluZGV4RGF0YSIsIlJlbmRlcmFibGVCYXNlLmludmFsaWRhdGVWZXJ0ZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuX3BHZXRTdWJHZW9tZXRyeSIsIlJlbmRlcmFibGVCYXNlLl9pRmlsbEluZGV4RGF0YSIsIlJlbmRlcmFibGVCYXNlLl9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlIiwiUmVuZGVyYWJsZUJhc2UuX3VwZGF0ZUdlb21ldHJ5IiwiUmVuZGVyYWJsZUJhc2UuX3VwZGF0ZUluZGV4RGF0YSIsIlJlbmRlcmFibGVCYXNlLl91cGRhdGVWZXJ0ZXhEYXRhIiwiUmVuZGVyYWJsZUJhc2UuX29uSW5kaWNlc1VwZGF0ZWQiLCJSZW5kZXJhYmxlQmFzZS5fb25WZXJ0aWNlc1VwZGF0ZWQiXSwibWFwcGluZ3MiOiJBQUNBLElBQU8sbUJBQW1CLFdBQWEsNENBQTRDLENBQUMsQ0FBQztBQUdyRixJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQy9FLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUl0RixJQUFPLGdCQUFnQixXQUFjLDRDQUE0QyxDQUFDLENBQUM7QUFJbkYsSUFBTyxhQUFhLFdBQWMsdUNBQXVDLENBQUMsQ0FBQztBQUUzRSxJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTdFLEFBR0E7O0dBREc7SUFDRyxjQUFjO0lBbUluQkE7Ozs7OztPQU1HQTtJQUNIQSxTQTFJS0EsY0FBY0EsQ0EwSVBBLElBQW1CQSxFQUFFQSxZQUFvQkEsRUFBRUEsYUFBNEJBLEVBQUVBLEtBQWdCQSxFQUFFQSxXQUFzQkE7UUExSTlIQyxpQkFnVkNBO1FBdE1xRkEscUJBQWdCQSxHQUFoQkEsU0FBZ0JBO1FBQUVBLDJCQUFzQkEsR0FBdEJBLGVBQXNCQTtRQXBJckhBLG1CQUFjQSxHQUFXQSxJQUFJQSxDQUFDQTtRQUU5QkEsb0JBQWVBLEdBQVdBLElBQUlBLENBQUNBO1FBQy9CQSxnQkFBV0EsR0FBVUEsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7UUFDbkNBLHNCQUFpQkEsR0FBVUEsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7UUFDdkNBLGtCQUFhQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtRQWlJM0NBLElBQUlBLENBQUNBLHlCQUF5QkEsR0FBR0EsVUFBQ0EsS0FBc0JBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBN0JBLENBQTZCQSxDQUFDQTtRQUMzRkEsSUFBSUEsQ0FBQ0EsMEJBQTBCQSxHQUFHQSxVQUFDQSxLQUFzQkEsSUFBS0EsT0FBQUEsS0FBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUE5QkEsQ0FBOEJBLENBQUNBO1FBRTdGQSxBQUNBQSxrREFEa0RBO1FBQ2xEQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVsQkEsQUFDQUEsZ0NBRGdDQTtRQUNoQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFFcEJBLEFBQ0FBLHdFQUR3RUE7UUFDeEVBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLFdBQVdBLENBQUNBO1FBRWhDQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxZQUFZQSxDQUFDQTtRQUNqQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsYUFBYUEsQ0FBQ0E7SUFDcENBLENBQUNBO0lBM0hERCxzQkFBV0Esb0NBQVFBO1FBSG5CQTs7V0FFR0E7YUFDSEE7WUFFQ0UsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsQ0FBQ0E7Z0JBQ3hCQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLENBQUNBO1lBRXpCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUN2QkEsQ0FBQ0E7OztPQUFBRjtJQUtEQSxzQkFBV0Esd0NBQVlBO1FBSHZCQTs7V0FFR0E7YUFDSEE7WUFFQ0csTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0E7UUFDM0JBLENBQUNBOzs7T0FBQUg7SUErQ0RBOztPQUVHQTtJQUNJQSxxQ0FBWUEsR0FBbkJBO1FBRUNJLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBO1lBQ3hCQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLENBQUNBO1FBRXpCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQTtJQUN4QkEsQ0FBQ0E7SUFFREo7O09BRUdBO0lBQ0lBLHNDQUFhQSxHQUFwQkEsVUFBcUJBLFFBQWVBO1FBRW5DSyxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQTtZQUN4QkEsSUFBSUEsQ0FBQ0EsZ0JBQWdCQSxFQUFFQSxDQUFDQTtRQUV6QkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtZQUNwQ0EsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUVsQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxHQUFFQSxtQkFBbUJBLENBQUNBLFdBQVdBLEdBQUdBLFFBQVFBLENBQUNBLENBQUFBO0lBQzdGQSxDQUFDQTtJQUVETDs7T0FFR0E7SUFDSUEsd0NBQWVBLEdBQXRCQSxVQUF1QkEsUUFBZUE7UUFFckNNLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBO1lBQ3hCQSxJQUFJQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLENBQUNBO1FBRXpCQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1lBQ3BDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO1FBRWxDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtJQUNyQ0EsQ0FBQ0E7SUEyQk1OLGdDQUFPQSxHQUFkQTtRQUVDTyxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxDQUFDQTtRQUUzQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDMUJBLElBQUlBLENBQUNBLFVBQVVBLEdBQUdBLElBQUlBLENBQUNBO1FBRXZCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxRQUFRQSxJQUFJQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUN6QkEsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsUUFBUUEsQ0FBRUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7WUFDcERBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO1FBQ25DQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNwQkEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7WUFDekJBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3ZCQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVNUCwyQ0FBa0JBLEdBQXpCQTtRQUVDUSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUzQkEsQUFDQUEsb0JBRG9CQTtRQUNwQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDcEJBLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLElBQUlBLENBQUNBO1FBRTdCQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUNsQkEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0Esa0JBQWtCQSxFQUFFQSxDQUFDQTtJQUN0Q0EsQ0FBQ0E7SUFFRFI7O09BRUdBO0lBQ0lBLDRDQUFtQkEsR0FBMUJBO1FBRUNTLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLElBQUlBLENBQUNBO0lBQzdCQSxDQUFDQTtJQUVEVDs7OztPQUlHQTtJQUNJQSw2Q0FBb0JBLEdBQTNCQSxVQUE0QkEsUUFBZUE7UUFFMUNVLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDekNBLENBQUNBO0lBRU1WLHlDQUFnQkEsR0FBdkJBO1FBRUNXLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRURYOzs7Ozs7T0FNR0E7SUFDSUEsd0NBQWVBLEdBQXRCQSxVQUF1QkEsV0FBa0JBO1FBRXhDWSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxjQUFjQSxDQUFDQTtZQUN2QkEsSUFBSUEsQ0FBQ0EsZUFBZUEsRUFBRUEsQ0FBQ0E7UUFFeEJBLElBQUlBLENBQUNBLFVBQVVBLEdBQUdBLGFBQWFBLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLFdBQVdBLENBQUNBLENBQUNBO1FBRXJGQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFDQSxDQUFDQSxDQUFDQTtRQUVuREEsV0FBV0EsR0FBR0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFFckNBLEFBQ0FBLGlDQURpQ0E7UUFDakNBLEVBQUVBLENBQUNBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBO1lBQ3BEQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtnQkFDbkJBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBLHVCQUF1QkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsRUFBRUEsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFFN0dBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLGVBQWVBLENBQUNBLFdBQVdBLENBQUNBLENBQUNBO1FBQzdDQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUMzQkEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7WUFDekJBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBO1FBQ3ZCQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVNWixnREFBdUJBLEdBQTlCQSxVQUErQkEsSUFBbUJBLEVBQUVBLGFBQTRCQSxFQUFFQSxLQUFZQSxFQUFFQSxXQUFrQkE7UUFFakhhLE1BQU1BLElBQUlBLG1CQUFtQkEsRUFBRUEsQ0FBQ0E7SUFDakNBLENBQUNBO0lBRURiOzs7O09BSUdBO0lBQ0tBLHdDQUFlQSxHQUF2QkE7UUFFQ2MsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLENBQUNBO2dCQUNwQkEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxnQkFBZ0JBLENBQUNBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0E7WUFDekdBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0E7UUFDM0dBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLFlBQVlBLEdBQUdBLElBQUlBLENBQUNBLGdCQUFnQkEsRUFBRUEsQ0FBQ0E7UUFFNUNBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtRQUU5REEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLElBQUlBLENBQUNBLENBQUNBO2dCQUNwQkEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFBZ0JBLENBQUNBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0E7WUFDdEdBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFBZ0JBLEVBQUVBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBQ0EsQ0FBQ0E7UUFDeEdBLENBQUNBO1FBRURBLEFBV0FBLFNBWFNBO1FBQ1hBLDJCQUEyQkE7UUFDM0JBLHlFQUF5RUE7UUFDekVBLDZCQUE2QkE7UUFDN0JBLE1BQU1BO1FBRU5BLDZDQUE2Q0E7UUFDN0NBLG1HQUFtR0E7UUFDbkdBLHdDQUF3Q0E7UUFDeENBLE1BQU1BO1FBRUpBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLEtBQUtBLENBQUNBO1FBRTVCQSw4RUFBOEVBO0lBQy9FQSxDQUFDQTtJQUVEZDs7OztPQUlHQTtJQUNLQSx5Q0FBZ0JBLEdBQXhCQTtRQUVDZSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUV4Q0EsSUFBSUEsQ0FBQ0EsZUFBZUEsR0FBR0EsS0FBS0EsQ0FBQ0E7SUFDOUJBLENBQUNBO0lBRURmOzs7OztPQUtHQTtJQUNLQSwwQ0FBaUJBLEdBQXpCQSxVQUEwQkEsUUFBZUE7UUFFeENnQixJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxRQUFRQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxTQUFTQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUVyRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtZQUN2Q0EsUUFBUUEsR0FBR0EsZUFBZUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFFeENBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLGNBQWNBLENBQUNBLE9BQU9BLENBQUNBLElBQUlBLENBQUNBLFlBQVlBLEVBQUVBLElBQUlBLENBQUNBLFlBQVlBLEVBQUVBLEVBQUVBLFFBQVFBLENBQUNBLENBQUNBO1FBRXRHQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLEtBQUtBLENBQUNBO0lBQzFDQSxDQUFDQTtJQUVEaEI7Ozs7O09BS0dBO0lBQ0tBLDBDQUFpQkEsR0FBekJBLFVBQTBCQSxLQUFzQkE7UUFFL0NpQixJQUFJQSxDQUFDQSxtQkFBbUJBLEVBQUVBLENBQUNBO0lBQzVCQSxDQUFDQTtJQUVEakI7Ozs7O09BS0dBO0lBQ0tBLDJDQUFrQkEsR0FBMUJBLFVBQTJCQSxLQUFzQkE7UUFFaERrQixJQUFJQSxDQUFDQSxrQkFBa0JBLEdBQXNCQSxLQUFLQSxDQUFDQSxNQUFPQSxDQUFDQSxpQkFBaUJBLENBQUNBO1FBRTdFQSxJQUFJQSxDQUFDQSxvQkFBb0JBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO0lBQzNDQSxDQUFDQTtJQUNGbEIscUJBQUNBO0FBQURBLENBaFZBLEFBZ1ZDQSxJQUFBO0FBRUQsQUFBd0IsaUJBQWYsY0FBYyxDQUFDIiwiZmlsZSI6InBvb2wvUmVuZGVyYWJsZUJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgQWJzdHJhY3RNZXRob2RFcnJvclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lcnJvcnMvQWJzdHJhY3RNZXRob2RFcnJvclwiKTtcblxuaW1wb3J0IElNYXRlcmlhbE93bmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9JTWF0ZXJpYWxPd25lclwiKTtcbmltcG9ydCBTdWJHZW9tZXRyeUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1N1Ykdlb21ldHJ5QmFzZVwiKTtcbmltcG9ydCBUcmlhbmdsZVN1Ykdlb21ldHJ5XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvVHJpYW5nbGVTdWJHZW9tZXRyeVwiKTtcbmltcG9ydCBJUmVuZGVyYWJsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9JUmVuZGVyYWJsZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvUmVuZGVyYWJsZVBvb2xcIik7XG5pbXBvcnQgSUVudGl0eVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9JRW50aXR5XCIpO1xuaW1wb3J0IFN1Ykdlb21ldHJ5RXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvU3ViR2VvbWV0cnlFdmVudFwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5cbmltcG9ydCBJbmRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvSW5kZXhEYXRhXCIpO1xuaW1wb3J0IEluZGV4RGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL0luZGV4RGF0YVBvb2xcIik7XG5pbXBvcnQgVmVydGV4RGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9WZXJ0ZXhEYXRhXCIpO1xuaW1wb3J0IFZlcnRleERhdGFQb29sXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9WZXJ0ZXhEYXRhUG9vbFwiKTtcblxuLyoqXG4gKiBAY2xhc3MgUmVuZGVyYWJsZUxpc3RJdGVtXG4gKi9cbmNsYXNzIFJlbmRlcmFibGVCYXNlIGltcGxlbWVudHMgSVJlbmRlcmFibGVcbntcblx0cHJpdmF0ZSBfb25JbmRpY2VzVXBkYXRlZERlbGVnYXRlOihldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB2b2lkO1xuXHRwcml2YXRlIF9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlOihldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgX3N1Ykdlb21ldHJ5OlN1Ykdlb21ldHJ5QmFzZTtcblx0cHJpdmF0ZSBfZ2VvbWV0cnlEaXJ0eTpib29sZWFuID0gdHJ1ZTtcblx0cHJpdmF0ZSBfaW5kZXhEYXRhOkluZGV4RGF0YTtcblx0cHJpdmF0ZSBfaW5kZXhEYXRhRGlydHk6Ym9vbGVhbiA9IHRydWU7XG5cdHByaXZhdGUgX3ZlcnRleERhdGE6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwdWJsaWMgX3BWZXJ0ZXhEYXRhRGlydHk6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF92ZXJ0ZXhPZmZzZXQ6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXG5cdHByaXZhdGUgX2xldmVsOm51bWJlcjtcblx0cHJpdmF0ZSBfaW5kZXhPZmZzZXQ6bnVtYmVyO1xuXHRwcml2YXRlIF9vdmVyZmxvdzpSZW5kZXJhYmxlQmFzZTtcblx0cHJpdmF0ZSBfbnVtVHJpYW5nbGVzOm51bWJlcjtcblx0cHJpdmF0ZSBfY29uY2F0ZW5hdGVBcnJheXM6Ym9vbGVhbjtcblxuXG5cdHB1YmxpYyBKT0lOVF9JTkRFWF9GT1JNQVQ6c3RyaW5nO1xuXHRwdWJsaWMgSk9JTlRfV0VJR0hUX0ZPUk1BVDpzdHJpbmc7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgX3Bvb2w6UmVuZGVyYWJsZVBvb2w7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG92ZXJmbG93KCk6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdGlmICh0aGlzLl9pbmRleERhdGFEaXJ0eSlcblx0XHRcdHRoaXMuX3VwZGF0ZUluZGV4RGF0YSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX292ZXJmbG93O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVRyaWFuZ2xlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX251bVRyaWFuZ2xlcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG5leHQ6UmVuZGVyYWJsZUJhc2U7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgbWF0ZXJpYWxJZDpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVuZGVyT3JkZXJJZDpudW1iZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgekluZGV4Om51bWJlcjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBjYXNjYWRlZDpib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHJlbmRlclNjZW5lVHJhbnNmb3JtOk1hdHJpeDNEO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHNvdXJjZUVudGl0eTpJRW50aXR5O1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG1hdGVyaWFsT3duZXI6SU1hdGVyaWFsT3duZXI7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgbWF0ZXJpYWw6TWF0ZXJpYWxCYXNlO1xuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldEluZGV4RGF0YSgpOkluZGV4RGF0YVxuXHR7XG5cdFx0aWYgKHRoaXMuX2luZGV4RGF0YURpcnR5KVxuXHRcdFx0dGhpcy5fdXBkYXRlSW5kZXhEYXRhKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5faW5kZXhEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmVydGV4RGF0YShkYXRhVHlwZTpzdHJpbmcpOlZlcnRleERhdGFcblx0e1xuXHRcdGlmICh0aGlzLl9pbmRleERhdGFEaXJ0eSlcblx0XHRcdHRoaXMuX3VwZGF0ZUluZGV4RGF0YSgpO1xuXG5cdFx0aWYgKHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdKVxuXHRcdFx0dGhpcy5fdXBkYXRlVmVydGV4RGF0YShkYXRhVHlwZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5fdmVydGV4RGF0YVt0aGlzLl9jb25jYXRlbmF0ZUFycmF5cz8gVHJpYW5nbGVTdWJHZW9tZXRyeS5WRVJURVhfREFUQSA6IGRhdGFUeXBlXVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmVydGV4T2Zmc2V0KGRhdGFUeXBlOnN0cmluZyk6bnVtYmVyXG5cdHtcblx0XHRpZiAodGhpcy5faW5kZXhEYXRhRGlydHkpXG5cdFx0XHR0aGlzLl91cGRhdGVJbmRleERhdGEoKTtcblxuXHRcdGlmICh0aGlzLl9wVmVydGV4RGF0YURpcnR5W2RhdGFUeXBlXSlcblx0XHRcdHRoaXMuX3VwZGF0ZVZlcnRleERhdGEoZGF0YVR5cGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ZlcnRleE9mZnNldFtkYXRhVHlwZV07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHNvdXJjZUVudGl0eVxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxPd25lclxuXHQgKiBAcGFyYW0gc3ViR2VvbWV0cnlcblx0ICogQHBhcmFtIGFuaW1hdGlvblN1Ykdlb21ldHJ5XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwb29sOlJlbmRlcmFibGVQb29sLCBzb3VyY2VFbnRpdHk6SUVudGl0eSwgbWF0ZXJpYWxPd25lcjpJTWF0ZXJpYWxPd25lciwgbGV2ZWw6bnVtYmVyID0gMCwgaW5kZXhPZmZzZXQ6bnVtYmVyID0gMClcblx0e1xuXHRcdHRoaXMuX29uSW5kaWNlc1VwZGF0ZWREZWxlZ2F0ZSA9IChldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB0aGlzLl9vbkluZGljZXNVcGRhdGVkKGV2ZW50KTtcblx0XHR0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlID0gKGV2ZW50OlN1Ykdlb21ldHJ5RXZlbnQpID0+IHRoaXMuX29uVmVydGljZXNVcGRhdGVkKGV2ZW50KTtcblxuXHRcdC8vc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIHBvb2wgZm9yIGxhdGVyIGRpc3Bvc2FsXG5cdFx0dGhpcy5fcG9vbCA9IHBvb2w7XG5cblx0XHQvL3JlZmVyZW5jZSB0byBsZXZlbCBvZiBvdmVyZmxvd1xuXHRcdHRoaXMuX2xldmVsID0gbGV2ZWw7XG5cblx0XHQvL3JlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9uIGluZGljZXMgKGlmIHRoaXMgaXMgYW4gb3ZlcmZsb3cgcmVuZGVyYWJsZSlcblx0XHR0aGlzLl9pbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0O1xuXG5cdFx0dGhpcy5zb3VyY2VFbnRpdHkgPSBzb3VyY2VFbnRpdHk7XG5cdFx0dGhpcy5tYXRlcmlhbE93bmVyID0gbWF0ZXJpYWxPd25lcjtcblx0fVxuXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdHRoaXMuX3Bvb2wuZGlzcG9zZUl0ZW0odGhpcy5tYXRlcmlhbE93bmVyKTtcblxuXHRcdHRoaXMuX2luZGV4RGF0YS5kaXNwb3NlKCk7XG5cdFx0dGhpcy5faW5kZXhEYXRhID0gbnVsbDtcblxuXHRcdGZvciAodmFyIGRhdGFUeXBlIGluIHRoaXMuX3ZlcnRleERhdGEpIHtcblx0XHRcdCg8VmVydGV4RGF0YT4gdGhpcy5fdmVydGV4RGF0YVtkYXRhVHlwZV0pLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3ZlcnRleERhdGFbZGF0YVR5cGVdID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fb3ZlcmZsb3cpIHtcblx0XHRcdHRoaXMuX292ZXJmbG93LmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX292ZXJmbG93ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaW52YWxpZGF0ZUdlb21ldHJ5KClcblx0e1xuXHRcdHRoaXMuX2dlb21ldHJ5RGlydHkgPSB0cnVlO1xuXG5cdFx0Ly9pbnZhbGlkYXRlIGluZGljZXNcblx0XHRpZiAodGhpcy5fbGV2ZWwgPT0gMClcblx0XHRcdHRoaXMuX2luZGV4RGF0YURpcnR5ID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLl9vdmVyZmxvdylcblx0XHRcdHRoaXMuX292ZXJmbG93LmludmFsaWRhdGVHZW9tZXRyeSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgaW52YWxpZGF0ZUluZGV4RGF0YSgpXG5cdHtcblx0XHR0aGlzLl9pbmRleERhdGFEaXJ0eSA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhVHlwZVxuXHQgKi9cblx0cHVibGljIGludmFsaWRhdGVWZXJ0ZXhEYXRhKGRhdGFUeXBlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdID0gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6U3ViR2VvbWV0cnlCYXNlXG5cdHtcblx0XHR0aHJvdyBuZXcgQWJzdHJhY3RNZXRob2RFcnJvcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gc3ViR2VvbWV0cnlcblx0ICogQHBhcmFtIG9mZnNldFxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBfaUZpbGxJbmRleERhdGEoaW5kZXhPZmZzZXQ6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX2dlb21ldHJ5RGlydHkpXG5cdFx0XHR0aGlzLl91cGRhdGVHZW9tZXRyeSgpO1xuXG5cdFx0dGhpcy5faW5kZXhEYXRhID0gSW5kZXhEYXRhUG9vbC5nZXRJdGVtKHRoaXMuX3N1Ykdlb21ldHJ5LCB0aGlzLl9sZXZlbCwgaW5kZXhPZmZzZXQpO1xuXG5cdFx0dGhpcy5fbnVtVHJpYW5nbGVzID0gdGhpcy5faW5kZXhEYXRhLmRhdGEubGVuZ3RoLzM7XG5cblx0XHRpbmRleE9mZnNldCA9IHRoaXMuX2luZGV4RGF0YS5vZmZzZXQ7XG5cblx0XHQvL2NoZWNrIGlmIHRoZXJlIGlzIG1vcmUgdG8gc3BsaXRcblx0XHRpZiAoaW5kZXhPZmZzZXQgPCB0aGlzLl9zdWJHZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCkge1xuXHRcdFx0aWYgKCF0aGlzLl9vdmVyZmxvdylcblx0XHRcdFx0dGhpcy5fb3ZlcmZsb3cgPSB0aGlzLl9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlKHRoaXMuX3Bvb2wsIHRoaXMubWF0ZXJpYWxPd25lciwgaW5kZXhPZmZzZXQsIHRoaXMuX2xldmVsICsgMSk7XG5cblx0XHRcdHRoaXMuX292ZXJmbG93Ll9pRmlsbEluZGV4RGF0YShpbmRleE9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vdmVyZmxvdykge1xuXHRcdFx0dGhpcy5fb3ZlcmZsb3cuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5fb3ZlcmZsb3cgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBfcEdldE92ZXJmbG93UmVuZGVyYWJsZShwb29sOlJlbmRlcmFibGVQb29sLCBtYXRlcmlhbE93bmVyOklNYXRlcmlhbE93bmVyLCBsZXZlbDpudW1iZXIsIGluZGV4T2Zmc2V0Om51bWJlcik6UmVuZGVyYWJsZUJhc2Vcblx0e1xuXHRcdHRocm93IG5ldyBBYnN0cmFjdE1ldGhvZEVycm9yKCk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVHZW9tZXRyeSgpXG5cdHtcblx0XHRpZiAodGhpcy5fc3ViR2VvbWV0cnkpIHtcblx0XHRcdGlmICh0aGlzLl9sZXZlbCA9PSAwKVxuXHRcdFx0XHR0aGlzLl9zdWJHZW9tZXRyeS5yZW1vdmVFdmVudExpc3RlbmVyKFN1Ykdlb21ldHJ5RXZlbnQuSU5ESUNFU19VUERBVEVELCB0aGlzLl9vbkluZGljZXNVcGRhdGVkRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fc3ViR2VvbWV0cnkucmVtb3ZlRXZlbnRMaXN0ZW5lcihTdWJHZW9tZXRyeUV2ZW50LlZFUlRJQ0VTX1VQREFURUQsIHRoaXMuX29uVmVydGljZXNVcGRhdGVkRGVsZWdhdGUpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1Ykdlb21ldHJ5ID0gdGhpcy5fcEdldFN1Ykdlb21ldHJ5KCk7XG5cblx0XHR0aGlzLl9jb25jYXRlbmF0ZUFycmF5cyA9IHRoaXMuX3N1Ykdlb21ldHJ5LmNvbmNhdGVuYXRlQXJyYXlzO1xuXG5cdFx0aWYgKHRoaXMuX3N1Ykdlb21ldHJ5KSB7XG5cdFx0XHRpZiAodGhpcy5fbGV2ZWwgPT0gMClcblx0XHRcdFx0dGhpcy5fc3ViR2VvbWV0cnkuYWRkRXZlbnRMaXN0ZW5lcihTdWJHZW9tZXRyeUV2ZW50LklORElDRVNfVVBEQVRFRCwgdGhpcy5fb25JbmRpY2VzVXBkYXRlZERlbGVnYXRlKTtcblx0XHRcdHRoaXMuX3N1Ykdlb21ldHJ5LmFkZEV2ZW50TGlzdGVuZXIoU3ViR2VvbWV0cnlFdmVudC5WRVJUSUNFU19VUERBVEVELCB0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlKTtcblx0XHR9XG5cblx0XHQvL2Rpc3Bvc2Vcbi8vXHRcdFx0aWYgKHRoaXMuX2luZGV4RGF0YSkge1xuLy9cdFx0XHRcdHRoaXMuX2luZGV4RGF0YS5kaXNwb3NlKCk7IC8vVE9ETyB3aGVyZSBpcyBhIGdvb2QgcGxhY2UgdG8gZGlzcG9zZT9cbi8vXHRcdFx0XHR0aGlzLl9pbmRleERhdGEgPSBudWxsO1xuLy9cdFx0XHR9XG5cbi8vXHRcdFx0Zm9yICh2YXIgZGF0YVR5cGUgaW4gdGhpcy5fdmVydGV4RGF0YSkge1xuLy9cdFx0XHRcdCg8VmVydGV4RGF0YT4gdGhpcy5fdmVydGV4RGF0YVtkYXRhVHlwZV0pLmRpc3Bvc2UoKTsgLy9UT0RPIHdoZXJlIGlzIGEgZ29vZCBwbGFjZSB0byBkaXNwb3NlP1xuLy9cdFx0XHRcdHRoaXMuX3ZlcnRleERhdGFbZGF0YVR5cGVdID0gbnVsbDtcbi8vXHRcdFx0fVxuXG5cdFx0dGhpcy5fZ2VvbWV0cnlEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Ly9zcGVjaWZpYyB2ZXJ0ZXggZGF0YSB0eXBlcyBoYXZlIHRvIGJlIGludmFsaWRhdGVkIGluIHRoZSBzcGVjaWZpYyByZW5kZXJhYmxlXG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVJbmRleERhdGEoKVxuXHR7XG5cdFx0dGhpcy5faUZpbGxJbmRleERhdGEodGhpcy5faW5kZXhPZmZzZXQpO1xuXG5cdFx0dGhpcy5faW5kZXhEYXRhRGlydHkgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIGRhdGFUeXBlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIF91cGRhdGVWZXJ0ZXhEYXRhKGRhdGFUeXBlOnN0cmluZylcblx0e1xuXHRcdHRoaXMuX3ZlcnRleE9mZnNldFtkYXRhVHlwZV0gPSB0aGlzLl9zdWJHZW9tZXRyeS5nZXRPZmZzZXQoZGF0YVR5cGUpO1xuXG5cdFx0aWYgKHRoaXMuX3N1Ykdlb21ldHJ5LmNvbmNhdGVuYXRlQXJyYXlzKVxuXHRcdFx0ZGF0YVR5cGUgPSBTdWJHZW9tZXRyeUJhc2UuVkVSVEVYX0RBVEE7XG5cblx0XHR0aGlzLl92ZXJ0ZXhEYXRhW2RhdGFUeXBlXSA9IFZlcnRleERhdGFQb29sLmdldEl0ZW0odGhpcy5fc3ViR2VvbWV0cnksIHRoaXMuZ2V0SW5kZXhEYXRhKCksIGRhdGFUeXBlKTtcblxuXHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbZGF0YVR5cGVdID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfb25JbmRpY2VzVXBkYXRlZChldmVudDpTdWJHZW9tZXRyeUV2ZW50KVxuXHR7XG5cdFx0dGhpcy5pbnZhbGlkYXRlSW5kZXhEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBfb25WZXJ0aWNlc1VwZGF0ZWQoZXZlbnQ6U3ViR2VvbWV0cnlFdmVudClcblx0e1xuXHRcdHRoaXMuX2NvbmNhdGVuYXRlQXJyYXlzID0gKDxTdWJHZW9tZXRyeUJhc2U+IGV2ZW50LnRhcmdldCkuY29uY2F0ZW5hdGVBcnJheXM7XG5cblx0XHR0aGlzLmludmFsaWRhdGVWZXJ0ZXhEYXRhKGV2ZW50LmRhdGFUeXBlKTtcblx0fVxufVxuXG5leHBvcnQgPSBSZW5kZXJhYmxlQmFzZTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/RenderableBase.ts b/lib/pool/RenderableBase.ts similarity index 96% rename from lib/core/pool/RenderableBase.ts rename to lib/pool/RenderableBase.ts index c53189f6..9e2f29e9 100644 --- a/lib/core/pool/RenderableBase.ts +++ b/lib/pool/RenderableBase.ts @@ -10,10 +10,10 @@ import IEntity = require("awayjs-display/lib/entities/IEntity"); import SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); -import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -import IndexDataPool = require("awayjs-stagegl/lib/core/pool/IndexDataPool"); -import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); -import VertexDataPool = require("awayjs-stagegl/lib/core/pool/VertexDataPool"); +import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +import IndexDataPool = require("awayjs-stagegl/lib/pool/IndexDataPool"); +import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); +import VertexDataPool = require("awayjs-stagegl/lib/pool/VertexDataPool"); /** * @class RenderableListItem diff --git a/lib/pool/SkyboxRenderable.js b/lib/pool/SkyboxRenderable.js new file mode 100755 index 00000000..b546f0a9 --- /dev/null +++ b/lib/pool/SkyboxRenderable.js @@ -0,0 +1,49 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +/** + * @class away.pool.SkyboxRenderable + */ +var SkyboxRenderable = (function (_super) { + __extends(SkyboxRenderable, _super); + /** + * //TODO + * + * @param pool + * @param skybox + */ + function SkyboxRenderable(pool, skybox) { + _super.call(this, pool, skybox, skybox); + } + /** + * //TODO + * + * @returns {away.base.TriangleSubGeometry} + * @private + */ + SkyboxRenderable.prototype._pGetSubGeometry = function () { + var geometry = SkyboxRenderable._geometry; + if (!geometry) { + geometry = SkyboxRenderable._geometry = new TriangleSubGeometry(true); + geometry.autoDeriveNormals = false; + geometry.autoDeriveTangents = false; + geometry.updateIndices(Array(0, 1, 2, 2, 3, 0, 6, 5, 4, 4, 7, 6, 2, 6, 7, 7, 3, 2, 4, 5, 1, 1, 0, 4, 4, 0, 3, 3, 7, 4, 2, 1, 5, 5, 6, 2)); + geometry.updatePositions(Array(-1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1)); + } + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + return geometry; + }; + /** + * + */ + SkyboxRenderable.id = "skybox"; + return SkyboxRenderable; +})(RenderableBase); +module.exports = SkyboxRenderable; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3NreWJveHJlbmRlcmFibGUudHMiXSwibmFtZXMiOlsiU2t5Ym94UmVuZGVyYWJsZSIsIlNreWJveFJlbmRlcmFibGUuY29uc3RydWN0b3IiLCJTa3lib3hSZW5kZXJhYmxlLl9wR2V0U3ViR2VvbWV0cnkiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUl0RixJQUFPLGNBQWMsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBRTdFLEFBR0E7O0dBREc7SUFDRyxnQkFBZ0I7SUFBU0EsVUFBekJBLGdCQUFnQkEsVUFBdUJBO0lBWTVDQTs7Ozs7T0FLR0E7SUFDSEEsU0FsQktBLGdCQUFnQkEsQ0FrQlRBLElBQW1CQSxFQUFFQSxNQUFhQTtRQUU3Q0Msa0JBQU1BLElBQUlBLEVBQUVBLE1BQU1BLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO0lBQzdCQSxDQUFDQTtJQUVERDs7Ozs7T0FLR0E7SUFDSUEsMkNBQWdCQSxHQUF2QkE7UUFFQ0UsSUFBSUEsUUFBUUEsR0FBdUJBLGdCQUFnQkEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7UUFFOURBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBO1lBQ2ZBLFFBQVFBLEdBQUdBLGdCQUFnQkEsQ0FBQ0EsU0FBU0EsR0FBR0EsSUFBSUEsbUJBQW1CQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUN0RUEsUUFBUUEsQ0FBQ0EsaUJBQWlCQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUNuQ0EsUUFBUUEsQ0FBQ0Esa0JBQWtCQSxHQUFHQSxLQUFLQSxDQUFDQTtZQUNwQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsS0FBS0EsQ0FBU0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbEpBLFFBQVFBLENBQUNBLGVBQWVBLENBQUNBLEtBQUtBLENBQVNBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBQzdIQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFakVBLE1BQU1BLENBQUNBLFFBQVFBLENBQUNBO0lBQ2pCQSxDQUFDQTtJQTFDREY7O09BRUdBO0lBQ1dBLG1CQUFFQSxHQUFVQSxRQUFRQSxDQUFDQTtJQXdDcENBLHVCQUFDQTtBQUFEQSxDQTdDQSxBQTZDQ0EsRUE3QzhCLGNBQWMsRUE2QzVDO0FBRUQsQUFBMEIsaUJBQWpCLGdCQUFnQixDQUFDIiwiZmlsZSI6InBvb2wvU2t5Ym94UmVuZGVyYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVHJpYW5nbGVTdWJHZW9tZXRyeVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViR2VvbWV0cnlcIik7XG5pbXBvcnQgUmVuZGVyYWJsZVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9wb29sL1JlbmRlcmFibGVQb29sXCIpO1xuaW1wb3J0IFNreWJveFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9Ta3lib3hcIik7XG5cbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5cbi8qKlxuICogQGNsYXNzIGF3YXkucG9vbC5Ta3lib3hSZW5kZXJhYmxlXG4gKi9cbmNsYXNzIFNreWJveFJlbmRlcmFibGUgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZVxue1xuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaWQ6c3RyaW5nID0gXCJza3lib3hcIjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHByaXZhdGUgc3RhdGljIF9nZW9tZXRyeTpUcmlhbmdsZVN1Ykdlb21ldHJ5O1xuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHBvb2xcblx0ICogQHBhcmFtIHNreWJveFxuXHQgKi9cblx0Y29uc3RydWN0b3IocG9vbDpSZW5kZXJhYmxlUG9vbCwgc2t5Ym94OlNreWJveClcblx0e1xuXHRcdHN1cGVyKHBvb2wsIHNreWJveCwgc2t5Ym94KTtcblx0fVxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHJldHVybnMge2F3YXkuYmFzZS5UcmlhbmdsZVN1Ykdlb21ldHJ5fVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHVibGljIF9wR2V0U3ViR2VvbWV0cnkoKTpUcmlhbmdsZVN1Ykdlb21ldHJ5XG5cdHtcblx0XHR2YXIgZ2VvbWV0cnk6VHJpYW5nbGVTdWJHZW9tZXRyeSA9IFNreWJveFJlbmRlcmFibGUuX2dlb21ldHJ5O1xuXG5cdFx0aWYgKCFnZW9tZXRyeSkge1xuXHRcdFx0Z2VvbWV0cnkgPSBTa3lib3hSZW5kZXJhYmxlLl9nZW9tZXRyeSA9IG5ldyBUcmlhbmdsZVN1Ykdlb21ldHJ5KHRydWUpO1xuXHRcdFx0Z2VvbWV0cnkuYXV0b0Rlcml2ZU5vcm1hbHMgPSBmYWxzZTtcblx0XHRcdGdlb21ldHJ5LmF1dG9EZXJpdmVUYW5nZW50cyA9IGZhbHNlO1xuXHRcdFx0Z2VvbWV0cnkudXBkYXRlSW5kaWNlcyhBcnJheTxudW1iZXI+KDAsIDEsIDIsIDIsIDMsIDAsIDYsIDUsIDQsIDQsIDcsIDYsIDIsIDYsIDcsIDcsIDMsIDIsIDQsIDUsIDEsIDEsIDAsIDQsIDQsIDAsIDMsIDMsIDcsIDQsIDIsIDEsIDUsIDUsIDYsIDIpKTtcblx0XHRcdGdlb21ldHJ5LnVwZGF0ZVBvc2l0aW9ucyhBcnJheTxudW1iZXI+KC0xLCAxLCAtMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTEsIDEsIC0xLCAxLCAtMSwgLTEsIDEpKTtcblx0XHR9XG5cblx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuUE9TSVRJT05fREFUQV0gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9XG59XG5cbmV4cG9ydCA9IFNreWJveFJlbmRlcmFibGU7Il19 \ No newline at end of file diff --git a/lib/core/pool/SkyboxRenderable.ts b/lib/pool/SkyboxRenderable.ts similarity index 94% rename from lib/core/pool/SkyboxRenderable.ts rename to lib/pool/SkyboxRenderable.ts index cd6274bc..a1095dd2 100644 --- a/lib/core/pool/SkyboxRenderable.ts +++ b/lib/pool/SkyboxRenderable.ts @@ -2,7 +2,7 @@ import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeome import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import Skybox = require("awayjs-display/lib/entities/Skybox"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); /** * @class away.pool.SkyboxRenderable diff --git a/lib/pool/TextureData.js b/lib/pool/TextureData.js new file mode 100755 index 00000000..ee9efa3b --- /dev/null +++ b/lib/pool/TextureData.js @@ -0,0 +1,29 @@ +/** + * + * @class away.pool.TextureDataBase + */ +var TextureData = (function () { + function TextureData(pool, context, textureProxy) { + this._pool = pool; + this.context = context; + this.textureProxy = textureProxy; + } + /** + * + */ + TextureData.prototype.dispose = function () { + this._pool.disposeItem(this.textureProxy); + this.texture.dispose(); + this.texture = null; + }; + /** + * + */ + TextureData.prototype.invalidate = function () { + this.invalid = true; + }; + return TextureData; +})(); +module.exports = TextureData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3RleHR1cmVkYXRhLnRzIl0sIm5hbWVzIjpbIlRleHR1cmVEYXRhIiwiVGV4dHVyZURhdGEuY29uc3RydWN0b3IiLCJUZXh0dXJlRGF0YS5kaXNwb3NlIiwiVGV4dHVyZURhdGEuaW52YWxpZGF0ZSJdLCJtYXBwaW5ncyI6IkFBT0EsQUFJQTs7O0dBREc7SUFDRyxXQUFXO0lBWWhCQSxTQVpLQSxXQUFXQSxDQVlKQSxJQUFvQkEsRUFBRUEsT0FBcUJBLEVBQUVBLFlBQTZCQTtRQUVyRkMsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDbEJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxZQUFZQSxDQUFDQTtJQUNsQ0EsQ0FBQ0E7SUFFREQ7O09BRUdBO0lBQ0lBLDZCQUFPQSxHQUFkQTtRQUVDRSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUUxQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUVERjs7T0FFR0E7SUFDSUEsZ0NBQVVBLEdBQWpCQTtRQUVDRyxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNyQkEsQ0FBQ0E7SUFDRkgsa0JBQUNBO0FBQURBLENBckNBLEFBcUNDQSxJQUFBO0FBRUQsQUFBcUIsaUJBQVosV0FBVyxDQUFDIiwiZmlsZSI6InBvb2wvVGV4dHVyZURhdGEuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElUZXh0dXJlRGF0YVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcG9vbC9JVGV4dHVyZURhdGFcIik7XG5pbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBUZXh0dXJlRGF0YVBvb2xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1RleHR1cmVEYXRhUG9vbFwiKTtcbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElUZXh0dXJlQmFzZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JVGV4dHVyZUJhc2VcIik7XG5cbi8qKlxuICpcbiAqIEBjbGFzcyBhd2F5LnBvb2wuVGV4dHVyZURhdGFCYXNlXG4gKi9cbmNsYXNzIFRleHR1cmVEYXRhIGltcGxlbWVudHMgSVRleHR1cmVEYXRhXG57XG5cdHByaXZhdGUgX3Bvb2w6VGV4dHVyZURhdGFQb29sO1xuXG5cdHB1YmxpYyBjb250ZXh0OkNvbnRleHRHTEJhc2U7XG5cblx0cHVibGljIHRleHR1cmU6SVRleHR1cmVCYXNlO1xuXG5cdHB1YmxpYyB0ZXh0dXJlUHJveHk6VGV4dHVyZVByb3h5QmFzZTtcblxuXHRwdWJsaWMgaW52YWxpZDpib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHBvb2w6VGV4dHVyZURhdGFQb29sLCBjb250ZXh0OkNvbnRleHRHTEJhc2UsIHRleHR1cmVQcm94eTpUZXh0dXJlUHJveHlCYXNlKVxuXHR7XG5cdFx0dGhpcy5fcG9vbCA9IHBvb2w7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0XHR0aGlzLnRleHR1cmVQcm94eSA9IHRleHR1cmVQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0dGhpcy5fcG9vbC5kaXNwb3NlSXRlbSh0aGlzLnRleHR1cmVQcm94eSk7XG5cblx0XHR0aGlzLnRleHR1cmUuZGlzcG9zZSgpO1xuXHRcdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBpbnZhbGlkYXRlKClcblx0e1xuXHRcdHRoaXMuaW52YWxpZCA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0ID0gVGV4dHVyZURhdGE7Il19 \ No newline at end of file diff --git a/lib/core/pool/TextureData.ts b/lib/pool/TextureData.ts similarity index 76% rename from lib/core/pool/TextureData.ts rename to lib/pool/TextureData.ts index 919b3c7e..a787c13f 100644 --- a/lib/core/pool/TextureData.ts +++ b/lib/pool/TextureData.ts @@ -1,9 +1,9 @@ import ITextureData = require("awayjs-core/lib/pool/ITextureData"); import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); -import TextureDataPool = require("awayjs-stagegl/lib/core/pool/TextureDataPool"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import ITextureBase = require("awayjs-stagegl/lib/core/stagegl/ITextureBase"); +import TextureDataPool = require("awayjs-stagegl/lib/pool/TextureDataPool"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import ITextureBase = require("awayjs-stagegl/lib/base/ITextureBase"); /** * diff --git a/lib/pool/TextureDataPool.js b/lib/pool/TextureDataPool.js new file mode 100755 index 00000000..aea02afb --- /dev/null +++ b/lib/pool/TextureDataPool.js @@ -0,0 +1,37 @@ +var TextureData = require("awayjs-stagegl/lib/pool/TextureData"); +/** + * @class away.pool.TextureDataPool + */ +var TextureDataPool = (function () { + /** + * //TODO + * + * @param textureDataClass + */ + function TextureDataPool(context) { + this._pool = new Object(); + this._context = context; + } + /** + * //TODO + * + * @param materialOwner + * @returns ITexture + */ + TextureDataPool.prototype.getItem = function (textureProxy) { + return (this._pool[textureProxy.id] || (this._pool[textureProxy.id] = textureProxy._iAddTextureData(new TextureData(this, this._context, textureProxy)))); + }; + /** + * //TODO + * + * @param materialOwner + */ + TextureDataPool.prototype.disposeItem = function (textureProxy) { + textureProxy._iRemoveTextureData(this._pool[textureProxy.id]); + this._pool[textureProxy.id] = null; + }; + return TextureDataPool; +})(); +module.exports = TextureDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3RleHR1cmVkYXRhcG9vbC50cyJdLCJuYW1lcyI6WyJUZXh0dXJlRGF0YVBvb2wiLCJUZXh0dXJlRGF0YVBvb2wuY29uc3RydWN0b3IiLCJUZXh0dXJlRGF0YVBvb2wuZ2V0SXRlbSIsIlRleHR1cmVEYXRhUG9vbC5kaXNwb3NlSXRlbSJdLCJtYXBwaW5ncyI6IkFBRUEsSUFBTyxXQUFXLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUd4RSxBQUdBOztHQURHO0lBQ0csZUFBZTtJQUtwQkE7Ozs7T0FJR0E7SUFDSEEsU0FWS0EsZUFBZUEsQ0FVUkEsT0FBcUJBO1FBUnpCQyxVQUFLQSxHQUFVQSxJQUFJQSxNQUFNQSxFQUFFQSxDQUFDQTtRQVVuQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsT0FBT0EsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRUREOzs7OztPQUtHQTtJQUNJQSxpQ0FBT0EsR0FBZEEsVUFBZUEsWUFBNkJBO1FBRTNDRSxNQUFNQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxZQUFZQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLFdBQVdBLENBQUNBLElBQUlBLEVBQUVBLElBQUlBLENBQUNBLFFBQVFBLEVBQUVBLFlBQVlBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUFBO0lBQzFKQSxDQUFDQTtJQUVERjs7OztPQUlHQTtJQUNJQSxxQ0FBV0EsR0FBbEJBLFVBQW1CQSxZQUE2QkE7UUFFL0NHLFlBQVlBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFFOURBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3BDQSxDQUFDQTtJQUNGSCxzQkFBQ0E7QUFBREEsQ0FyQ0EsQUFxQ0NBLElBQUE7QUFFRCxBQUF5QixpQkFBaEIsZUFBZSxDQUFDIiwiZmlsZSI6InBvb2wvVGV4dHVyZURhdGFQb29sLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0dXJlUHJveHlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZVByb3h5QmFzZVwiKTtcblxuaW1wb3J0IFRleHR1cmVEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1RleHR1cmVEYXRhXCIpO1xuaW1wb3J0IENvbnRleHRHTEJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTEJhc2VcIik7XG5cbi8qKlxuICogQGNsYXNzIGF3YXkucG9vbC5UZXh0dXJlRGF0YVBvb2xcbiAqL1xuY2xhc3MgVGV4dHVyZURhdGFQb29sXG57XG5cdHByaXZhdGUgX3Bvb2w6T2JqZWN0ID0gbmV3IE9iamVjdCgpO1xuXHRwcml2YXRlIF9jb250ZXh0OkNvbnRleHRHTEJhc2U7XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gdGV4dHVyZURhdGFDbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY29udGV4dDpDb250ZXh0R0xCYXNlKVxuXHR7XG5cdFx0dGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogLy9UT0RPXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXRlcmlhbE93bmVyXG5cdCAqIEByZXR1cm5zIElUZXh0dXJlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SXRlbSh0ZXh0dXJlUHJveHk6VGV4dHVyZVByb3h5QmFzZSk6VGV4dHVyZURhdGFcblx0e1xuXHRcdHJldHVybiAodGhpcy5fcG9vbFt0ZXh0dXJlUHJveHkuaWRdIHx8ICh0aGlzLl9wb29sW3RleHR1cmVQcm94eS5pZF0gPSB0ZXh0dXJlUHJveHkuX2lBZGRUZXh0dXJlRGF0YShuZXcgVGV4dHVyZURhdGEodGhpcywgdGhpcy5fY29udGV4dCwgdGV4dHVyZVByb3h5KSkpKVxuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxPd25lclxuXHQgKi9cblx0cHVibGljIGRpc3Bvc2VJdGVtKHRleHR1cmVQcm94eTpUZXh0dXJlUHJveHlCYXNlKVxuXHR7XG5cdFx0dGV4dHVyZVByb3h5Ll9pUmVtb3ZlVGV4dHVyZURhdGEodGhpcy5fcG9vbFt0ZXh0dXJlUHJveHkuaWRdKTtcblxuXHRcdHRoaXMuX3Bvb2xbdGV4dHVyZVByb3h5LmlkXSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gVGV4dHVyZURhdGFQb29sOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/TextureDataPool.ts b/lib/pool/TextureDataPool.ts similarity index 84% rename from lib/core/pool/TextureDataPool.ts rename to lib/pool/TextureDataPool.ts index e9cfa2cd..e1d4a996 100644 --- a/lib/core/pool/TextureDataPool.ts +++ b/lib/pool/TextureDataPool.ts @@ -1,7 +1,7 @@ import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase"); -import TextureData = require("awayjs-stagegl/lib/core/pool/TextureData"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); +import TextureData = require("awayjs-stagegl/lib/pool/TextureData"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); /** * @class away.pool.TextureDataPool diff --git a/lib/pool/TriangleSubMeshRenderable.js b/lib/pool/TriangleSubMeshRenderable.js new file mode 100755 index 00000000..a6dfae81 --- /dev/null +++ b/lib/pool/TriangleSubMeshRenderable.js @@ -0,0 +1,91 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); +var RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +/** + * @class away.pool.TriangleSubMeshRenderable + */ +var TriangleSubMeshRenderable = (function (_super) { + __extends(TriangleSubMeshRenderable, _super); + /** + * //TODO + * + * @param pool + * @param subMesh + * @param level + * @param indexOffset + */ + function TriangleSubMeshRenderable(pool, subMesh, level, indexOffset) { + if (level === void 0) { level = 0; } + if (indexOffset === void 0) { indexOffset = 0; } + _super.call(this, pool, subMesh.parentMesh, subMesh, level, indexOffset); + this.subMesh = subMesh; + } + /** + * + * @returns {SubGeometryBase} + * @protected + */ + TriangleSubMeshRenderable.prototype._pGetSubGeometry = function () { + var subGeometry; + if (this.subMesh.animator) + subGeometry = this.subMesh.animator.getRenderableSubGeometry(this, this.subMesh.subGeometry); + else + subGeometry = this.subMesh.subGeometry; + this._pVertexDataDirty[TriangleSubGeometry.POSITION_DATA] = true; + if (subGeometry.vertexNormals) + this._pVertexDataDirty[TriangleSubGeometry.NORMAL_DATA] = true; + if (subGeometry.vertexTangents) + this._pVertexDataDirty[TriangleSubGeometry.TANGENT_DATA] = true; + if (subGeometry.uvs) + this._pVertexDataDirty[TriangleSubGeometry.UV_DATA] = true; + if (subGeometry.secondaryUVs) + this._pVertexDataDirty[TriangleSubGeometry.SECONDARY_UV_DATA] = true; + if (subGeometry.jointIndices) + this._pVertexDataDirty[TriangleSubGeometry.JOINT_INDEX_DATA] = true; + if (subGeometry.jointWeights) + this._pVertexDataDirty[TriangleSubGeometry.JOINT_WEIGHT_DATA] = true; + switch (subGeometry.jointsPerVertex) { + case 1: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_1; + break; + case 2: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_2; + break; + case 3: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_3; + break; + case 4: + this.JOINT_INDEX_FORMAT = this.JOINT_WEIGHT_FORMAT = ContextGLVertexBufferFormat.FLOAT_4; + break; + default: + } + return subGeometry; + }; + /** + * //TODO + * + * @param pool + * @param materialOwner + * @param level + * @param indexOffset + * @returns {away.pool.TriangleSubMeshRenderable} + * @protected + */ + TriangleSubMeshRenderable.prototype._pGetOverflowRenderable = function (pool, materialOwner, level, indexOffset) { + return new TriangleSubMeshRenderable(pool, materialOwner, level, indexOffset); + }; + /** + * + */ + TriangleSubMeshRenderable.id = "trianglesubmesh"; + return TriangleSubMeshRenderable; +})(RenderableBase); +module.exports = TriangleSubMeshRenderable; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3RyaWFuZ2xlc3VibWVzaHJlbmRlcmFibGUudHMiXSwibmFtZXMiOlsiVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZSIsIlRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUuY29uc3RydWN0b3IiLCJUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlLl9wR2V0U3ViR2VvbWV0cnkiLCJUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlLl9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFHdEYsSUFBTyxjQUFjLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQUM3RSxJQUFPLDJCQUEyQixXQUFXLHFEQUFxRCxDQUFDLENBQUM7QUFFcEcsQUFHQTs7R0FERztJQUNHLHlCQUF5QjtJQUFTQSxVQUFsQ0EseUJBQXlCQSxVQUF1QkE7SUFhckRBOzs7Ozs7O09BT0dBO0lBQ0hBLFNBckJLQSx5QkFBeUJBLENBcUJsQkEsSUFBbUJBLEVBQUVBLE9BQXVCQSxFQUFFQSxLQUFnQkEsRUFBRUEsV0FBc0JBO1FBQXhDQyxxQkFBZ0JBLEdBQWhCQSxTQUFnQkE7UUFBRUEsMkJBQXNCQSxHQUF0QkEsZUFBc0JBO1FBRWpHQSxrQkFBTUEsSUFBSUEsRUFBRUEsT0FBT0EsQ0FBQ0EsVUFBVUEsRUFBRUEsT0FBT0EsRUFBRUEsS0FBS0EsRUFBRUEsV0FBV0EsQ0FBQ0EsQ0FBQ0E7UUFFN0RBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE9BQU9BLENBQUNBO0lBQ3hCQSxDQUFDQTtJQUVERDs7OztPQUlHQTtJQUNJQSxvREFBZ0JBLEdBQXZCQTtRQUVDRSxJQUFJQSxXQUErQkEsQ0FBQ0E7UUFFcENBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLFFBQVFBLENBQUNBO1lBQ3pCQSxXQUFXQSxHQUF5QkEsSUFBSUEsQ0FBQ0Es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Q0FBQ0E7SUFDakdBLENBQUNBO0lBNUZESDs7T0FFR0E7SUFDV0EsNEJBQUVBLEdBQVVBLGlCQUFpQkEsQ0FBQ0E7SUEwRjdDQSxnQ0FBQ0E7QUFBREEsQ0EvRkEsQUErRkNBLEVBL0Z1QyxjQUFjLEVBK0ZyRDtBQUVELEFBQW1DLGlCQUExQix5QkFBeUIsQ0FBQyIsImZpbGUiOiJwb29sL1RyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IElNYXRlcmlhbE93bmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9JTWF0ZXJpYWxPd25lclwiKTtcbmltcG9ydCBUcmlhbmdsZVN1Yk1lc2hcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViTWVzaFwiKTtcbmltcG9ydCBUcmlhbmdsZVN1Ykdlb21ldHJ5XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2Jhc2UvVHJpYW5nbGVTdWJHZW9tZXRyeVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvUmVuZGVyYWJsZVBvb2xcIik7XG5cbmltcG9ydCBSZW5kZXJhYmxlQmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvUmVuZGVyYWJsZUJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXRcIik7XG5cbi8qKlxuICogQGNsYXNzIGF3YXkucG9vbC5UcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGUgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZVxue1xuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaWQ6c3RyaW5nID0gXCJ0cmlhbmdsZXN1Ym1lc2hcIjtcblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBzdWJNZXNoOlRyaWFuZ2xlU3ViTWVzaDtcblxuXG5cdC8qKlxuXHQgKiAvL1RPRE9cblx0ICpcblx0ICogQHBhcmFtIHBvb2xcblx0ICogQHBhcmFtIHN1Yk1lc2hcblx0ICogQHBhcmFtIGxldmVsXG5cdCAqIEBwYXJhbSBpbmRleE9mZnNldFxuXHQgKi9cblx0Y29uc3RydWN0b3IocG9vbDpSZW5kZXJhYmxlUG9vbCwgc3ViTWVzaDpUcmlhbmdsZVN1Yk1lc2gsIGxldmVsOm51bWJlciA9IDAsIGluZGV4T2Zmc2V0Om51bWJlciA9IDApXG5cdHtcblx0XHRzdXBlcihwb29sLCBzdWJNZXNoLnBhcmVudE1lc2gsIHN1Yk1lc2gsIGxldmVsLCBpbmRleE9mZnNldCk7XG5cblx0XHR0aGlzLnN1Yk1lc2ggPSBzdWJNZXNoO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtTdWJHZW9tZXRyeUJhc2V9XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBfcEdldFN1Ykdlb21ldHJ5KCk6VHJpYW5nbGVTdWJHZW9tZXRyeVxuXHR7XG5cdFx0dmFyIHN1Ykdlb21ldHJ5OlRyaWFuZ2xlU3ViR2VvbWV0cnk7XG5cblx0XHRpZiAodGhpcy5zdWJNZXNoLmFuaW1hdG9yKVxuXHRcdFx0c3ViR2VvbWV0cnkgPSA8VHJpYW5nbGVTdWJHZW9tZXRyeT4gdGhpcy5zdWJNZXNoLmFuaW1hdG9yLmdldFJlbmRlcmFibGVTdWJHZW9tZXRyeSh0aGlzLCB0aGlzLnN1Yk1lc2guc3ViR2VvbWV0cnkpO1xuXHRcdGVsc2Vcblx0XHRcdHN1Ykdlb21ldHJ5ID0gdGhpcy5zdWJNZXNoLnN1Ykdlb21ldHJ5O1xuXG5cdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlBPU0lUSU9OX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS52ZXJ0ZXhOb3JtYWxzKVxuXHRcdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5Lk5PUk1BTF9EQVRBXSA9IHRydWU7XG5cblx0XHRpZiAoc3ViR2VvbWV0cnkudmVydGV4VGFuZ2VudHMpXG5cdFx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuVEFOR0VOVF9EQVRBXSA9IHRydWU7XG5cblx0XHRpZiAoc3ViR2VvbWV0cnkudXZzKVxuXHRcdFx0dGhpcy5fcFZlcnRleERhdGFEaXJ0eVtUcmlhbmdsZVN1Ykdlb21ldHJ5LlVWX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS5zZWNvbmRhcnlVVnMpXG5cdFx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuU0VDT05EQVJZX1VWX0RBVEFdID0gdHJ1ZTtcblxuXHRcdGlmIChzdWJHZW9tZXRyeS5qb2ludEluZGljZXMpXG5cdFx0XHR0aGlzLl9wVmVydGV4RGF0YURpcnR5W1RyaWFuZ2xlU3ViR2VvbWV0cnkuSk9JTlRfSU5ERVhfREFUQV0gPSB0cnVlO1xuXG5cdFx0aWYgKHN1Ykdlb21ldHJ5LmpvaW50V2VpZ2h0cylcblx0XHRcdHRoaXMuX3BWZXJ0ZXhEYXRhRGlydHlbVHJpYW5nbGVTdWJHZW9tZXRyeS5KT0lOVF9XRUlHSFRfREFUQV0gPSB0cnVlO1xuXG5cdFx0c3dpdGNoKHN1Ykdlb21ldHJ5LmpvaW50c1BlclZlcnRleCkge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHR0aGlzLkpPSU5UX0lOREVYX0ZPUk1BVCA9IHRoaXMuSk9JTlRfV0VJR0hUX0ZPUk1BVCA9IENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5GTE9BVF8xO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGhpcy5KT0lOVF9JTkRFWF9GT1JNQVQgPSB0aGlzLkpPSU5UX1dFSUdIVF9GT1JNQVQgPSBDb250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXQuRkxPQVRfMjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDM6XG5cdFx0XHRcdHRoaXMuSk9JTlRfSU5ERVhfRk9STUFUID0gdGhpcy5KT0lOVF9XRUlHSFRfRk9STUFUID0gQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHR0aGlzLkpPSU5UX0lOREVYX0ZPUk1BVCA9IHRoaXMuSk9JTlRfV0VJR0hUX0ZPUk1BVCA9IENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5GTE9BVF80O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1Ykdlb21ldHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gcG9vbFxuXHQgKiBAcGFyYW0gbWF0ZXJpYWxPd25lclxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIGluZGV4T2Zmc2V0XG5cdCAqIEByZXR1cm5zIHthd2F5LnBvb2wuVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZX1cblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0cHVibGljIF9wR2V0T3ZlcmZsb3dSZW5kZXJhYmxlKHBvb2w6UmVuZGVyYWJsZVBvb2wsIG1hdGVyaWFsT3duZXI6SU1hdGVyaWFsT3duZXIsIGxldmVsOm51bWJlciwgaW5kZXhPZmZzZXQ6bnVtYmVyKTpSZW5kZXJhYmxlQmFzZVxuXHR7XG5cdFx0cmV0dXJuIG5ldyBUcmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlKHBvb2wsIDxUcmlhbmdsZVN1Yk1lc2g+IG1hdGVyaWFsT3duZXIsIGxldmVsLCBpbmRleE9mZnNldCk7XG5cdH1cbn1cblxuZXhwb3J0ID0gVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZTsiXX0= \ No newline at end of file diff --git a/lib/core/pool/TriangleSubMeshRenderable.ts b/lib/pool/TriangleSubMeshRenderable.ts similarity index 95% rename from lib/core/pool/TriangleSubMeshRenderable.ts rename to lib/pool/TriangleSubMeshRenderable.ts index 47230a61..3a0ef0e8 100644 --- a/lib/core/pool/TriangleSubMeshRenderable.ts +++ b/lib/pool/TriangleSubMeshRenderable.ts @@ -3,8 +3,8 @@ import TriangleSubMesh = require("awayjs-display/lib/base/TriangleSubMesh"); import TriangleSubGeometry = require("awayjs-display/lib/base/TriangleSubGeometry"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); /** * @class away.pool.TriangleSubMeshRenderable diff --git a/lib/pool/VertexData.js b/lib/pool/VertexData.js new file mode 100755 index 00000000..470e0212 --- /dev/null +++ b/lib/pool/VertexData.js @@ -0,0 +1,100 @@ +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); +/** + * + */ +var VertexData = (function () { + function VertexData(subGeometry, dataType) { + var _this = this; + this._dataDirty = true; + this.invalid = new Array(8); + this.buffers = new Array(8); + this.contexts = new Array(8); + this._subGeometry = subGeometry; + this._dataType = dataType; + this._onVerticesUpdatedDelegate = function (event) { return _this._onVerticesUpdated(event); }; + this._subGeometry.addEventListener(SubGeometryEvent.VERTICES_UPDATED, this._onVerticesUpdatedDelegate); + } + VertexData.prototype.updateData = function (originalIndices, indexMappings) { + if (originalIndices === void 0) { originalIndices = null; } + if (indexMappings === void 0) { indexMappings = null; } + if (this._dataDirty) { + this._dataDirty = false; + this.dataPerVertex = this._subGeometry.getStride(this._dataType); + var vertices = this._subGeometry[this._dataType]; + if (indexMappings == null) { + this.setData(vertices); + } + else { + var splitVerts = new Array(originalIndices.length * this.dataPerVertex); + var originalIndex; + var splitIndex; + var i = 0; + var j = 0; + while (i < originalIndices.length) { + originalIndex = originalIndices[i]; + splitIndex = indexMappings[originalIndex] * this.dataPerVertex; + originalIndex *= this.dataPerVertex; + for (j = 0; j < this.dataPerVertex; j++) + splitVerts[splitIndex + j] = vertices[originalIndex + j]; + i++; + } + this.setData(splitVerts); + } + } + }; + VertexData.prototype.dispose = function () { + for (var i = 0; i < 8; ++i) { + if (this.contexts[i]) { + this.contexts[i].disposeVertexData(this); + this.contexts[i] = null; + } + } + }; + /** + * @private + */ + VertexData.prototype.disposeBuffers = function () { + for (var i = 0; i < 8; ++i) { + if (this.buffers[i]) { + this.buffers[i].dispose(); + this.buffers[i] = null; + } + } + }; + /** + * @private + */ + VertexData.prototype.invalidateBuffers = function () { + for (var i = 0; i < 8; ++i) + this.invalid[i] = true; + }; + /** + * + * @param data + * @param dataPerVertex + * @private + */ + VertexData.prototype.setData = function (data) { + if (this.data && this.data.length != data.length) + this.disposeBuffers(); + else + this.invalidateBuffers(); + this.data = data; + }; + /** + * //TODO + * + * @param event + * @private + */ + VertexData.prototype._onVerticesUpdated = function (event) { + var dataType = this._subGeometry.concatenateArrays ? SubGeometryBase.VERTEX_DATA : event.dataType; + if (dataType == this._dataType) + this._dataDirty = true; + }; + return VertexData; +})(); +module.exports = VertexData; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3ZlcnRleGRhdGEudHMiXSwibmFtZXMiOlsiVmVydGV4RGF0YSIsIlZlcnRleERhdGEuY29uc3RydWN0b3IiLCJWZXJ0ZXhEYXRhLnVwZGF0ZURhdGEiLCJWZXJ0ZXhEYXRhLmRpc3Bvc2UiLCJWZXJ0ZXhEYXRhLmRpc3Bvc2VCdWZmZXJzIiwiVmVydGV4RGF0YS5pbnZhbGlkYXRlQnVmZmVycyIsIlZlcnRleERhdGEuc2V0RGF0YSIsIlZlcnRleERhdGEuX29uVmVydGljZXNVcGRhdGVkIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLGVBQWUsV0FBYyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQy9FLElBQU8sZ0JBQWdCLFdBQWMsNENBQTRDLENBQUMsQ0FBQztBQUtuRixBQUdBOztHQURHO0lBQ0csVUFBVTtJQWlCZkEsU0FqQktBLFVBQVVBLENBaUJIQSxXQUEyQkEsRUFBRUEsUUFBZUE7UUFqQnpEQyxpQkF5SENBO1FBcEhRQSxlQUFVQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUVuQkEsWUFBT0EsR0FBa0JBLElBQUlBLEtBQUtBLENBQVVBLENBQUNBLENBQUNBLENBQUNBO1FBRS9DQSxZQUFPQSxHQUF3QkEsSUFBSUEsS0FBS0EsQ0FBZ0JBLENBQUNBLENBQUNBLENBQUNBO1FBRTNEQSxhQUFRQSxHQUF3QkEsSUFBSUEsS0FBS0EsQ0FBZ0JBLENBQUNBLENBQUNBLENBQUNBO1FBUWxFQSxJQUFJQSxDQUFDQSxZQUFZQSxHQUFHQSxXQUFXQSxDQUFDQTtRQUNoQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFFMUJBLElBQUlBLENBQUNBLDBCQUEwQkEsR0FBR0EsVUFBQ0EsS0FBc0JBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBOUJBLENBQThCQSxDQUFDQTtRQUM3RkEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxnQkFB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QTtRQUVoRE8sSUFBSUEsUUFBUUEsR0FBVUEsSUFBSUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsaUJBQWlCQSxHQUFFQSxlQUFlQSxDQUFDQSxXQUFXQSxHQUFHQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUV4R0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsUUFBUUEsSUFBSUEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7WUFDOUJBLElBQUlBLENBQUNBLFVBQVVBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUNGUCxpQkFBQ0E7QUFBREEsQ0F6SEEsQUF5SENBLElBQUE7QUFFRCxBQUFvQixpQkFBWCxVQUFVLENBQUMiLCJmaWxlIjoicG9vbC9WZXJ0ZXhEYXRhLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdWJHZW9tZXRyeUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1N1Ykdlb21ldHJ5QmFzZVwiKTtcbmltcG9ydCBTdWJHZW9tZXRyeUV2ZW50XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZXZlbnRzL1N1Ykdlb21ldHJ5RXZlbnRcIik7XG5cbmltcG9ydCBDb250ZXh0R0xCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCYXNlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lWZXJ0ZXhCdWZmZXJcIik7XG5cbi8qKlxuICpcbiAqL1xuY2xhc3MgVmVydGV4RGF0YVxue1xuXHRwcml2YXRlIF9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlOihldmVudDpTdWJHZW9tZXRyeUV2ZW50KSA9PiB2b2lkO1xuXHRwcml2YXRlIF9zdWJHZW9tZXRyeTpTdWJHZW9tZXRyeUJhc2U7XG5cdHByaXZhdGUgX2RhdGFUeXBlOnN0cmluZztcblx0cHJpdmF0ZSBfZGF0YURpcnR5ID0gdHJ1ZTtcblxuXHRwdWJsaWMgaW52YWxpZDpBcnJheTxib29sZWFuPiA9IG5ldyBBcnJheTxib29sZWFuPig4KTtcblxuXHRwdWJsaWMgYnVmZmVyczpBcnJheTxJVmVydGV4QnVmZmVyPiA9IG5ldyBBcnJheTxJVmVydGV4QnVmZmVyPig4KTtcblxuXHRwdWJsaWMgY29udGV4dHM6QXJyYXk8Q29udGV4dEdMQmFzZT4gPSBuZXcgQXJyYXk8Q29udGV4dEdMQmFzZT4oOCk7XG5cblx0cHVibGljIGRhdGE6QXJyYXk8bnVtYmVyPjtcblxuXHRwdWJsaWMgZGF0YVBlclZlcnRleDpudW1iZXI7XG5cblx0Y29uc3RydWN0b3Ioc3ViR2VvbWV0cnk6U3ViR2VvbWV0cnlCYXNlLCBkYXRhVHlwZTpzdHJpbmcpXG5cdHtcblx0XHR0aGlzLl9zdWJHZW9tZXRyeSA9IHN1Ykdlb21ldHJ5O1xuXHRcdHRoaXMuX2RhdGFUeXBlID0gZGF0YVR5cGU7XG5cblx0XHR0aGlzLl9vblZlcnRpY2VzVXBkYXRlZERlbGVnYXRlID0gKGV2ZW50OlN1Ykdlb21ldHJ5RXZlbnQpID0+IHRoaXMuX29uVmVydGljZXNVcGRhdGVkKGV2ZW50KTtcblx0XHR0aGlzLl9zdWJHZW9tZXRyeS5hZGRFdmVudExpc3RlbmVyKFN1Ykdlb21ldHJ5RXZlbnQuVkVSVElDRVNfVVBEQVRFRCwgdGhpcy5fb25WZXJ0aWNlc1VwZGF0ZWREZWxlZ2F0ZSk7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlRGF0YShvcmlnaW5hbEluZGljZXM6QXJyYXk8bnVtYmVyPiA9IG51bGwsIGluZGV4TWFwcGluZ3M6QXJyYXk8bnVtYmVyPiA9IG51bGwpXG5cdHtcblx0XHRpZiAodGhpcy5fZGF0YURpcnR5KSB7XG5cdFx0XHR0aGlzLl9kYXRhRGlydHkgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy5kYXRhUGVyVmVydGV4ID0gdGhpcy5fc3ViR2VvbWV0cnkuZ2V0U3RyaWRlKHRoaXMuX2RhdGFUeXBlKTtcblxuXHRcdFx0dmFyIHZlcnRpY2VzOkFycmF5PG51bWJlcj4gPSB0aGlzLl9zdWJHZW9tZXRyeVt0aGlzLl9kYXRhVHlwZV07XG5cblx0XHRcdGlmIChpbmRleE1hcHBpbmdzID09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5zZXREYXRhKHZlcnRpY2VzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzcGxpdFZlcnRzOkFycmF5PG51bWJlcj4gPSBuZXcgQXJyYXk8bnVtYmVyPihvcmlnaW5hbEluZGljZXMubGVuZ3RoKnRoaXMuZGF0YVBlclZlcnRleCk7XG5cdFx0XHRcdHZhciBvcmlnaW5hbEluZGV4Om51bWJlcjtcblx0XHRcdFx0dmFyIHNwbGl0SW5kZXg6bnVtYmVyO1xuXHRcdFx0XHR2YXIgaTpudW1iZXIgPSAwO1xuXHRcdFx0XHR2YXIgajpudW1iZXIgPSAwO1xuXHRcdFx0XHR3aGlsZShpIDwgb3JpZ2luYWxJbmRpY2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9yaWdpbmFsSW5kZXggPSBvcmlnaW5hbEluZGljZXNbaV07XG5cblx0XHRcdFx0XHRzcGxpdEluZGV4ID0gaW5kZXhNYXBwaW5nc1tvcmlnaW5hbEluZGV4XSp0aGlzLmRhdGFQZXJWZXJ0ZXg7XG5cdFx0XHRcdFx0b3JpZ2luYWxJbmRleCAqPSB0aGlzLmRhdGFQZXJWZXJ0ZXg7XG5cblx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgdGhpcy5kYXRhUGVyVmVydGV4OyBqKyspXG5cdFx0XHRcdFx0XHRzcGxpdFZlcnRzW3NwbGl0SW5kZXggKyBqXSA9IHZlcnRpY2VzW29yaWdpbmFsSW5kZXggKyBqXTtcblxuXHRcdFx0XHRcdGkrKztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0RGF0YShzcGxpdFZlcnRzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA4OyArK2kpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRleHRzW2ldKSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dHNbaV0uZGlzcG9zZVZlcnRleERhdGEodGhpcyk7XG5cdFx0XHRcdHRoaXMuY29udGV4dHNbaV0gPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBkaXNwb3NlQnVmZmVycygpXG5cdHtcblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCA4OyArK2kpIHtcblx0XHRcdGlmICh0aGlzLmJ1ZmZlcnNbaV0pIHtcblx0XHRcdFx0dGhpcy5idWZmZXJzW2ldLmRpc3Bvc2UoKTtcblx0XHRcdFx0dGhpcy5idWZmZXJzW2ldID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgaW52YWxpZGF0ZUJ1ZmZlcnMoKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgODsgKytpKVxuXHRcdFx0dGhpcy5pbnZhbGlkW2ldID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YVxuXHQgKiBAcGFyYW0gZGF0YVBlclZlcnRleFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBzZXREYXRhKGRhdGE6QXJyYXk8bnVtYmVyPilcblx0e1xuXHRcdGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCAhPSBkYXRhLmxlbmd0aClcblx0XHRcdHRoaXMuZGlzcG9zZUJ1ZmZlcnMoKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmludmFsaWRhdGVCdWZmZXJzKCk7XG5cblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIC8vVE9ET1xuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgX29uVmVydGljZXNVcGRhdGVkKGV2ZW50OlN1Ykdlb21ldHJ5RXZlbnQpXG5cdHtcblx0XHR2YXIgZGF0YVR5cGU6c3RyaW5nID0gdGhpcy5fc3ViR2VvbWV0cnkuY29uY2F0ZW5hdGVBcnJheXM/IFN1Ykdlb21ldHJ5QmFzZS5WRVJURVhfREFUQSA6IGV2ZW50LmRhdGFUeXBlO1xuXG5cdFx0aWYgKGRhdGFUeXBlID09IHRoaXMuX2RhdGFUeXBlKVxuXHRcdFx0dGhpcy5fZGF0YURpcnR5ID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgPSBWZXJ0ZXhEYXRhOyJdfQ== \ No newline at end of file diff --git a/lib/core/pool/VertexData.ts b/lib/pool/VertexData.ts similarity index 94% rename from lib/core/pool/VertexData.ts rename to lib/pool/VertexData.ts index 1d9abaae..a09df195 100644 --- a/lib/core/pool/VertexData.ts +++ b/lib/pool/VertexData.ts @@ -1,8 +1,8 @@ import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); import SubGeometryEvent = require("awayjs-display/lib/events/SubGeometryEvent"); -import ContextGLBase = require("awayjs-stagegl/lib/core/stagegl/ContextGLBase"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import ContextGLBase = require("awayjs-stagegl/lib/base/ContextGLBase"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); /** * diff --git a/lib/pool/VertexDataPool.js b/lib/pool/VertexDataPool.js new file mode 100755 index 00000000..329b76b1 --- /dev/null +++ b/lib/pool/VertexDataPool.js @@ -0,0 +1,41 @@ +var SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); +var VertexData = require("awayjs-stagegl/lib/pool/VertexData"); +/** + * + */ +var VertexDataPool = (function () { + function VertexDataPool() { + } + VertexDataPool.getItem = function (subGeometry, indexData, dataType) { + if (subGeometry.concatenateArrays) + dataType = SubGeometryBase.VERTEX_DATA; + var subGeometryDictionary = (VertexDataPool._pool[subGeometry.id] || (VertexDataPool._pool[subGeometry.id] = new Object())); + var subGeometryData = (subGeometryDictionary[dataType] || (subGeometryDictionary[dataType] = new Array())); + var vertexData = subGeometryData[indexData.level] || (subGeometryData[indexData.level] = new VertexData(subGeometry, dataType)); + vertexData.updateData(indexData.originalIndices, indexData.indexMappings); + return vertexData; + }; + VertexDataPool.disposeItem = function (subGeometry, level, dataType) { + var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; + var subGeometryData = subGeometryDictionary[dataType]; + subGeometryData[level].dispose(); + subGeometryData[level] = null; + }; + VertexDataPool.prototype.disposeData = function (subGeometry) { + var subGeometryDictionary = VertexDataPool._pool[subGeometry.id]; + for (var key in subGeometryDictionary) { + var subGeometryData = subGeometryDictionary[key]; + var len = subGeometryData.length; + for (var i = 0; i < len; i++) { + subGeometryData[i].dispose(); + subGeometryData[i] = null; + } + } + VertexDataPool._pool[subGeometry.id] = null; + }; + VertexDataPool._pool = new Object(); + return VertexDataPool; +})(); +module.exports = VertexDataPool; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL3ZlcnRleGRhdGFwb29sLnRzIl0sIm5hbWVzIjpbIlZlcnRleERhdGFQb29sIiwiVmVydGV4RGF0YVBvb2wuY29uc3RydWN0b3IiLCJWZXJ0ZXhEYXRhUG9vbC5nZXRJdGVtIiwiVmVydGV4RGF0YVBvb2wuZGlzcG9zZUl0ZW0iLCJWZXJ0ZXhEYXRhUG9vbC5kaXNwb3NlRGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxlQUFlLFdBQWMseUNBQXlDLENBQUMsQ0FBQztBQUcvRSxJQUFPLFVBQVUsV0FBZSxvQ0FBb0MsQ0FBQyxDQUFDO0FBRXRFLEFBR0E7O0dBREc7SUFDRyxjQUFjO0lBSW5CQSxTQUpLQSxjQUFjQTtJQU1uQkMsQ0FBQ0E7SUFFYUQsc0JBQU9BLEdBQXJCQSxVQUFzQkEsV0FBMkJBLEVBQUVBLFNBQW1CQSxFQUFFQSxRQUFlQTtRQUV0RkUsRUFBRUEsQ0FBQ0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsaUJBQWlCQSxDQUFDQTtZQUNqQ0EsUUFBUUEsR0FBR0EsZUFBZUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFFeENBLElBQUlBLHFCQUFxQkEsR0FBbUJBLENBQUNBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLElBQUlBLE1BQU1BLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzVJQSxJQUFJQSxlQUFlQSxHQUF5Q0EsQ0FBQ0EscUJBQXFCQSxDQUFDQSxRQUFRQSxDQUFDQSxJQUFJQSxDQUFDQSxxQkFBcUJBLENBQUNBLFFBQVFBLENBQUNBLEdBQUdBLElBQUlBLEtBQUtBLEVBQWNBLENBQUNBLENBQUNBLENBQUNBO1FBRTdKQSxJQUFJQSxVQUFVQSxHQUFjQSxlQUFlQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxJQUFJQSxVQUFVQSxDQUFDQSxXQUFXQSxFQUFFQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMzSUEsVUFBVUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsZUFBZUEsRUFBRUEsU0FBU0EsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0E7UUFFMUVBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO0lBQ25CQSxDQUFDQTtJQUVhRiwwQkFBV0EsR0FBekJBLFVBQTBCQSxXQUEyQkEsRUFBRUEsS0FBWUEsRUFBRUEsUUFBZUE7UUFFbkZHLElBQUlBLHFCQUFxQkEsR0FBbUJBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBQ2pGQSxJQUFJQSxlQUFlQSxHQUF5Q0EscUJBQXFCQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUU1RkEsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFDakNBLGVBQWVBLENBQUNBLEtBQUtBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBO0lBQy9CQSxDQUFDQTtJQUVNSCxvQ0FBV0EsR0FBbEJBLFVBQW1CQSxXQUEyQkE7UUFFN0NJLElBQUlBLHFCQUFxQkEsR0FBbUJBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLFdBQVdBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBO1FBRWpGQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxxQkFBcUJBLENBQUNBLENBQUNBLENBQUNBO1lBQ3ZDQSxJQUFJQSxlQUFlQSxHQUF5Q0EscUJBQXFCQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUV2RkEsSUFBSUEsR0FBR0EsR0FBVUEsZUFBZUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDeENBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO2dCQUNyQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7Z0JBQzdCQSxlQUFlQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUMzQkEsQ0FBQ0E7UUFDRkEsQ0FBQ0E7UUFFREEsY0FBY0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7SUFDN0NBLENBQUNBO0lBNUNjSixvQkFBS0EsR0FBVUEsSUFBSUEsTUFBTUEsRUFBRUEsQ0FBQ0E7SUE2QzVDQSxxQkFBQ0E7QUFBREEsQ0EvQ0EsQUErQ0NBLElBQUE7QUFFRCxBQUF3QixpQkFBZixjQUFjLENBQUMiLCJmaWxlIjoicG9vbC9WZXJ0ZXhEYXRhUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3ViR2VvbWV0cnlCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9TdWJHZW9tZXRyeUJhc2VcIik7XG5cbmltcG9ydCBJbmRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvSW5kZXhEYXRhXCIpO1xuaW1wb3J0IFZlcnRleERhdGFcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3Bvb2wvVmVydGV4RGF0YVwiKTtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBWZXJ0ZXhEYXRhUG9vbFxue1xuXHRwcml2YXRlIHN0YXRpYyBfcG9vbDpPYmplY3QgPSBuZXcgT2JqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGdldEl0ZW0oc3ViR2VvbWV0cnk6U3ViR2VvbWV0cnlCYXNlLCBpbmRleERhdGE6SW5kZXhEYXRhLCBkYXRhVHlwZTpzdHJpbmcpOlZlcnRleERhdGFcblx0e1xuXHRcdGlmIChzdWJHZW9tZXRyeS5jb25jYXRlbmF0ZUFycmF5cylcblx0XHRcdGRhdGFUeXBlID0gU3ViR2VvbWV0cnlCYXNlLlZFUlRFWF9EQVRBO1xuXG5cdFx0dmFyIHN1Ykdlb21ldHJ5RGljdGlvbmFyeTpPYmplY3QgPSA8T2JqZWN0PiAoVmVydGV4RGF0YVBvb2wuX3Bvb2xbc3ViR2VvbWV0cnkuaWRdIHx8IChWZXJ0ZXhEYXRhUG9vbC5fcG9vbFtzdWJHZW9tZXRyeS5pZF0gPSBuZXcgT2JqZWN0KCkpKTtcblx0XHR2YXIgc3ViR2VvbWV0cnlEYXRhOkFycmF5PFZlcnRleERhdGE+ID0gPEFycmF5PFZlcnRleERhdGE+PiAoc3ViR2VvbWV0cnlEaWN0aW9uYXJ5W2RhdGFUeXBlXSB8fCAoc3ViR2VvbWV0cnlEaWN0aW9uYXJ5W2RhdGFUeXBlXSA9IG5ldyBBcnJheTxWZXJ0ZXhEYXRhPigpKSk7XG5cblx0XHR2YXIgdmVydGV4RGF0YTpWZXJ0ZXhEYXRhID0gc3ViR2VvbWV0cnlEYXRhW2luZGV4RGF0YS5sZXZlbF0gfHwgKHN1Ykdlb21ldHJ5RGF0YVtpbmRleERhdGEubGV2ZWxdID0gbmV3IFZlcnRleERhdGEoc3ViR2VvbWV0cnksIGRhdGFUeXBlKSk7XG5cdFx0dmVydGV4RGF0YS51cGRhdGVEYXRhKGluZGV4RGF0YS5vcmlnaW5hbEluZGljZXMsIGluZGV4RGF0YS5pbmRleE1hcHBpbmdzKTtcblxuXHRcdHJldHVybiB2ZXJ0ZXhEYXRhO1xuXHR9XG5cblx0cHVibGljIHN0YXRpYyBkaXNwb3NlSXRlbShzdWJHZW9tZXRyeTpTdWJHZW9tZXRyeUJhc2UsIGxldmVsOm51bWJlciwgZGF0YVR5cGU6c3RyaW5nKVxuXHR7XG5cdFx0dmFyIHN1Ykdlb21ldHJ5RGljdGlvbmFyeTpPYmplY3QgPSA8T2JqZWN0PiBWZXJ0ZXhEYXRhUG9vbC5fcG9vbFtzdWJHZW9tZXRyeS5pZF07XG5cdFx0dmFyIHN1Ykdlb21ldHJ5RGF0YTpBcnJheTxWZXJ0ZXhEYXRhPiA9IDxBcnJheTxWZXJ0ZXhEYXRhPj4gc3ViR2VvbWV0cnlEaWN0aW9uYXJ5W2RhdGFUeXBlXTtcblxuXHRcdHN1Ykdlb21ldHJ5RGF0YVtsZXZlbF0uZGlzcG9zZSgpO1xuXHRcdHN1Ykdlb21ldHJ5RGF0YVtsZXZlbF0gPSBudWxsO1xuXHR9XG5cblx0cHVibGljIGRpc3Bvc2VEYXRhKHN1Ykdlb21ldHJ5OlN1Ykdlb21ldHJ5QmFzZSlcblx0e1xuXHRcdHZhciBzdWJHZW9tZXRyeURpY3Rpb25hcnk6T2JqZWN0ID0gPE9iamVjdD4gVmVydGV4RGF0YVBvb2wuX3Bvb2xbc3ViR2VvbWV0cnkuaWRdO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIHN1Ykdlb21ldHJ5RGljdGlvbmFyeSkge1xuXHRcdFx0dmFyIHN1Ykdlb21ldHJ5RGF0YTpBcnJheTxWZXJ0ZXhEYXRhPiA9IDxBcnJheTxWZXJ0ZXhEYXRhPj4gc3ViR2VvbWV0cnlEaWN0aW9uYXJ5W2tleV07XG5cblx0XHRcdHZhciBsZW46bnVtYmVyID0gc3ViR2VvbWV0cnlEYXRhLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHN1Ykdlb21ldHJ5RGF0YVtpXS5kaXNwb3NlKCk7XG5cdFx0XHRcdHN1Ykdlb21ldHJ5RGF0YVtpXSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0VmVydGV4RGF0YVBvb2wuX3Bvb2xbc3ViR2VvbWV0cnkuaWRdID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgPSBWZXJ0ZXhEYXRhUG9vbDsiXX0= \ No newline at end of file diff --git a/lib/core/pool/VertexDataPool.ts b/lib/pool/VertexDataPool.ts similarity index 92% rename from lib/core/pool/VertexDataPool.ts rename to lib/pool/VertexDataPool.ts index b3fdbba9..c631df94 100644 --- a/lib/core/pool/VertexDataPool.ts +++ b/lib/pool/VertexDataPool.ts @@ -1,7 +1,7 @@ import SubGeometryBase = require("awayjs-display/lib/base/SubGeometryBase"); -import IndexData = require("awayjs-stagegl/lib/core/pool/IndexData"); -import VertexData = require("awayjs-stagegl/lib/core/pool/VertexData"); +import IndexData = require("awayjs-stagegl/lib/pool/IndexData"); +import VertexData = require("awayjs-stagegl/lib/pool/VertexData"); /** * diff --git a/lib/render/DefaultRenderer.js b/lib/render/DefaultRenderer.js new file mode 100755 index 00000000..5007f37a --- /dev/null +++ b/lib/render/DefaultRenderer.js @@ -0,0 +1,335 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); +var Vector3D = require("awayjs-core/lib/geom/Vector3D"); +var RenderTexture = require("awayjs-core/lib/textures/RenderTexture"); +var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); +var SkyboxRenderable = require("awayjs-stagegl/lib/pool/SkyboxRenderable"); +var DepthRenderer = require("awayjs-stagegl/lib/render/DepthRenderer"); +var Filter3DRenderer = require("awayjs-stagegl/lib/render/Filter3DRenderer"); +var RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); +var StageManager = require("awayjs-stagegl/lib/managers/StageManager"); +var DepthMapPass = require("awayjs-stagegl/lib/materials/passes/DepthMapPass"); +var DistanceMapPass = require("awayjs-stagegl/lib/materials/passes/DistanceMapPass"); +/** + * The DefaultRenderer class provides the default rendering method. It renders the scene graph objects using the + * materials assigned to them. + * + * @class away.render.DefaultRenderer + */ +var DefaultRenderer = (function (_super) { + __extends(DefaultRenderer, _super); + /** + * Creates a new DefaultRenderer object. + * + * @param antiAlias The amount of anti-aliasing to use. + * @param renderMode The render mode to use. + */ + function DefaultRenderer(forceSoftware, profile, mode) { + if (forceSoftware === void 0) { forceSoftware = false; } + if (profile === void 0) { profile = "baseline"; } + if (mode === void 0) { mode = "auto"; } + _super.call(this); + this._skyboxProjection = new Matrix3D(); + this._skyboxRenderablePool = RenderablePool.getPool(SkyboxRenderable); + this._pDepthRenderer = new DepthRenderer(new DepthMapPass()); + this._pDistanceRenderer = new DepthRenderer(new DistanceMapPass()); + if (this._pStage == null) + this.stage = StageManager.getInstance().getFreeStage(forceSoftware, profile, mode); + this._pRttBufferManager = RTTBufferManager.getInstance(this._pStage); + if (this._width == 0) + this.width = window.innerWidth; + else + this._pRttBufferManager.viewWidth = this._width; + if (this._height == 0) + this.height = window.innerHeight; + else + this._pRttBufferManager.viewHeight = this._height; + } + Object.defineProperty(DefaultRenderer.prototype, "antiAlias", { + get: function () { + return this._antiAlias; + }, + set: function (value) { + if (this._antiAlias == value) + return; + this._antiAlias = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DefaultRenderer.prototype, "depthPrepass", { + /** + * + */ + get: function () { + return this._depthPrepass; + }, + set: function (value) { + this._depthPrepass = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DefaultRenderer.prototype, "filters3d", { + /** + * + * @returns {*} + */ + get: function () { + return this._pFilter3DRenderer ? this._pFilter3DRenderer.filters : null; + }, + set: function (value) { + if (value && value.length == 0) + value = null; + if (this._pFilter3DRenderer && !value) { + this._pFilter3DRenderer.dispose(); + this._pFilter3DRenderer = null; + } + else if (!this._pFilter3DRenderer && value) { + this._pFilter3DRenderer = new Filter3DRenderer(this._pStage); + this._pFilter3DRenderer.filters = value; + } + if (this._pFilter3DRenderer) { + this._pFilter3DRenderer.filters = value; + this._pRequireDepthRender = this._pFilter3DRenderer.requireDepthRender; + } + else { + this._pRequireDepthRender = false; + if (this._pDepthRender) { + this._pDepthRender.dispose(); + this._pDepthRender = null; + } + } + }, + enumerable: true, + configurable: true + }); + DefaultRenderer.prototype.render = function (entityCollector) { + _super.prototype.render.call(this, entityCollector); + if (!this._pStage.recoverFromDisposal()) { + this._pBackBufferInvalid = true; + return; + } + if (this._pBackBufferInvalid) + this.pUpdateBackBuffer(); + if (this._shareContext && this._pContext) + this._pContext.clear(0, 0, 0, 1, 1, 0, ContextGLClearMask.DEPTH); + if (this._pFilter3DRenderer) { + this.textureRatioX = this._pRttBufferManager.textureRatioX; + this.textureRatioY = this._pRttBufferManager.textureRatioY; + } + else { + this.textureRatioX = 1; + this.textureRatioY = 1; + } + if (this._pRequireDepthRender) + this.pRenderSceneDepthToTexture(entityCollector); + if (this._depthPrepass) + this.pRenderDepthPrepass(entityCollector); + if (this._pFilter3DRenderer && this._pContext) { + } + else { + if (this._shareContext) + this._iRender(entityCollector, null, this._pScissorRect); + else + this._iRender(entityCollector); + } + _super.prototype.render.call(this, entityCollector); + if (!this._shareContext && this._pContext) + this._pContext.present(); + // register that a view has been rendered + this._pStage.bufferClear = false; + }; + DefaultRenderer.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + this.updateLights(entityCollector); + // otherwise RTT will interfere with other RTTs + if (target) { + this.pCollectRenderables(entityCollector); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); + } + _super.prototype.pExecuteRender.call(this, entityCollector, target, scissorRect, surfaceSelector); + }; + DefaultRenderer.prototype.updateLights = function (entityCollector) { + var dirLights = entityCollector.directionalLights; + var pointLights = entityCollector.pointLights; + var len, i; + var light; + var shadowMapper; + len = dirLights.length; + for (i = 0; i < len; ++i) { + light = dirLights[i]; + shadowMapper = light.shadowMapper; + if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) + shadowMapper.iRenderDepthMap(entityCollector, this._pDepthRenderer); + } + len = pointLights.length; + for (i = 0; i < len; ++i) { + light = pointLights[i]; + shadowMapper = light.shadowMapper; + if (light.castsShadows && (shadowMapper.autoUpdateShadows || shadowMapper._iShadowsInvalid)) + shadowMapper.iRenderDepthMap(entityCollector, this._pDistanceRenderer); + } + }; + /** + * @inheritDoc + */ + DefaultRenderer.prototype.pDraw = function (entityCollector, target) { + if (!target) + this.pCollectRenderables(entityCollector); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + if (entityCollector.skyBox) { + this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); + this.drawSkybox(entityCollector); + } + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS_EQUAL); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); + }; + /** + * Draw the skybox if present. + * + * @param entityCollector The EntityCollector containing all potentially visible information. + */ + DefaultRenderer.prototype.drawSkybox = function (entityCollector) { + var skyBox = this._skyboxRenderablePool.getItem(entityCollector.skyBox); + var material = entityCollector.skyBox.material; + var camera = entityCollector.camera; + this.updateSkyboxProjection(camera); + var activePass = this._pStage.context.getMaterial(material, this._pStage.profile).getMaterialPass(material._iScreenPasses[0], this._pStage.profile); + material._iActivatePass(activePass, this._pStage, camera); + material._iRenderPass(activePass, skyBox, this._pStage, camera, this._skyboxProjection); + material._iDeactivatePass(activePass, this._pStage); + }; + DefaultRenderer.prototype.updateSkyboxProjection = function (camera) { + var near = new Vector3D(); + this._skyboxProjection.copyFrom(this._pRttViewProjectionMatrix); + this._skyboxProjection.copyRowTo(2, near); + var camPos = camera.scenePosition; + var cx = near.x; + var cy = near.y; + var cz = near.z; + var cw = -(near.x * camPos.x + near.y * camPos.y + near.z * camPos.z + Math.sqrt(cx * cx + cy * cy + cz * cz)); + var signX = cx >= 0 ? 1 : -1; + var signY = cy >= 0 ? 1 : -1; + var p = new Vector3D(signX, signY, 1, 1); + var inverse = this._skyboxProjection.clone(); + inverse.invert(); + var q = inverse.transformVector(p); + this._skyboxProjection.copyRowTo(3, p); + var a = (q.x * p.x + q.y * p.y + q.z * p.z + q.w * p.w) / (cx * q.x + cy * q.y + cz * q.z + cw * q.w); + this._skyboxProjection.copyRowFrom(2, new Vector3D(cx * a, cy * a, cz * a, cw * a)); + }; + /** + * Draw a list of renderables. + * + * @param renderables The renderables to draw. + * @param entityCollector The EntityCollector containing all potentially visible information. + */ + DefaultRenderer.prototype.drawRenderables = function (renderable, entityCollector) { + var i; + var len; + var passes; + var activePass; + var activeMaterial; + var context = this._pStage.context; + var camera = entityCollector.camera; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + //iterate through each screen pass + passes = renderable.material._iScreenPasses; + len = renderable.material._iNumScreenPasses(); + for (i = 0; i < len; i++) { + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(passes[i], this._pStage.profile); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + renderable.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); + activeMaterial.material._iDeactivatePass(activePass, this._pStage); + } + renderable = renderable2; + } + }; + DefaultRenderer.prototype.dispose = function () { + if (!this._shareContext) + this._pStage.dispose(); + this._pDepthRenderer.dispose(); + this._pDistanceRenderer.dispose(); + this._pDepthRenderer = null; + this._pDistanceRenderer = null; + this._pDepthRender = null; + _super.prototype.dispose.call(this); + }; + /** + * + */ + DefaultRenderer.prototype.pRenderDepthPrepass = function (entityCollector) { + this._pDepthRenderer.disableColor = true; + if (this._pFilter3DRenderer) { + } + else { + this._pDepthRenderer.textureRatioX = 1; + this._pDepthRenderer.textureRatioY = 1; + this._pDepthRenderer._iRender(entityCollector); + } + this._pDepthRenderer.disableColor = false; + }; + /** + * + */ + DefaultRenderer.prototype.pRenderSceneDepthToTexture = function (entityCollector) { + if (this._pDepthTextureInvalid || !this._pDepthRender) + this.initDepthTexture(this._pStage.context); + this._pDepthRenderer.textureRatioX = this._pRttBufferManager.textureRatioX; + this._pDepthRenderer.textureRatioY = this._pRttBufferManager.textureRatioY; + this._pDepthRenderer._iRender(entityCollector, this._pDepthRender); + }; + /** + * Updates the backbuffer dimensions. + */ + DefaultRenderer.prototype.pUpdateBackBuffer = function () { + // No reason trying to configure back buffer if there is no context available. + // Doing this anyway (and relying on _stage to cache width/height for + // context does get available) means usesSoftwareRendering won't be reliable. + if (this._pStage.context && !this._shareContext) { + if (this._width && this._height) { + this._pStage.configureBackBuffer(this._width, this._height, this._antiAlias, true); + this._pBackBufferInvalid = false; + } + } + }; + DefaultRenderer.prototype.iSetStage = function (value) { + _super.prototype.iSetStage.call(this, value); + this._pDistanceRenderer.iSetStage(value); + this._pDepthRenderer.iSetStage(value); + }; + /** + * + */ + DefaultRenderer.prototype.initDepthTexture = function (context) { + this._pDepthTextureInvalid = false; + if (this._pDepthRender) + this._pDepthRender.dispose(); + this._pDepthRender = new RenderTexture(this._pRttBufferManager.textureWidth, this._pRttBufferManager.textureHeight); + }; + return DefaultRenderer; +})(RendererBase); +module.exports = DefaultRenderer; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvZGVmYXVsdHJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbIkRlZmF1bHRSZW5kZXJlciIsIkRlZmF1bHRSZW5kZXJlci5jb25zdHJ1Y3RvciIsIkRlZmF1bHRSZW5kZXJlci5hbnRpQWxpYXMiLCJEZWZhdWx0UmVuZGVyZXIuZGVwdGhQcmVwYXNzIiwiRGVmYXVsdFJlbmRlcmVyLmZpbHRlcnMzZCIsIkRlZmF1bHRSZW5kZXJlci5yZW5kZXIiLCJEZWZhdWx0UmVuZGVyZXIucEV4ZWN1dGVSZW5kZXIiLCJEZWZhdWx0UmVuZGVyZXIudXBkYXRlTGlnaHRzIiwiRGVmYXVsdFJlbmRlcmVyLnBEcmF3IiwiRGVmYXVsdFJlbmRlcmVyLmRyYXdTa3lib3giLCJEZWZhdWx0UmVuZGVyZXIudXBkYXRlU2t5Ym94UHJvamVjdGlvbiIsIkRlZmF1bHRSZW5kZXJlci5kcmF3UmVuZGVyYWJsZXMiLCJEZWZhdWx0UmVuZGVyZXIuZGlzcG9zZSIsIkRlZmF1bHRSZW5kZXJlci5wUmVuZGVyRGVwdGhQcmVwYXNzIiwiRGVmYXVsdFJlbmRlcmVyLnBSZW5kZXJTY2VuZURlcHRoVG9UZXh0dXJlIiwiRGVmYXVsdFJlbmRlcmVyLnBVcGRhdGVCYWNrQnVmZmVyIiwiRGVmYXVsdFJlbmRlcmVyLmlTZXRTdGFnZSIsIkRlZmF1bHRSZW5kZXJlci5pbml0RGVwdGhUZXh0dXJlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFPLFFBQVEsV0FBZ0IsK0JBQStCLENBQUMsQ0FBQztBQUVoRSxJQUFPLFFBQVEsV0FBZ0IsK0JBQStCLENBQUMsQ0FBQztBQUNoRSxJQUFPLGFBQWEsV0FBYyx3Q0FBd0MsQ0FBQyxDQUFDO0FBSTVFLElBQU8sY0FBYyxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFlN0UsSUFBTyxnQkFBZ0IsV0FBYywwQ0FBMEMsQ0FBQyxDQUFDO0FBQ2pGLElBQU8sYUFBYSxXQUFjLHlDQUF5QyxDQUFDLENBQUM7QUFDN0UsSUFBTyxnQkFBZ0IsV0FBYyw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ25GLElBQU8sWUFBWSxXQUFlLHdDQUF3QyxDQUFDLENBQUM7QUFDNUUsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLGtCQUFrQixXQUFhLDRDQUE0QyxDQUFDLENBQUM7QUFHcEYsSUFBTyxnQkFBZ0IsV0FBYyw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3JGLElBQU8sWUFBWSxXQUFlLDBDQUEwQyxDQUFDLENBQUM7QUFDOUUsSUFBTyxZQUFZLFdBQWUsa0RBQWtELENBQUMsQ0FBQztBQUN0RixJQUFPLGVBQWUsV0FBYyxxREFBcUQsQ0FBQyxDQUFDO0FBRzNGLEFBTUE7Ozs7O0dBREc7SUFDRyxlQUFlO0lBQVNBLFVBQXhCQSxlQUFlQSxVQUFxQkE7SUE2RXpDQTs7Ozs7T0FLR0E7SUFDSEEsU0FuRktBLGVBQWVBLENBbUZSQSxhQUE2QkEsRUFBRUEsT0FBMkJBLEVBQUVBLElBQWFBO1FBQXpFQyw2QkFBNkJBLEdBQTdCQSxxQkFBNkJBO1FBQUVBLHVCQUEyQkEsR0FBM0JBLG9CQUEyQkE7UUFBRUEsb0JBQWFBLEdBQWJBLGFBQWFBO1FBRXBGQSxpQkFBT0EsQ0FBQ0E7UUE3RURBLHNCQUFpQkEsR0FBWUEsSUFBSUEsUUFBUUEsRUFBRUEsQ0FBQ0E7UUErRW5EQSxJQUFJQSxDQUFDQSxxQkFBcUJBLEdBQUdBLGNBQWNBLENBQUNBLE9BQU9BLENBQUNBLGdCQUFnQkEsQ0FBQ0EsQ0FBQ0E7UUFFdEVBLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLElBQUlBLGFBQWFBLENBQUNBLElBQUlBLFlBQVlBLEVBQUVBLENBQUNBLENBQUNBO1FBQzdEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLEdBQUdBLElBQUlBLGFBQWFBLENBQUNBLElBQUlBLGVBQWVBLEVBQUVBLENBQUNBLENBQUNBO1FBRW5FQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxJQUFJQSxJQUFJQSxDQUFDQTtZQUN4QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsWUFBWUEsQ0FBQ0EsV0FBV0EsRUFBRUEsQ0FBQ0EsWUFBWUEsQ0FBQ0EsYUFBYUEsRUFBRUEsT0FBT0EsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFcEZBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0EsZ0JBQWdCQSxDQUFDQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtRQUVyRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDcEJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO1FBQ2hDQSxJQUFJQTtZQUNIQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLFNBQVNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO1FBRWpEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUNyQkEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsTUFBTUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7UUFDbENBLElBQUlBO1lBQ0hBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0E7SUFDcERBLENBQUNBO0lBM0ZERCxzQkFBV0Esc0NBQVNBO2FBQXBCQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUN4QkEsQ0FBQ0E7YUFFREYsVUFBcUJBLEtBQVlBO1lBRWhDRSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxJQUFJQSxLQUFLQSxDQUFDQTtnQkFDNUJBLE1BQU1BLENBQUNBO1lBRVJBLElBQUlBLENBQUNBLFVBQVVBLEdBQUdBLEtBQUtBLENBQUNBO1lBRXhCQSxJQUFJQSxDQUFDQSxtQkFBbUJBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2pDQSxDQUFDQTs7O09BVkFGO0lBZURBLHNCQUFXQSx5Q0FBWUE7UUFIdkJBOztXQUVHQTthQUNIQTtZQUVDRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7YUFFREgsVUFBd0JBLEtBQWFBO1lBRXBDRyxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUM1QkEsQ0FBQ0E7OztPQUxBSDtJQVdEQSxzQkFBV0Esc0NBQVNBO1FBSnBCQTs7O1dBR0dBO2FBQ0hBO1lBRUNJLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBRUEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUN4RUEsQ0FBQ0E7YUFDREosVUFBcUJBLEtBQXlCQTtZQUU3Q0ksRUFBRUEsQ0FBQ0EsQ0FBQ0EsS0FBS0EsSUFBSUEsS0FBS0EsQ0FBQ0EsTUFBTUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7Z0JBQzlCQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtZQUVkQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO2dCQUN2Q0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtnQkFDbENBLElBQUlBLENBQUNBLGtCQUFrQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7WUFDaENBLENBQUNBO1lBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsSUFBSUEsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzlDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLEdBQUdBLElBQUlBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7Z0JBQzdEQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLE9BQU9BLEdBQUdBLEtBQUtBLENBQUNBO1lBQ3pDQSxDQUFDQTtZQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBLENBQUNBO2dCQUM3QkEsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxPQUFPQSxHQUFHQSxLQUFLQSxDQUFDQTtnQkFDeENBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxrQkFBa0JBLENBQUNBO1lBQ3hFQSxDQUFDQTtZQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtnQkFDUEEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxHQUFHQSxLQUFLQSxDQUFDQTtnQkFFbENBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBLENBQUNBO29CQUN4QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7b0JBQzdCQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxDQUFDQTtnQkFDM0JBLENBQUNBO1lBQ0ZBLENBQUNBO1FBQ0ZBLENBQUNBOzs7T0F6QkFKO0lBMERNQSxnQ0FBTUEsR0FBYkEsVUFBY0EsZUFBMEJBO1FBRXZDSyxnQkFBS0EsQ0FBQ0EsTUFBTUEsWUFBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFFOUJBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLG1CQUFtQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDekNBLElBQUlBLENBQUNBLG1CQUFtQkEsR0FBR0EsSUFBSUEsQ0FBQ0E7WUFDaENBLE1BQU1BLENBQUNBO1FBQ1JBLENBQUNBO1FBRURBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLG1CQUFtQkEsQ0FBQ0E7WUFDNUJBLElBQUlBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FBQ0E7UUFFMUJBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLElBQUlBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBO1lBQ3hDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxrQkFBa0JBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBRWxFQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLENBQUNBLENBQUNBO1lBQzdCQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLGFBQWFBLENBQUNBO1lBQzNEQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLGFBQWFBLENBQUNBO1FBQzVEQSxDQUFDQTtRQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUNQQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUN2QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDeEJBLENBQUNBO1FBRURBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLG9CQUFvQkEsQ0FBQ0E7WUFDN0JBLElBQUlBLENBQUNBLDBCQUEwQkEsQ0FBbUJBLGVBQWVBLENBQUNBLENBQUNBO1FBRXBFQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtZQUN0QkEsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxDQUFtQkEsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFFN0RBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGtCQUFrQkEsSUFBSUEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFJaERBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBRVBBLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBO2dCQUN0QkEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsZUFBZUEsRUFBRUEsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0E7WUFDMURBLElBQUlBO2dCQUNIQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUNqQ0EsQ0FBQ0E7UUFFREEsZ0JBQUtBLENBQUNBLE1BQU1BLFlBQUNBLGVBQWVBLENBQUNBLENBQUNBO1FBRTlCQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxJQUFJQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQTtZQUN6Q0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsT0FBT0EsRUFBRUEsQ0FBQ0E7UUFFMUJBLEFBQ0FBLHlDQUR5Q0E7UUFDekNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLFdBQVdBLEdBQUdBLEtBQUtBLENBQUNBO0lBQ2xDQSxDQUFDQTtJQUVNTCx3Q0FBY0EsR0FBckJBLFVBQXNCQSxlQUErQkEsRUFBRUEsTUFBOEJBLEVBQUVBLFdBQTRCQSxFQUFFQSxlQUEwQkE7UUFBeEZNLHNCQUE4QkEsR0FBOUJBLGFBQThCQTtRQUFFQSwyQkFBNEJBLEdBQTVCQSxrQkFBNEJBO1FBQUVBLCtCQUEwQkEsR0FBMUJBLG1CQUEwQkE7UUFFOUlBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBO1FBRW5DQSxBQUNBQSwrQ0FEK0NBO1FBQy9DQSxFQUFFQSxDQUFDQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNaQSxJQUFJQSxDQUFDQSxtQkFBbUJBLENBQUNBLGVBQWVBLENBQUNBLENBQUNBO1lBRTFDQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxzQkFBc0JBLEVBQUVBLGVBQWVBLENBQUNBLENBQUNBO1lBQ25FQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSx1QkFBdUJBLEVBQUVBLGVBQWVBLENBQUNBLENBQUNBO1FBQ3JFQSxDQUFDQTtRQUVEQSxnQkFBS0EsQ0FBQ0EsY0FBY0EsWUFBQ0EsZUFBZUEsRUFBRUEsTUFBTUEsRUFBRUEsV0FBV0EsRUFBRUEsZUFBZUEsQ0FBQ0EsQ0FBQ0E7SUFDN0VBLENBQUNBO0lBRU9OLHNDQUFZQSxHQUFwQkEsVUFBcUJBLGVBQStCQTtRQUVuRE8sSUFBSUEsU0FBU0EsR0FBMkJBLGVBQWVBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDMUVBLElBQUlBLFdBQVdBLEdBQXFCQSxlQUFlQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUNoRUEsSUFBSUEsR0FBVUEsRUFBRUEsQ0FBUUEsQ0FBQ0E7UUFDekJBLElBQUlBLEtBQWVBLENBQUNBO1FBQ3BCQSxJQUFJQSxZQUE2QkEsQ0FBQ0E7UUFFbENBLEdBQUdBLEdBQUdBLFNBQVNBLENBQUNBLE1BQU1BLENBQUNBO1FBQ3ZCQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQTtZQUMxQkEsS0FBS0EsR0FBR0EsU0FBU0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFFckJBLFlBQVlBLEdBQUdBLEtBQUtBLENBQUNBLFlBQVlBLENBQUNBO1lBRWxDQSxFQUFFQSxDQUFDQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxJQUFJQSxDQUFDQSxZQUFZQSxDQUFDQSxpQkFBaUJBLElBQUlBLFlBQVlBLENBQUNBLGdCQUFnQkEsQ0FBRUEsQ0FBQ0E7Z0JBQzVGQSxZQUFZQSxDQUFDQSxlQUFlQSxDQUFDQSxlQUFlQSxFQUFFQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUN0RUEsQ0FBQ0E7UUFFREEsR0FBR0EsR0FBR0EsV0FBV0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFDekJBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLEdBQUdBLEVBQUVBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBO1lBQzFCQSxLQUFLQSxHQUFHQSxXQUFXQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUV2QkEsWUFBWUEsR0FBR0EsS0FBS0EsQ0FBQ0EsWUFBWUEsQ0FBQ0E7WUFFbENBLEVBQUVBLENBQUNBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLElBQUlBLENBQUNBLFlBQVlBLENBQUNBLGlCQUFpQkEsSUFBSUEsWUFBWUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxDQUFDQTtnQkFDM0ZBLFlBQVlBLENBQUNBLGVBQWVBLENBQUNBLGVBQWVBLEVBQUVBLElBQUlBLENBQUNBLGtCQUFrQkEsQ0FBQ0EsQ0FBQ0E7UUFDekVBLENBQUNBO0lBQ0ZBLENBQUNBO0lBRURQOztPQUVHQTtJQUNJQSwrQkFBS0EsR0FBWkEsVUFBYUEsZUFBK0JBLEVBQUVBLE1BQXVCQTtRQUVwRVEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDWEEsSUFBSUEsQ0FBQ0EsbUJBQW1CQSxDQUFDQSxlQUFlQSxDQUFDQSxDQUFDQTtRQUUzQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsZUFBZUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxHQUFHQSxFQUFFQSxvQkFBb0JBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRXBGQSxFQUFFQSxDQUFDQSxDQUFDQSxlQUFlQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUM1QkEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsWUFBWUEsQ0FBQ0EsS0FBS0EsRUFBRUEsb0JBQW9CQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQTtZQUVoRUEsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFDbENBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLFlBQVlBLENBQUNBLElBQUlBLEVBQUVBLG9CQUFvQkEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0E7UUFFbkVBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLElBQUlBLENBQUNBLHNCQUFzQkEsRUFBRUEsZUFBZUEsQ0FBQ0EsQ0FBQ0E7UUFDbkVBLElBQUlBLENBQUNBLGVBQWVBLENBQUNBLElBQUlBLENBQUNBLHVCQUF1QkEsRUFBRUEsZUFBZUEsQ0FBQ0EsQ0FBQ0E7SUFDckVBLENBQUNBO0lBRURSOzs7O09BSUdBO0lBQ0tBLG9DQUFVQSxHQUFsQkEsVUFBbUJBLGVBQStCQTtRQUVqRFMsSUFBSUEsTUFBTUEsR0FBdUNBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7UUFFNUdBLElBQUlBLFFBQVFBLEdBQWdCQSxlQUFlQSxDQUFDQSxNQUFNQSxDQUFDQSxRQUFRQSxDQUFDQTtRQUU1REEsSUFBSUEsTUFBTUEsR0FBVUEsZUFBZUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7UUFFM0NBLElBQUlBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7UUFFcENBLElBQUlBLFVBQVVBLEdBQXVDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxPQUFRQSxDQUFDQSxXQUFXQSxDQUFDQSxRQUFRQSxFQUFFQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxlQUFlQSxDQUFvQkEsUUFBUUEsQ0FBQ0EsY0FBY0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7UUFFNU1BLFFBQVFBLENBQUNBLGNBQWNBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO1FBQzFEQSxRQUFRQSxDQUFDQSxZQUFZQSxDQUFDQSxVQUFVQSxFQUFFQSxNQUFNQSxFQUFFQSxJQUFJQSxDQUFDQSxPQUFPQSxFQUFFQSxNQUFNQSxFQUFFQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLENBQUNBO1FBQ3hGQSxRQUFRQSxDQUFDQSxnQkFBZ0JBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO0lBQ3JEQSxDQUFDQTtJQUVPVCxnREFBc0JBLEdBQTlCQSxVQUErQkEsTUFBYUE7UUFFM0NVLElBQUlBLElBQUlBLEdBQVlBLElBQUlBLFFBQVFBLEVBQUVBLENBQUNBO1FBRW5DQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0E7UUFDaEVBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsQ0FBQ0EsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFMUNBLElBQUlBLE1BQU1BLEdBQVlBLE1BQU1BLENBQUNBLGFBQWFBLENBQUNBO1FBRTNDQSxJQUFJQSxFQUFFQSxHQUFVQSxJQUFJQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN2QkEsSUFBSUEsRUFBRUEsR0FBVUEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDdkJBLElBQUlBLEVBQUVBLEdBQVVBLElBQUlBLENBQUNBLENBQUNBLENBQUNBO1FBQ3ZCQSxJQUFJQSxFQUFFQSxHQUFVQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxFQUFFQSxHQUFDQSxFQUFFQSxHQUFHQSxFQUFFQSxHQUFDQSxFQUFFQSxHQUFHQSxFQUFFQSxHQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUUxR0EsSUFBSUEsS0FBS0EsR0FBVUEsRUFBRUEsSUFBSUEsQ0FBQ0EsR0FBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDbkNBLElBQUlBLEtBQUtBLEdBQVVBLEVBQUVBLElBQUlBLENBQUNBLEdBQUVBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBO1FBRW5DQSxJQUFJQSxDQUFDQSxHQUFZQSxJQUFJQSxRQUFRQSxDQUFDQSxLQUFLQSxFQUFFQSxLQUFLQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUVsREEsSUFBSUEsT0FBT0EsR0FBWUEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQTtRQUN0REEsT0FBT0EsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0E7UUFFakJBLElBQUlBLENBQUNBLEdBQVlBLE9BQU9BLENBQUNBLGVBQWVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBRTVDQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBRXZDQSxJQUFJQSxDQUFDQSxHQUFVQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxFQUFFQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUUzRkEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxXQUFXQSxDQUFDQSxDQUFDQSxFQUFFQSxJQUFJQSxRQUFRQSxDQUFDQSxFQUFFQSxHQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxHQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxHQUFDQSxDQUFDQSxFQUFFQSxFQUFFQSxHQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxD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QUFhQSxDQUFDQSxPQUFPQSxFQUFFQSxDQUFDQTtRQUU5QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsSUFBSUEsYUFBYUEsQ0FBQ0EsSUFBSUEsQ0FBQ0Esa0JBQWtCQSxDQUFDQSxZQUFZQSxFQUFFQSxJQUFJQSxDQUFDQSxrQkFBa0JBLENBQUNBLGFBQWFBLENBQUNBLENBQUNBO0lBQ3JIQSxDQUFDQTtJQUNGakIsc0JBQUNBO0FBQURBLENBeFpBLEFBd1pDQSxFQXhaNkIsWUFBWSxFQXdaekM7QUFFRCxBQUF5QixpQkFBaEIsZUFBZSxDQUFDIiwiZmlsZSI6InJlbmRlci9EZWZhdWx0UmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hdHJpeDNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vTWF0cml4M0RcIik7XG5pbXBvcnQgUmVjdGFuZ2xlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1JlY3RhbmdsZVwiKTtcbmltcG9ydCBWZWN0b3IzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1ZlY3RvcjNEXCIpO1xuaW1wb3J0IFJlbmRlclRleHR1cmVcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlXCIpO1xuaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlUHJveHlCYXNlXCIpO1xuXG5pbXBvcnQgTGlnaHRCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL0xpZ2h0QmFzZVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvUmVuZGVyYWJsZVBvb2xcIik7XG5pbXBvcnQgSVJlbmRlcmVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9yZW5kZXIvSVJlbmRlcmVyXCIpO1xuaW1wb3J0IEVudGl0eUNvbGxlY3Rvclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3RyYXZlcnNlL0VudGl0eUNvbGxlY3RvclwiKTtcbmltcG9ydCBJQ29sbGVjdG9yXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi90cmF2ZXJzZS9JQ29sbGVjdG9yXCIpO1xuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgUG9pbnRMaWdodFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvZW50aXRpZXMvUG9pbnRMaWdodFwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5pbXBvcnQgSU1hdGVyaWFsUGFzc1x0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9wYXNzZXMvSU1hdGVyaWFsUGFzc1wiKTtcbmltcG9ydCBTaGFkb3dNYXBwZXJCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvbWF0ZXJpYWxzL3NoYWRvd21hcHBlcnMvU2hhZG93TWFwcGVyQmFzZVwiKTtcblxuaW1wb3J0IFN0YWdlXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvU3RhZ2VcIik7XG5pbXBvcnQgTWF0ZXJpYWxEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsRGF0YVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBTa3lib3hSZW5kZXJhYmxlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9Ta3lib3hSZW5kZXJhYmxlXCIpO1xuaW1wb3J0IERlcHRoUmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvRGVwdGhSZW5kZXJlclwiKTtcbmltcG9ydCBGaWx0ZXIzRFJlbmRlcmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcmVuZGVyL0ZpbHRlcjNEUmVuZGVyZXJcIik7XG5pbXBvcnQgUmVuZGVyZXJCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvUmVuZGVyZXJCYXNlXCIpO1xuaW1wb3J0IENvbnRleHRHTEJsZW5kRmFjdG9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmxlbmRGYWN0b3JcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBDb250ZXh0R0xDbGVhck1hc2tcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDbGVhck1hc2tcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgRmlsdGVyM0RCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL0ZpbHRlcjNEQmFzZVwiKTtcbmltcG9ydCBSVFRCdWZmZXJNYW5hZ2VyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWFuYWdlcnMvUlRUQnVmZmVyTWFuYWdlclwiKTtcbmltcG9ydCBTdGFnZU1hbmFnZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hbmFnZXJzL1N0YWdlTWFuYWdlclwiKTtcbmltcG9ydCBEZXB0aE1hcFBhc3NcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvRGVwdGhNYXBQYXNzXCIpO1xuaW1wb3J0IERpc3RhbmNlTWFwUGFzc1x0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9wYXNzZXMvRGlzdGFuY2VNYXBQYXNzXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5cbi8qKlxuICogVGhlIERlZmF1bHRSZW5kZXJlciBjbGFzcyBwcm92aWRlcyB0aGUgZGVmYXVsdCByZW5kZXJpbmcgbWV0aG9kLiBJdCByZW5kZXJzIHRoZSBzY2VuZSBncmFwaCBvYmplY3RzIHVzaW5nIHRoZVxuICogbWF0ZXJpYWxzIGFzc2lnbmVkIHRvIHRoZW0uXG4gKlxuICogQGNsYXNzIGF3YXkucmVuZGVyLkRlZmF1bHRSZW5kZXJlclxuICovXG5jbGFzcyBEZWZhdWx0UmVuZGVyZXIgZXh0ZW5kcyBSZW5kZXJlckJhc2UgaW1wbGVtZW50cyBJUmVuZGVyZXJcbntcblx0cHVibGljIF9wUmVxdWlyZURlcHRoUmVuZGVyOmJvb2xlYW47XG5cdHByaXZhdGUgX3NreWJveFJlbmRlcmFibGVQb29sOlJlbmRlcmFibGVQb29sO1xuXG4vL1x0XHRwcml2YXRlIF9hY3RpdmVNYXRlcmlhbDpNYXRlcmlhbEJhc2U7XG5cdHByaXZhdGUgX3BEaXN0YW5jZVJlbmRlcmVyOkRlcHRoUmVuZGVyZXI7XG5cdHByaXZhdGUgX3BEZXB0aFJlbmRlcmVyOkRlcHRoUmVuZGVyZXI7XG5cdHByaXZhdGUgX3NreWJveFByb2plY3Rpb246TWF0cml4M0QgPSBuZXcgTWF0cml4M0QoKTtcblx0cHVibGljIF9wRmlsdGVyM0RSZW5kZXJlcjpGaWx0ZXIzRFJlbmRlcmVyO1xuXG5cdHB1YmxpYyBfcERlcHRoUmVuZGVyOlRleHR1cmVQcm94eUJhc2U7XG5cblx0cHJpdmF0ZSBfYW50aUFsaWFzOm51bWJlcjtcblxuXHRwdWJsaWMgZ2V0IGFudGlBbGlhcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2FudGlBbGlhcztcblx0fVxuXG5cdHB1YmxpYyBzZXQgYW50aUFsaWFzKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9hbnRpQWxpYXMgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9hbnRpQWxpYXMgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBnZXQgZGVwdGhQcmVwYXNzKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2RlcHRoUHJlcGFzcztcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGVwdGhQcmVwYXNzKHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLl9kZXB0aFByZXBhc3MgPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdHB1YmxpYyBnZXQgZmlsdGVyczNkKCk6QXJyYXk8RmlsdGVyM0RCYXNlPlxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyPyB0aGlzLl9wRmlsdGVyM0RSZW5kZXJlci5maWx0ZXJzIDogbnVsbDtcblx0fVxuXHRwdWJsaWMgc2V0IGZpbHRlcnMzZCh2YWx1ZTpBcnJheTxGaWx0ZXIzREJhc2U+KVxuXHR7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA9PSAwKVxuXHRcdFx0dmFsdWUgPSBudWxsO1xuXG5cdFx0aWYgKHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyICYmICF2YWx1ZSkge1xuXHRcdFx0dGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyICYmIHZhbHVlKSB7XG5cdFx0XHR0aGlzLl9wRmlsdGVyM0RSZW5kZXJlciA9IG5ldyBGaWx0ZXIzRFJlbmRlcmVyKHRoaXMuX3BTdGFnZSk7XG5cdFx0XHR0aGlzLl9wRmlsdGVyM0RSZW5kZXJlci5maWx0ZXJzID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyKSB7XG5cdFx0XHR0aGlzLl9wRmlsdGVyM0RSZW5kZXJlci5maWx0ZXJzID0gdmFsdWU7XG5cdFx0XHR0aGlzLl9wUmVxdWlyZURlcHRoUmVuZGVyID0gdGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIucmVxdWlyZURlcHRoUmVuZGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wUmVxdWlyZURlcHRoUmVuZGVyID0gZmFsc2U7XG5cblx0XHRcdGlmICh0aGlzLl9wRGVwdGhSZW5kZXIpIHtcblx0XHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyLmRpc3Bvc2UoKTtcblx0XHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBEZWZhdWx0UmVuZGVyZXIgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW50aUFsaWFzIFRoZSBhbW91bnQgb2YgYW50aS1hbGlhc2luZyB0byB1c2UuXG5cdCAqIEBwYXJhbSByZW5kZXJNb2RlIFRoZSByZW5kZXIgbW9kZSB0byB1c2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihmb3JjZVNvZnR3YXJlOmJvb2xlYW4gPSBmYWxzZSwgcHJvZmlsZTpzdHJpbmcgPSBcImJhc2VsaW5lXCIsIG1vZGUgPSBcImF1dG9cIilcblx0e1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLl9za3lib3hSZW5kZXJhYmxlUG9vbCA9IFJlbmRlcmFibGVQb29sLmdldFBvb2woU2t5Ym94UmVuZGVyYWJsZSk7XG5cblx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlciA9IG5ldyBEZXB0aFJlbmRlcmVyKG5ldyBEZXB0aE1hcFBhc3MoKSk7XG5cdFx0dGhpcy5fcERpc3RhbmNlUmVuZGVyZXIgPSBuZXcgRGVwdGhSZW5kZXJlcihuZXcgRGlzdGFuY2VNYXBQYXNzKCkpO1xuXG5cdFx0aWYgKHRoaXMuX3BTdGFnZSA9PSBudWxsKVxuXHRcdFx0dGhpcy5zdGFnZSA9IFN0YWdlTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldEZyZWVTdGFnZShmb3JjZVNvZnR3YXJlLCBwcm9maWxlLCBtb2RlKTtcblxuXHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyID0gUlRUQnVmZmVyTWFuYWdlci5nZXRJbnN0YW5jZSh0aGlzLl9wU3RhZ2UpO1xuXG5cdFx0aWYgKHRoaXMuX3dpZHRoID09IDApXG5cdFx0XHR0aGlzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudmlld1dpZHRoID0gdGhpcy5fd2lkdGg7XG5cblx0XHRpZiAodGhpcy5faGVpZ2h0ID09IDApXG5cdFx0XHR0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci52aWV3SGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuXHR9XG5cblx0cHVibGljIHJlbmRlcihlbnRpdHlDb2xsZWN0b3I6SUNvbGxlY3Rvcilcblx0e1xuXHRcdHN1cGVyLnJlbmRlcihlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0aWYgKCF0aGlzLl9wU3RhZ2UucmVjb3ZlckZyb21EaXNwb3NhbCgpKSB7Ly9pZiBjb250ZXh0IGhhcyBEaXNwb3NlZCBieSB0aGUgT1MsZG9uJ3QgcmVuZGVyIGF0IHRoaXMgZnJhbWVcblx0XHRcdHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCkvLyByZXNldCBvciB1cGRhdGUgcmVuZGVyIHNldHRpbmdzXG5cdFx0XHR0aGlzLnBVcGRhdGVCYWNrQnVmZmVyKCk7XG5cblx0XHRpZiAodGhpcy5fc2hhcmVDb250ZXh0ICYmIHRoaXMuX3BDb250ZXh0KVxuXHRcdFx0dGhpcy5fcENvbnRleHQuY2xlYXIoMCwgMCwgMCwgMSwgMSwgMCwgQ29udGV4dEdMQ2xlYXJNYXNrLkRFUFRIKTtcblxuXHRcdGlmICh0aGlzLl9wRmlsdGVyM0RSZW5kZXJlcikge1xuXHRcdFx0dGhpcy50ZXh0dXJlUmF0aW9YID0gdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWDtcblx0XHRcdHRoaXMudGV4dHVyZVJhdGlvWSA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1k7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGV4dHVyZVJhdGlvWCA9IDE7XG5cdFx0XHR0aGlzLnRleHR1cmVSYXRpb1kgPSAxO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wUmVxdWlyZURlcHRoUmVuZGVyKVxuXHRcdFx0dGhpcy5wUmVuZGVyU2NlbmVEZXB0aFRvVGV4dHVyZSg8RW50aXR5Q29sbGVjdG9yPiBlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0aWYgKHRoaXMuX2RlcHRoUHJlcGFzcylcblx0XHRcdHRoaXMucFJlbmRlckRlcHRoUHJlcGFzcyg8RW50aXR5Q29sbGVjdG9yPiBlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0aWYgKHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyICYmIHRoaXMuX3BDb250ZXh0KSB7IC8vVE9ET1xuXHRcdFx0Ly90aGlzLl9pUmVuZGVyKGVudGl0eUNvbGxlY3RvciwgdGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIuZ2V0TWFpbklucHV0VGV4dHVyZSh0aGlzLl9wU3RhZ2UpLCB0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci5yZW5kZXJUb1RleHR1cmVSZWN0KTtcblx0XHRcdC8vdGhpcy5fcEZpbHRlcjNEUmVuZGVyZXIucmVuZGVyKHRoaXMuX3BTdGFnZSwgZW50aXR5Q29sbGVjdG9yLmNhbWVyYSwgdGhpcy5fcERlcHRoUmVuZGVyKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdGlmICh0aGlzLl9zaGFyZUNvbnRleHQpXG5cdFx0XHRcdHRoaXMuX2lSZW5kZXIoZW50aXR5Q29sbGVjdG9yLCBudWxsLCB0aGlzLl9wU2Npc3NvclJlY3QpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLl9pUmVuZGVyKGVudGl0eUNvbGxlY3Rvcik7XG5cdFx0fVxuXG5cdFx0c3VwZXIucmVuZGVyKGVudGl0eUNvbGxlY3Rvcik7XG5cblx0XHRpZiAoIXRoaXMuX3NoYXJlQ29udGV4dCAmJiB0aGlzLl9wQ29udGV4dClcblx0XHRcdHRoaXMuX3BDb250ZXh0LnByZXNlbnQoKTtcblxuXHRcdC8vIHJlZ2lzdGVyIHRoYXQgYSB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkXG5cdFx0dGhpcy5fcFN0YWdlLmJ1ZmZlckNsZWFyID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgcEV4ZWN1dGVSZW5kZXIoZW50aXR5Q29sbGVjdG9yOkVudGl0eUNvbGxlY3RvciwgdGFyZ2V0OlRleHR1cmVQcm94eUJhc2UgPSBudWxsLCBzY2lzc29yUmVjdDpSZWN0YW5nbGUgPSBudWxsLCBzdXJmYWNlU2VsZWN0b3I6bnVtYmVyID0gMClcblx0e1xuXHRcdHRoaXMudXBkYXRlTGlnaHRzKGVudGl0eUNvbGxlY3Rvcik7XG5cblx0XHQvLyBvdGhlcndpc2UgUlRUIHdpbGwgaW50ZXJmZXJlIHdpdGggb3RoZXIgUlRUc1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHRoaXMucENvbGxlY3RSZW5kZXJhYmxlcyhlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0XHR0aGlzLmRyYXdSZW5kZXJhYmxlcyh0aGlzLl9wT3BhcXVlUmVuZGVyYWJsZUhlYWQsIGVudGl0eUNvbGxlY3Rvcik7XG5cdFx0XHR0aGlzLmRyYXdSZW5kZXJhYmxlcyh0aGlzLl9wQmxlbmRlZFJlbmRlcmFibGVIZWFkLCBlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdH1cblxuXHRcdHN1cGVyLnBFeGVjdXRlUmVuZGVyKGVudGl0eUNvbGxlY3RvciwgdGFyZ2V0LCBzY2lzc29yUmVjdCwgc3VyZmFjZVNlbGVjdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlTGlnaHRzKGVudGl0eUNvbGxlY3RvcjpFbnRpdHlDb2xsZWN0b3IpXG5cdHtcblx0XHR2YXIgZGlyTGlnaHRzOkFycmF5PERpcmVjdGlvbmFsTGlnaHQ+ID0gZW50aXR5Q29sbGVjdG9yLmRpcmVjdGlvbmFsTGlnaHRzO1xuXHRcdHZhciBwb2ludExpZ2h0czpBcnJheTxQb2ludExpZ2h0PiA9IGVudGl0eUNvbGxlY3Rvci5wb2ludExpZ2h0cztcblx0XHR2YXIgbGVuOm51bWJlciwgaTpudW1iZXI7XG5cdFx0dmFyIGxpZ2h0OkxpZ2h0QmFzZTtcblx0XHR2YXIgc2hhZG93TWFwcGVyOlNoYWRvd01hcHBlckJhc2U7XG5cblx0XHRsZW4gPSBkaXJMaWdodHMubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bGlnaHQgPSBkaXJMaWdodHNbaV07XG5cblx0XHRcdHNoYWRvd01hcHBlciA9IGxpZ2h0LnNoYWRvd01hcHBlcjtcblxuXHRcdFx0aWYgKGxpZ2h0LmNhc3RzU2hhZG93cyAmJiAoc2hhZG93TWFwcGVyLmF1dG9VcGRhdGVTaGFkb3dzIHx8IHNoYWRvd01hcHBlci5faVNoYWRvd3NJbnZhbGlkICkpXG5cdFx0XHRcdHNoYWRvd01hcHBlci5pUmVuZGVyRGVwdGhNYXAoZW50aXR5Q29sbGVjdG9yLCB0aGlzLl9wRGVwdGhSZW5kZXJlcik7XG5cdFx0fVxuXG5cdFx0bGVuID0gcG9pbnRMaWdodHMubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHRcdFx0bGlnaHQgPSBwb2ludExpZ2h0c1tpXTtcblxuXHRcdFx0c2hhZG93TWFwcGVyID0gbGlnaHQuc2hhZG93TWFwcGVyO1xuXG5cdFx0XHRpZiAobGlnaHQuY2FzdHNTaGFkb3dzICYmIChzaGFkb3dNYXBwZXIuYXV0b1VwZGF0ZVNoYWRvd3MgfHwgc2hhZG93TWFwcGVyLl9pU2hhZG93c0ludmFsaWQpKVxuXHRcdFx0XHRzaGFkb3dNYXBwZXIuaVJlbmRlckRlcHRoTWFwKGVudGl0eUNvbGxlY3RvciwgdGhpcy5fcERpc3RhbmNlUmVuZGVyZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaW5oZXJpdERvY1xuXHQgKi9cblx0cHVibGljIHBEcmF3KGVudGl0eUNvbGxlY3RvcjpFbnRpdHlDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlKVxuXHR7XG5cdFx0aWYgKCF0YXJnZXQpXG5cdFx0XHR0aGlzLnBDb2xsZWN0UmVuZGVyYWJsZXMoZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdHRoaXMuX3BDb250ZXh0LnNldEJsZW5kRmFjdG9ycyhDb250ZXh0R0xCbGVuZEZhY3Rvci5PTkUsIENvbnRleHRHTEJsZW5kRmFjdG9yLlpFUk8pO1xuXG5cdFx0aWYgKGVudGl0eUNvbGxlY3Rvci5za3lCb3gpIHtcblx0XHRcdHRoaXMuX3BDb250ZXh0LnNldERlcHRoVGVzdChmYWxzZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuQUxXQVlTKTtcblxuXHRcdFx0dGhpcy5kcmF3U2t5Ym94KGVudGl0eUNvbGxlY3Rvcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KHRydWUsIENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUwpO1xuXG5cdFx0dGhpcy5kcmF3UmVuZGVyYWJsZXModGhpcy5fcE9wYXF1ZVJlbmRlcmFibGVIZWFkLCBlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdHRoaXMuZHJhd1JlbmRlcmFibGVzKHRoaXMuX3BCbGVuZGVkUmVuZGVyYWJsZUhlYWQsIGVudGl0eUNvbGxlY3Rvcik7XG5cdH1cblxuXHQvKipcblx0ICogRHJhdyB0aGUgc2t5Ym94IGlmIHByZXNlbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlDb2xsZWN0b3IgVGhlIEVudGl0eUNvbGxlY3RvciBjb250YWluaW5nIGFsbCBwb3RlbnRpYWxseSB2aXNpYmxlIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkcmF3U2t5Ym94KGVudGl0eUNvbGxlY3RvcjpFbnRpdHlDb2xsZWN0b3IpXG5cdHtcblx0XHR2YXIgc2t5Qm94OlNreWJveFJlbmRlcmFibGUgPSA8U2t5Ym94UmVuZGVyYWJsZT4gdGhpcy5fc2t5Ym94UmVuZGVyYWJsZVBvb2wuZ2V0SXRlbShlbnRpdHlDb2xsZWN0b3Iuc2t5Qm94KTtcblxuXHRcdHZhciBtYXRlcmlhbDpNYXRlcmlhbEJhc2UgPSBlbnRpdHlDb2xsZWN0b3Iuc2t5Qm94Lm1hdGVyaWFsO1xuXG5cdFx0dmFyIGNhbWVyYTpDYW1lcmEgPSBlbnRpdHlDb2xsZWN0b3IuY2FtZXJhO1xuXG5cdFx0dGhpcy51cGRhdGVTa3lib3hQcm9qZWN0aW9uKGNhbWVyYSk7XG5cblx0XHR2YXIgYWN0aXZlUGFzczpNYXRlcmlhbFBhc3NEYXRhID0gKDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0KS5nZXRNYXRlcmlhbChtYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpLmdldE1hdGVyaWFsUGFzcyg8TWF0ZXJpYWxQYXNzQmFzZT4gbWF0ZXJpYWwuX2lTY3JlZW5QYXNzZXNbMF0sIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdG1hdGVyaWFsLl9pQWN0aXZhdGVQYXNzKGFjdGl2ZVBhc3MsIHRoaXMuX3BTdGFnZSwgY2FtZXJhKTtcblx0XHRtYXRlcmlhbC5faVJlbmRlclBhc3MoYWN0aXZlUGFzcywgc2t5Qm94LCB0aGlzLl9wU3RhZ2UsIGNhbWVyYSwgdGhpcy5fc2t5Ym94UHJvamVjdGlvbik7XG5cdFx0bWF0ZXJpYWwuX2lEZWFjdGl2YXRlUGFzcyhhY3RpdmVQYXNzLCB0aGlzLl9wU3RhZ2UpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTa3lib3hQcm9qZWN0aW9uKGNhbWVyYTpDYW1lcmEpXG5cdHtcblx0XHR2YXIgbmVhcjpWZWN0b3IzRCA9IG5ldyBWZWN0b3IzRCgpO1xuXG5cdFx0dGhpcy5fc2t5Ym94UHJvamVjdGlvbi5jb3B5RnJvbSh0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXgpO1xuXHRcdHRoaXMuX3NreWJveFByb2plY3Rpb24uY29weVJvd1RvKDIsIG5lYXIpO1xuXG5cdFx0dmFyIGNhbVBvczpWZWN0b3IzRCA9IGNhbWVyYS5zY2VuZVBvc2l0aW9uO1xuXG5cdFx0dmFyIGN4Om51bWJlciA9IG5lYXIueDtcblx0XHR2YXIgY3k6bnVtYmVyID0gbmVhci55O1xuXHRcdHZhciBjejpudW1iZXIgPSBuZWFyLno7XG5cdFx0dmFyIGN3Om51bWJlciA9IC0obmVhci54KmNhbVBvcy54ICsgbmVhci55KmNhbVBvcy55ICsgbmVhci56KmNhbVBvcy56ICsgTWF0aC5zcXJ0KGN4KmN4ICsgY3kqY3kgKyBjeipjeikpO1xuXG5cdFx0dmFyIHNpZ25YOm51bWJlciA9IGN4ID49IDA/IDEgOiAtMTtcblx0XHR2YXIgc2lnblk6bnVtYmVyID0gY3kgPj0gMD8gMSA6IC0xO1xuXG5cdFx0dmFyIHA6VmVjdG9yM0QgPSBuZXcgVmVjdG9yM0Qoc2lnblgsIHNpZ25ZLCAxLCAxKTtcblxuXHRcdHZhciBpbnZlcnNlOk1hdHJpeDNEID0gdGhpcy5fc2t5Ym94UHJvamVjdGlvbi5jbG9uZSgpO1xuXHRcdGludmVyc2UuaW52ZXJ0KCk7XG5cblx0XHR2YXIgcTpWZWN0b3IzRCA9IGludmVyc2UudHJhbnNmb3JtVmVjdG9yKHApO1xuXG5cdFx0dGhpcy5fc2t5Ym94UHJvamVjdGlvbi5jb3B5Um93VG8oMywgcCk7XG5cblx0XHR2YXIgYTpudW1iZXIgPSAocS54KnAueCArIHEueSpwLnkgKyBxLnoqcC56ICsgcS53KnAudykvKGN4KnEueCArIGN5KnEueSArIGN6KnEueiArIGN3KnEudyk7XG5cblx0XHR0aGlzLl9za3lib3hQcm9qZWN0aW9uLmNvcHlSb3dGcm9tKDIsIG5ldyBWZWN0b3IzRChjeCphLCBjeSphLCBjeiphLCBjdyphKSk7XG5cdH1cblxuXHQvKipcblx0ICogRHJhdyBhIGxpc3Qgb2YgcmVuZGVyYWJsZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlcyBUaGUgcmVuZGVyYWJsZXMgdG8gZHJhdy5cblx0ICogQHBhcmFtIGVudGl0eUNvbGxlY3RvciBUaGUgRW50aXR5Q29sbGVjdG9yIGNvbnRhaW5pbmcgYWxsIHBvdGVudGlhbGx5IHZpc2libGUgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGRyYXdSZW5kZXJhYmxlcyhyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBlbnRpdHlDb2xsZWN0b3I6SUNvbGxlY3Rvcilcblx0e1xuXHRcdHZhciBpOm51bWJlcjtcblx0XHR2YXIgbGVuOm51bWJlcjtcblx0XHR2YXIgcGFzc2VzOkFycmF5PElNYXRlcmlhbFBhc3M+O1xuXHRcdHZhciBhY3RpdmVQYXNzOk1hdGVyaWFsUGFzc0RhdGE7XG5cdFx0dmFyIGFjdGl2ZU1hdGVyaWFsOk1hdGVyaWFsRGF0YTtcblx0XHR2YXIgY29udGV4dDpJQ29udGV4dFN0YWdlR0wgPSA8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dDtcblx0XHR2YXIgY2FtZXJhOkNhbWVyYSA9IGVudGl0eUNvbGxlY3Rvci5jYW1lcmE7XG5cdFx0dmFyIHJlbmRlcmFibGUyOlJlbmRlcmFibGVCYXNlO1xuXG5cdFx0d2hpbGUgKHJlbmRlcmFibGUpIHtcblx0XHRcdGFjdGl2ZU1hdGVyaWFsID0gY29udGV4dC5nZXRNYXRlcmlhbChyZW5kZXJhYmxlLm1hdGVyaWFsLCB0aGlzLl9wU3RhZ2UucHJvZmlsZSk7XG5cblx0XHRcdC8vaXRlcmF0ZSB0aHJvdWdoIGVhY2ggc2NyZWVuIHBhc3Ncblx0XHRcdHBhc3NlcyA9IHJlbmRlcmFibGUubWF0ZXJpYWwuX2lTY3JlZW5QYXNzZXM7XG5cdFx0XHRsZW4gPSByZW5kZXJhYmxlLm1hdGVyaWFsLl9pTnVtU2NyZWVuUGFzc2VzKCk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlO1xuXG5cdFx0XHRcdGFjdGl2ZVBhc3MgPSBhY3RpdmVNYXRlcmlhbC5nZXRNYXRlcmlhbFBhc3MoPE1hdGVyaWFsUGFzc0Jhc2U+IHBhc3Nlc1tpXSwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lBY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRyZW5kZXJhYmxlLm1hdGVyaWFsLl9pUmVuZGVyUGFzcyhhY3RpdmVQYXNzLCByZW5kZXJhYmxlMiwgdGhpcy5fcFN0YWdlLCBjYW1lcmEsIHRoaXMuX3BSdHRWaWV3UHJvamVjdGlvbk1hdHJpeCk7XG5cblx0XHRcdFx0XHRyZW5kZXJhYmxlMiA9IHJlbmRlcmFibGUyLm5leHQ7XG5cblx0XHRcdFx0fSB3aGlsZSAocmVuZGVyYWJsZTIgJiYgcmVuZGVyYWJsZTIubWF0ZXJpYWwgPT0gcmVuZGVyYWJsZS5tYXRlcmlhbCk7XG5cblx0XHRcdFx0YWN0aXZlTWF0ZXJpYWwubWF0ZXJpYWwuX2lEZWFjdGl2YXRlUGFzcyhhY3RpdmVQYXNzLCB0aGlzLl9wU3RhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZW5kZXJhYmxlID0gcmVuZGVyYWJsZTI7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc3Bvc2UoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLl9zaGFyZUNvbnRleHQpXG5cdFx0XHR0aGlzLl9wU3RhZ2UuZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHRcdHRoaXMuX3BEaXN0YW5jZVJlbmRlcmVyLmRpc3Bvc2UoKTtcblx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlciA9IG51bGw7XG5cdFx0dGhpcy5fcERpc3RhbmNlUmVuZGVyZXIgPSBudWxsO1xuXG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyID0gbnVsbDtcblxuXHRcdHN1cGVyLmRpc3Bvc2UoKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcFJlbmRlckRlcHRoUHJlcGFzcyhlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIuZGlzYWJsZUNvbG9yID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLl9wRmlsdGVyM0RSZW5kZXJlcikgeyAvL1RPRE9cbi8vXHRcdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci50ZXh0dXJlUmF0aW9YID0gdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWDtcbi8vXHRcdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci50ZXh0dXJlUmF0aW9ZID0gdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudGV4dHVyZVJhdGlvWTtcbi8vXHRcdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci5faVJlbmRlcihlbnRpdHlDb2xsZWN0b3IsIHRoaXMuX3BGaWx0ZXIzRFJlbmRlcmVyLmdldE1haW5JbnB1dFRleHR1cmUodGhpcy5fcFN0YWdlKSwgdGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIucmVuZGVyVG9UZXh0dXJlUmVjdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLnRleHR1cmVSYXRpb1ggPSAxO1xuXHRcdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIudGV4dHVyZVJhdGlvWSA9IDE7XG5cdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXJlci5faVJlbmRlcihlbnRpdHlDb2xsZWN0b3IpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLmRpc2FibGVDb2xvciA9IGZhbHNlO1xuXHR9XG5cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBwUmVuZGVyU2NlbmVEZXB0aFRvVGV4dHVyZShlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3BEZXB0aFRleHR1cmVJbnZhbGlkIHx8ICF0aGlzLl9wRGVwdGhSZW5kZXIpXG5cdFx0XHR0aGlzLmluaXREZXB0aFRleHR1cmUoPElDb250ZXh0U3RhZ2VHTD4gdGhpcy5fcFN0YWdlLmNvbnRleHQpO1xuXG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIudGV4dHVyZVJhdGlvWCA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1g7XG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIudGV4dHVyZVJhdGlvWSA9IHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnRleHR1cmVSYXRpb1k7XG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyZXIuX2lSZW5kZXIoZW50aXR5Q29sbGVjdG9yLCB0aGlzLl9wRGVwdGhSZW5kZXIpO1xuXHR9XG5cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYmFja2J1ZmZlciBkaW1lbnNpb25zLlxuXHQgKi9cblx0cHVibGljIHBVcGRhdGVCYWNrQnVmZmVyKClcblx0e1xuXHRcdC8vIE5vIHJlYXNvbiB0cnlpbmcgdG8gY29uZmlndXJlIGJhY2sgYnVmZmVyIGlmIHRoZXJlIGlzIG5vIGNvbnRleHQgYXZhaWxhYmxlLlxuXHRcdC8vIERvaW5nIHRoaXMgYW55d2F5IChhbmQgcmVseWluZyBvbiBfc3RhZ2UgdG8gY2FjaGUgd2lkdGgvaGVpZ2h0IGZvclxuXHRcdC8vIGNvbnRleHQgZG9lcyBnZXQgYXZhaWxhYmxlKSBtZWFucyB1c2VzU29mdHdhcmVSZW5kZXJpbmcgd29uJ3QgYmUgcmVsaWFibGUuXG5cdFx0aWYgKHRoaXMuX3BTdGFnZS5jb250ZXh0ICYmICF0aGlzLl9zaGFyZUNvbnRleHQpIHtcblx0XHRcdGlmICh0aGlzLl93aWR0aCAmJiB0aGlzLl9oZWlnaHQpIHtcblx0XHRcdFx0dGhpcy5fcFN0YWdlLmNvbmZpZ3VyZUJhY2tCdWZmZXIodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCwgdGhpcy5fYW50aUFsaWFzLCB0cnVlKTtcblx0XHRcdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlTZXRTdGFnZSh2YWx1ZTpTdGFnZSlcblx0e1xuXHRcdHN1cGVyLmlTZXRTdGFnZSh2YWx1ZSk7XG5cblx0XHR0aGlzLl9wRGlzdGFuY2VSZW5kZXJlci5pU2V0U3RhZ2UodmFsdWUpO1xuXHRcdHRoaXMuX3BEZXB0aFJlbmRlcmVyLmlTZXRTdGFnZSh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHByaXZhdGUgaW5pdERlcHRoVGV4dHVyZShjb250ZXh0OklDb250ZXh0U3RhZ2VHTCk6dm9pZFxuXHR7XG5cdFx0dGhpcy5fcERlcHRoVGV4dHVyZUludmFsaWQgPSBmYWxzZTtcblxuXHRcdGlmICh0aGlzLl9wRGVwdGhSZW5kZXIpXG5cdFx0XHR0aGlzLl9wRGVwdGhSZW5kZXIuZGlzcG9zZSgpO1xuXG5cdFx0dGhpcy5fcERlcHRoUmVuZGVyID0gbmV3IFJlbmRlclRleHR1cmUodGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudGV4dHVyZVdpZHRoLCB0aGlzLl9wUnR0QnVmZmVyTWFuYWdlci50ZXh0dXJlSGVpZ2h0KTtcblx0fVxufVxuXG5leHBvcnQgPSBEZWZhdWx0UmVuZGVyZXI7Il19 \ No newline at end of file diff --git a/lib/core/render/DefaultRenderer.ts b/lib/render/DefaultRenderer.ts similarity index 92% rename from lib/core/render/DefaultRenderer.ts rename to lib/render/DefaultRenderer.ts index 02bf88cd..cfac2bac 100644 --- a/lib/core/render/DefaultRenderer.ts +++ b/lib/render/DefaultRenderer.ts @@ -16,18 +16,18 @@ import MaterialBase = require("awayjs-display/lib/materials/MaterialBase"); import IMaterialPass = require("awayjs-display/lib/materials/passes/IMaterialPass"); import ShadowMapperBase = require("awayjs-display/lib/materials/shadowmappers/ShadowMapperBase"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import SkyboxRenderable = require("awayjs-stagegl/lib/core/pool/SkyboxRenderable"); -import DepthRenderer = require("awayjs-stagegl/lib/core/render/DepthRenderer"); -import Filter3DRenderer = require("awayjs-stagegl/lib/core/render/Filter3DRenderer"); -import RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -import ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import ContextGLClearMask = require("awayjs-stagegl/lib/core/stagegl/ContextGLClearMask"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import SkyboxRenderable = require("awayjs-stagegl/lib/pool/SkyboxRenderable"); +import DepthRenderer = require("awayjs-stagegl/lib/render/DepthRenderer"); +import Filter3DRenderer = require("awayjs-stagegl/lib/render/Filter3DRenderer"); +import RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +import ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import ContextGLClearMask = require("awayjs-stagegl/lib/base/ContextGLClearMask"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import Filter3DBase = require("awayjs-stagegl/lib/filters/Filter3DBase"); import RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); import StageManager = require("awayjs-stagegl/lib/managers/StageManager"); diff --git a/lib/render/DepthRenderer.js b/lib/render/DepthRenderer.js new file mode 100755 index 00000000..bb0ad30a --- /dev/null +++ b/lib/render/DepthRenderer.js @@ -0,0 +1,141 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +/** + * The DepthRenderer class renders 32-bit depth information encoded as RGBA + * + * @class away.render.DepthRenderer + */ +var DepthRenderer = (function (_super) { + __extends(DepthRenderer, _super); + /** + * Creates a new DepthRenderer object. + * @param renderBlended Indicates whether semi-transparent objects should be rendered. + * @param distanceBased Indicates whether the written depth value is distance-based or projected depth-based + */ + function DepthRenderer(pass, renderBlended) { + if (renderBlended === void 0) { renderBlended = false; } + _super.call(this); + this._pass = pass; + this._renderBlended = renderBlended; + this._iBackgroundR = 1; + this._iBackgroundG = 1; + this._iBackgroundB = 1; + } + Object.defineProperty(DepthRenderer.prototype, "disableColor", { + get: function () { + return this._disableColor; + }, + set: function (value) { + this._disableColor = value; + }, + enumerable: true, + configurable: true + }); + DepthRenderer.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { + this.pCollectRenderables(entityCollector); + this._pContext.setRenderTarget(target, true, 0); + this._pContext.clear(1, 1, 1, 1, 1, 0); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); + var head = this._pOpaqueRenderableHead; + var first = true; + for (var i = numCascades - 1; i >= 0; --i) { + this._pStage.scissorRect = scissorRects[i]; + this.drawCascadeRenderables(head, cameras[i], first ? null : cameras[i].frustumPlanes); + first = false; + } + //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! + this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); + this._pStage.scissorRect = null; + }; + DepthRenderer.prototype.drawCascadeRenderables = function (renderable, camera, cullPlanes) { + var activePass; + var activeMaterial; + var context = this._pStage.context; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); + //TODO: generalise this test + if (activePass.key == "") + this._pContext.calcAnimationCode(renderable.material, activePass); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + // if completely in front, it will fall in a different cascade + // do not use near and far planes + if (!cullPlanes || renderable2.sourceEntity.worldBounds.isInFrustum(cullPlanes, 4)) { + renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + } + else { + renderable2.cascaded = true; + } + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material && !renderable2.cascaded); + renderable.material._iDeactivatePass(activePass, this._pStage); + renderable = renderable2; + } + }; + /** + * @inheritDoc + */ + DepthRenderer.prototype.pDraw = function (entityCollector, target) { + this.pCollectRenderables(entityCollector); + this._pContext.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + this._pContext.setDepthTest(true, ContextGLCompareMode.LESS); + this.drawRenderables(this._pOpaqueRenderableHead, entityCollector); + if (this._disableColor) + this._pContext.setColorMask(false, false, false, false); + if (this._renderBlended) + this.drawRenderables(this._pBlendedRenderableHead, entityCollector); + if (this._disableColor) + this._pContext.setColorMask(true, true, true, true); + }; + /** + * Draw a list of renderables. + * @param renderables The renderables to draw. + * @param entityCollector The EntityCollector containing all potentially visible information. + */ + DepthRenderer.prototype.drawRenderables = function (renderable, entityCollector) { + var activePass; + var activeMaterial; + var context = this._pStage.context; + var camera = entityCollector.camera; + var renderable2; + while (renderable) { + activeMaterial = context.getMaterial(renderable.material, this._pStage.profile); + // otherwise this would result in depth rendered anyway because fragment shader kil is ignored + if (this._disableColor && renderable.material.alphaThreshold != 0) { + renderable2 = renderable; + do { + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); + } + else { + renderable2 = renderable; + activePass = activeMaterial.getMaterialPass(this._pass, this._pStage.profile); + //TODO: generalise this test + if (activePass.key == "") + this._pContext.calcAnimationCode(renderable.material, activePass); + renderable.material._iActivatePass(activePass, this._pStage, camera); + do { + renderable2.material._iRenderPass(activePass, renderable2, this._pStage, camera, this._pRttViewProjectionMatrix); + renderable2 = renderable2.next; + } while (renderable2 && renderable2.material == renderable.material); + renderable.material._iDeactivatePass(activePass, this._pStage); + } + renderable = renderable2; + } + }; + return DepthRenderer; +})(RendererBase); +module.exports = DepthRenderer; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvZGVwdGhyZW5kZXJlci50cyJdLCJuYW1lcyI6WyJEZXB0aFJlbmRlcmVyIiwiRGVwdGhSZW5kZXJlci5jb25zdHJ1Y3RvciIsIkRlcHRoUmVuZGVyZXIuZGlzYWJsZUNvbG9yIiwiRGVwdGhSZW5kZXJlci5faVJlbmRlckNhc2NhZGVzIiwiRGVwdGhSZW5kZXJlci5kcmF3Q2FzY2FkZVJlbmRlcmFibGVzIiwiRGVwdGhSZW5kZXJlci5wRHJhdyIsIkRlcHRoUmVuZGVyZXIuZHJhd1JlbmRlcmFibGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFZQSxJQUFPLFlBQVksV0FBZSx3Q0FBd0MsQ0FBQyxDQUFDO0FBQzVFLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFLeEYsQUFLQTs7OztHQURHO0lBQ0csYUFBYTtJQUFTQSxVQUF0QkEsYUFBYUEsVUFBcUJBO0lBTXZDQTs7OztPQUlHQTtJQUNIQSxTQVhLQSxhQUFhQSxDQVdOQSxJQUFxQkEsRUFBRUEsYUFBNkJBO1FBQTdCQyw2QkFBNkJBLEdBQTdCQSxxQkFBNkJBO1FBRS9EQSxpQkFBT0EsQ0FBQ0E7UUFFUkEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFbEJBLElBQUlBLENBQUNBLGNBQWNBLEdBQUdBLGFBQWFBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLENBQUNBLENBQUNBO0lBRXhCQSxDQUFDQTtJQUVERCxzQkFBV0EsdUNBQVlBO2FBQXZCQTtZQUVDRSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtRQUMzQkEsQ0FBQ0E7YUFFREYsVUFBd0JB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Q0FBQ0EsaUJBQWlCQSxDQUFDQSxVQUFVQSxDQUFDQSxRQUFRQSxFQUFFQSxVQUFVQSxDQUFDQSxDQUFDQTtnQkFFbkVBLFVBQVVBLENBQUNBLFFBQVFBLENBQUNBLGNBQWNBLENBQUNBLFVBQVVBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLE1BQU1BLENBQUNBLENBQUNBO2dCQUVyRUEsR0FBR0EsQ0FBQ0E7b0JBQ0hBLFdBQVdBLENBQUNBLFFBQVFBLENBQUNBLFlBQVlBLENBQUNBLFVBQVVBLEVBQUVBLFdBQVdBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLE1BQU1BLEVBQUVBLElBQUlBLENBQUNBLHlCQUF5QkEsQ0FBQ0EsQ0FBQ0E7b0JBRWpIQSxXQUFXQSxHQUFHQSxXQUFXQSxDQUFDQSxJQUFJQSxDQUFDQTtnQkFFaENBLENBQUNBLFFBQVFBLFdBQVdBLElBQUlBLFdBQVdBLENBQUNBLFFBQVFBLElBQUlBLFVBQVVBLENBQUNBLFFBQVFBLEVBQUVBO2dCQUVyRUEsVUFBVUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsZ0JBQWdCQSxDQUFDQSxVQUFVQSxFQUFFQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQTtZQUNoRUEsQ0FBQ0E7WUFFREEsVUFBVUEsR0FBR0EsV0FBV0EsQ0FBQ0E7UUFDMUJBLENBQUNBO0lBQ0ZBLENBQUNBO0lBQ0ZOLG9CQUFDQTtBQUFEQSxDQTNLQSxBQTJLQ0EsRUEzSzJCLFlBQVksRUEyS3ZDO0FBRUQsQUFBdUIsaUJBQWQsYUFBYSxDQUFDIiwiZmlsZSI6InJlbmRlci9EZXB0aFJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQbGFuZTNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUGxhbmUzRFwiKTtcbmltcG9ydCBSZWN0YW5nbGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2dlb20vUmVjdGFuZ2xlXCIpO1xuaW1wb3J0IFRleHR1cmVQcm94eUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9UZXh0dXJlUHJveHlCYXNlXCIpO1xuXG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBJRW50aXR5XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0lFbnRpdHlcIik7XG5pbXBvcnQgRW50aXR5Q29sbGVjdG9yXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvdHJhdmVyc2UvRW50aXR5Q29sbGVjdG9yXCIpO1xuaW1wb3J0IFNoYWRvd0Nhc3RlckNvbGxlY3Rvclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvdHJhdmVyc2UvU2hhZG93Q2FzdGVyQ29sbGVjdG9yXCIpO1xuXG5pbXBvcnQgTWF0ZXJpYWxEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL01hdGVyaWFsRGF0YVwiKTtcbmltcG9ydCBNYXRlcmlhbFBhc3NEYXRhXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9NYXRlcmlhbFBhc3NEYXRhXCIpO1xuaW1wb3J0IFJlbmRlcmFibGVCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9SZW5kZXJhYmxlQmFzZVwiKTtcbmltcG9ydCBSZW5kZXJlckJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL3JlbmRlci9SZW5kZXJlckJhc2VcIik7XG5pbXBvcnQgQ29udGV4dEdMQmxlbmRGYWN0b3JcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xCbGVuZEZhY3RvclwiKTtcbmltcG9ydCBDb250ZXh0R0xDb21wYXJlTW9kZVx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0NvbnRleHRHTENvbXBhcmVNb2RlXCIpO1xuaW1wb3J0IElDb250ZXh0U3RhZ2VHTFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvSUNvbnRleHRTdGFnZUdMXCIpO1xuaW1wb3J0IE1hdGVyaWFsUGFzc0Jhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvcGFzc2VzL01hdGVyaWFsUGFzc0Jhc2VcIik7XG5cblxuLyoqXG4gKiBUaGUgRGVwdGhSZW5kZXJlciBjbGFzcyByZW5kZXJzIDMyLWJpdCBkZXB0aCBpbmZvcm1hdGlvbiBlbmNvZGVkIGFzIFJHQkFcbiAqXG4gKiBAY2xhc3MgYXdheS5yZW5kZXIuRGVwdGhSZW5kZXJlclxuICovXG5jbGFzcyBEZXB0aFJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXJCYXNlXG57XG5cdHByaXZhdGUgX3Bhc3M6TWF0ZXJpYWxQYXNzQmFzZTtcblx0cHJpdmF0ZSBfcmVuZGVyQmxlbmRlZDpib29sZWFuO1xuXHRwcml2YXRlIF9kaXNhYmxlQ29sb3I6Ym9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBEZXB0aFJlbmRlcmVyIG9iamVjdC5cblx0ICogQHBhcmFtIHJlbmRlckJsZW5kZWQgSW5kaWNhdGVzIHdoZXRoZXIgc2VtaS10cmFuc3BhcmVudCBvYmplY3RzIHNob3VsZCBiZSByZW5kZXJlZC5cblx0ICogQHBhcmFtIGRpc3RhbmNlQmFzZWQgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdyaXR0ZW4gZGVwdGggdmFsdWUgaXMgZGlzdGFuY2UtYmFzZWQgb3IgcHJvamVjdGVkIGRlcHRoLWJhc2VkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXNzOk1hdGVyaWFsUGFzc0Jhc2UsIHJlbmRlckJsZW5kZWQ6Ym9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuX3Bhc3MgPSBwYXNzO1xuXG5cdFx0dGhpcy5fcmVuZGVyQmxlbmRlZCA9IHJlbmRlckJsZW5kZWQ7XG5cdFx0dGhpcy5faUJhY2tncm91bmRSID0gMTtcblx0XHR0aGlzLl9pQmFja2dyb3VuZEcgPSAxO1xuXHRcdHRoaXMuX2lCYWNrZ3JvdW5kQiA9IDE7XG5cblx0fVxuXG5cdHB1YmxpYyBnZXQgZGlzYWJsZUNvbG9yKCk6Ym9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc2FibGVDb2xvcjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgZGlzYWJsZUNvbG9yKHZhbHVlOmJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLl9kaXNhYmxlQ29sb3IgPSB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBfaVJlbmRlckNhc2NhZGVzKGVudGl0eUNvbGxlY3RvcjpTaGFkb3dDYXN0ZXJDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlLCBudW1DYXNjYWRlczpudW1iZXIsIHNjaXNzb3JSZWN0czpBcnJheTxSZWN0YW5nbGU+LCBjYW1lcmFzOkFycmF5PENhbWVyYT4pXG5cdHtcblx0XHR0aGlzLnBDb2xsZWN0UmVuZGVyYWJsZXMoZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdHRoaXMuX3BDb250ZXh0LnNldFJlbmRlclRhcmdldCh0YXJnZXQsIHRydWUsIDApO1xuXHRcdHRoaXMuX3BDb250ZXh0LmNsZWFyKDEsIDEsIDEsIDEsIDEsIDApO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KHRydWUsIENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1MpO1xuXG5cdFx0dmFyIGhlYWQ6UmVuZGVyYWJsZUJhc2UgPSB0aGlzLl9wT3BhcXVlUmVuZGVyYWJsZUhlYWQ7XG5cblx0XHR2YXIgZmlyc3Q6Ym9vbGVhbiA9IHRydWU7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IG51bUNhc2NhZGVzIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0XHRcdHRoaXMuX3BTdGFnZS5zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0c1tpXTtcblx0XHRcdHRoaXMuZHJhd0Nhc2NhZGVSZW5kZXJhYmxlcyhoZWFkLCBjYW1lcmFzW2ldLCBmaXJzdD8gbnVsbCA6IGNhbWVyYXNbaV0uZnJ1c3R1bVBsYW5lcyk7XG5cdFx0XHRmaXJzdCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vbGluZSByZXF1aXJlZCBmb3IgY29ycmVjdCByZW5kZXJpbmcgd2hlbiB1c2luZyBhd2F5M2Qgd2l0aCBzdGFybGluZy4gRE8gTk9UIFJFTU9WRSBVTkxFU1MgU1RBUkxJTkcgSU5URUdSQVRJT04gSVMgUkVURVNURUQhXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KGZhbHNlLCBDb250ZXh0R0xDb21wYXJlTW9kZS5MRVNTX0VRVUFMKTtcblxuXHRcdHRoaXMuX3BTdGFnZS5zY2lzc29yUmVjdCA9IG51bGw7XG5cblx0fVxuXG5cdHByaXZhdGUgZHJhd0Nhc2NhZGVSZW5kZXJhYmxlcyhyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBjYW1lcmE6Q2FtZXJhLCBjdWxsUGxhbmVzOkFycmF5PFBsYW5lM0Q+KVxuXHR7XG5cdFx0dmFyIGFjdGl2ZVBhc3M6TWF0ZXJpYWxQYXNzRGF0YTtcblx0XHR2YXIgYWN0aXZlTWF0ZXJpYWw6TWF0ZXJpYWxEYXRhO1xuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0O1xuXHRcdHZhciByZW5kZXJhYmxlMjpSZW5kZXJhYmxlQmFzZTtcblxuXHRcdHdoaWxlIChyZW5kZXJhYmxlKSB7XG5cdFx0XHRhY3RpdmVNYXRlcmlhbCA9IGNvbnRleHQuZ2V0TWF0ZXJpYWwocmVuZGVyYWJsZS5tYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHRyZW5kZXJhYmxlMiA9IHJlbmRlcmFibGU7XG5cblx0XHRcdGFjdGl2ZVBhc3MgPSBhY3RpdmVNYXRlcmlhbC5nZXRNYXRlcmlhbFBhc3ModGhpcy5fcGFzcywgdGhpcy5fcFN0YWdlLnByb2ZpbGUpO1xuXG5cdFx0XHQvL1RPRE86IGdlbmVyYWxpc2UgdGhpcyB0ZXN0XG5cdFx0XHRpZiAoYWN0aXZlUGFzcy5rZXkgPT0gXCJcIilcblx0XHRcdFx0dGhpcy5fcENvbnRleHQuY2FsY0FuaW1hdGlvbkNvZGUocmVuZGVyYWJsZS5tYXRlcmlhbCwgYWN0aXZlUGFzcyk7XG5cblx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lBY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdC8vIGlmIGNvbXBsZXRlbHkgaW4gZnJvbnQsIGl0IHdpbGwgZmFsbCBpbiBhIGRpZmZlcmVudCBjYXNjYWRlXG5cdFx0XHRcdC8vIGRvIG5vdCB1c2UgbmVhciBhbmQgZmFyIHBsYW5lc1xuXHRcdFx0XHRpZiAoIWN1bGxQbGFuZXMgfHwgcmVuZGVyYWJsZTIuc291cmNlRW50aXR5LndvcmxkQm91bmRzLmlzSW5GcnVzdHVtKGN1bGxQbGFuZXMsIDQpKSB7XG5cdFx0XHRcdFx0cmVuZGVyYWJsZTIubWF0ZXJpYWwuX2lSZW5kZXJQYXNzKGFjdGl2ZVBhc3MsIHJlbmRlcmFibGUyLCB0aGlzLl9wU3RhZ2UsIGNhbWVyYSwgdGhpcy5fcFJ0dFZpZXdQcm9qZWN0aW9uTWF0cml4KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZW5kZXJhYmxlMi5jYXNjYWRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZW5kZXJhYmxlMiA9IHJlbmRlcmFibGUyLm5leHQ7XG5cblx0XHRcdH0gd2hpbGUgKHJlbmRlcmFibGUyICYmIHJlbmRlcmFibGUyLm1hdGVyaWFsID09IHJlbmRlcmFibGUubWF0ZXJpYWwgJiYgIXJlbmRlcmFibGUyLmNhc2NhZGVkKTtcblxuXHRcdFx0cmVuZGVyYWJsZS5tYXRlcmlhbC5faURlYWN0aXZhdGVQYXNzKGFjdGl2ZVBhc3MsIHRoaXMuX3BTdGFnZSk7XG5cblx0XHRcdHJlbmRlcmFibGUgPSByZW5kZXJhYmxlMjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGluaGVyaXREb2Ncblx0ICovXG5cdHB1YmxpYyBwRHJhdyhlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSlcblx0e1xuXHRcdHRoaXMucENvbGxlY3RSZW5kZXJhYmxlcyhlbnRpdHlDb2xsZWN0b3IpO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cblx0XHR0aGlzLl9wQ29udGV4dC5zZXREZXB0aFRlc3QodHJ1ZSwgQ29udGV4dEdMQ29tcGFyZU1vZGUuTEVTUyk7XG5cblx0XHR0aGlzLmRyYXdSZW5kZXJhYmxlcyh0aGlzLl9wT3BhcXVlUmVuZGVyYWJsZUhlYWQsIGVudGl0eUNvbGxlY3Rvcik7XG5cblx0XHRpZiAodGhpcy5fZGlzYWJsZUNvbG9yKVxuXHRcdFx0dGhpcy5fcENvbnRleHQuc2V0Q29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLl9yZW5kZXJCbGVuZGVkKVxuXHRcdFx0dGhpcy5kcmF3UmVuZGVyYWJsZXModGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCwgZW50aXR5Q29sbGVjdG9yKTtcblxuXHRcdGlmICh0aGlzLl9kaXNhYmxlQ29sb3IpXG5cdFx0XHR0aGlzLl9wQ29udGV4dC5zZXRDb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRHJhdyBhIGxpc3Qgb2YgcmVuZGVyYWJsZXMuXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlcyBUaGUgcmVuZGVyYWJsZXMgdG8gZHJhdy5cblx0ICogQHBhcmFtIGVudGl0eUNvbGxlY3RvciBUaGUgRW50aXR5Q29sbGVjdG9yIGNvbnRhaW5pbmcgYWxsIHBvdGVudGlhbGx5IHZpc2libGUgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGRyYXdSZW5kZXJhYmxlcyhyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlLCBlbnRpdHlDb2xsZWN0b3I6RW50aXR5Q29sbGVjdG9yKVxuXHR7XG5cdFx0dmFyIGFjdGl2ZVBhc3M6TWF0ZXJpYWxQYXNzRGF0YTtcblx0XHR2YXIgYWN0aXZlTWF0ZXJpYWw6TWF0ZXJpYWxEYXRhO1xuXHRcdHZhciBjb250ZXh0OklDb250ZXh0U3RhZ2VHTCA9IDxJQ29udGV4dFN0YWdlR0w+IHRoaXMuX3BTdGFnZS5jb250ZXh0O1xuXHRcdHZhciBjYW1lcmE6Q2FtZXJhID0gZW50aXR5Q29sbGVjdG9yLmNhbWVyYTtcblx0XHR2YXIgcmVuZGVyYWJsZTI6UmVuZGVyYWJsZUJhc2U7XG5cblx0XHR3aGlsZSAocmVuZGVyYWJsZSkge1xuXHRcdFx0YWN0aXZlTWF0ZXJpYWwgPSBjb250ZXh0LmdldE1hdGVyaWFsKHJlbmRlcmFibGUubWF0ZXJpYWwsIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoaXMgd291bGQgcmVzdWx0IGluIGRlcHRoIHJlbmRlcmVkIGFueXdheSBiZWNhdXNlIGZyYWdtZW50IHNoYWRlciBraWwgaXMgaWdub3JlZFxuXHRcdFx0aWYgKHRoaXMuX2Rpc2FibGVDb2xvciAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmFscGhhVGhyZXNob2xkICE9IDApIHtcblx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlO1xuXHRcdFx0XHQvLyBmYXN0IGZvcndhcmRcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdHJlbmRlcmFibGUyID0gcmVuZGVyYWJsZTIubmV4dDtcblxuXHRcdFx0XHR9IHdoaWxlIChyZW5kZXJhYmxlMiAmJiByZW5kZXJhYmxlMi5tYXRlcmlhbCA9PSByZW5kZXJhYmxlLm1hdGVyaWFsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcmFibGUyID0gcmVuZGVyYWJsZTtcblxuXHRcdFx0XHRhY3RpdmVQYXNzID0gYWN0aXZlTWF0ZXJpYWwuZ2V0TWF0ZXJpYWxQYXNzKHRoaXMuX3Bhc3MsIHRoaXMuX3BTdGFnZS5wcm9maWxlKTtcblxuXHRcdFx0XHQvL1RPRE86IGdlbmVyYWxpc2UgdGhpcyB0ZXN0XG5cdFx0XHRcdGlmIChhY3RpdmVQYXNzLmtleSA9PSBcIlwiKVxuXHRcdFx0XHRcdHRoaXMuX3BDb250ZXh0LmNhbGNBbmltYXRpb25Db2RlKHJlbmRlcmFibGUubWF0ZXJpYWwsIGFjdGl2ZVBhc3MpO1xuXG5cdFx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lBY3RpdmF0ZVBhc3MoYWN0aXZlUGFzcywgdGhpcy5fcFN0YWdlLCBjYW1lcmEpO1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRyZW5kZXJhYmxlMi5tYXRlcmlhbC5faVJlbmRlclBhc3MoYWN0aXZlUGFzcywgcmVuZGVyYWJsZTIsIHRoaXMuX3BTdGFnZSwgY2FtZXJhLCB0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXgpO1xuXG5cdFx0XHRcdFx0cmVuZGVyYWJsZTIgPSByZW5kZXJhYmxlMi5uZXh0O1xuXG5cdFx0XHRcdH0gd2hpbGUgKHJlbmRlcmFibGUyICYmIHJlbmRlcmFibGUyLm1hdGVyaWFsID09IHJlbmRlcmFibGUubWF0ZXJpYWwpO1xuXG5cdFx0XHRcdHJlbmRlcmFibGUubWF0ZXJpYWwuX2lEZWFjdGl2YXRlUGFzcyhhY3RpdmVQYXNzLCB0aGlzLl9wU3RhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZW5kZXJhYmxlID0gcmVuZGVyYWJsZTI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCA9IERlcHRoUmVuZGVyZXI7Il19 \ No newline at end of file diff --git a/lib/core/render/DepthRenderer.ts b/lib/render/DepthRenderer.ts similarity index 90% rename from lib/core/render/DepthRenderer.ts rename to lib/render/DepthRenderer.ts index edfa371a..4080eb82 100644 --- a/lib/core/render/DepthRenderer.ts +++ b/lib/render/DepthRenderer.ts @@ -7,13 +7,13 @@ import IEntity = require("awayjs-display/lib/entities/IEntity"); import EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); import ShadowCasterCollector = require("awayjs-display/lib/traverse/ShadowCasterCollector"); -import MaterialData = require("awayjs-stagegl/lib/core/pool/MaterialData"); -import MaterialPassData = require("awayjs-stagegl/lib/core/pool/MaterialPassData"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import RendererBase = require("awayjs-stagegl/lib/core/render/RendererBase"); -import ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import MaterialData = require("awayjs-stagegl/lib/pool/MaterialData"); +import MaterialPassData = require("awayjs-stagegl/lib/pool/MaterialPassData"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import RendererBase = require("awayjs-stagegl/lib/render/RendererBase"); +import ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import MaterialPassBase = require("awayjs-stagegl/lib/materials/passes/MaterialPassBase"); diff --git a/lib/render/Filter3DRenderer.js b/lib/render/Filter3DRenderer.js new file mode 100755 index 00000000..ec2597d3 --- /dev/null +++ b/lib/render/Filter3DRenderer.js @@ -0,0 +1,140 @@ +var Event = require("awayjs-core/lib/events/Event"); +var ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +var ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +var RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); +/** + * @class away.render.Filter3DRenderer + */ +var Filter3DRenderer = (function () { + function Filter3DRenderer(stage) { + var _this = this; + this._filterSizesInvalid = true; + this._onRTTResizeDelegate = function (event) { return _this.onRTTResize(event); }; + this._stage = stage; + this._rttManager = RTTBufferManager.getInstance(stage); + this._rttManager.addEventListener(Event.RESIZE, this._onRTTResizeDelegate); + } + Filter3DRenderer.prototype.onRTTResize = function (event) { + this._filterSizesInvalid = true; + }; + Object.defineProperty(Filter3DRenderer.prototype, "requireDepthRender", { + get: function () { + return this._requireDepthRender; + }, + enumerable: true, + configurable: true + }); + Filter3DRenderer.prototype.getMainInputTexture = function (stage) { + if (this._filterTasksInvalid) { + this.updateFilterTasks(stage); + } + return this._mainInputTexture; + }; + Object.defineProperty(Filter3DRenderer.prototype, "filters", { + get: function () { + return this._filters; + }, + set: function (value) { + this._filters = value; + this._filterTasksInvalid = true; + this._requireDepthRender = false; + if (!this._filters) { + return; + } + for (var i = 0; i < this._filters.length; ++i) { + // TODO: check logic: + // this._requireDepthRender ||= Boolean ( this._filters[i].requireDepthRender ) + var s = this._filters[i]; + var b = (s.requireDepthRender == null) ? false : s.requireDepthRender; + this._requireDepthRender = this._requireDepthRender || b; + } + this._filterSizesInvalid = true; + }, + enumerable: true, + configurable: true + }); + Filter3DRenderer.prototype.updateFilterTasks = function (stage) { + var len; + if (this._filterSizesInvalid) { + this.updateFilterSizes(); + } + if (!this._filters) { + this._tasks = null; + return; + } + this._tasks = new Array(); + len = this._filters.length - 1; + var filter; + for (var i = 0; i <= len; ++i) { + // make sure all internal tasks are linked together + filter = this._filters[i]; + // TODO: check logic + // filter.setRenderTargets(i == len? null : Filter3DBase(_filters[i + 1]).getMainInputTexture(stage), stage); + filter.setRenderTargets(i == len ? null : this._filters[i + 1].getMainInputTexture(stage), stage); + this._tasks = this._tasks.concat(filter.tasks); + } + this._mainInputTexture = this._filters[0].getMainInputTexture(stage); + }; + Filter3DRenderer.prototype.render = function (stage, camera, depthTexture) { + var len; + var i; + var task; + var context = stage.context; + var indexBuffer = this._rttManager.indexBuffer; + var vertexBuffer = this._rttManager.renderToTextureVertexBuffer; + if (!this._filters) { + return; + } + if (this._filterSizesInvalid) { + this.updateFilterSizes(); + } + if (this._filterTasksInvalid) { + this.updateFilterTasks(stage); + } + len = this._filters.length; + for (i = 0; i < len; ++i) { + this._filters[i].update(stage, camera); + } + len = this._tasks.length; + if (len > 1) { + context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); + context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); + } + for (i = 0; i < len; ++i) { + task = this._tasks[i]; + //stage.setRenderTarget(task.target); //TODO + if (!task.target) { + stage.scissorRect = null; + vertexBuffer = this._rttManager.renderToScreenVertexBuffer; + context.setVertexBufferAt(0, vertexBuffer, 0, ContextGLVertexBufferFormat.FLOAT_2); + context.setVertexBufferAt(1, vertexBuffer, 2, ContextGLVertexBufferFormat.FLOAT_2); + } + context.setTextureAt(0, task.getMainInputTexture(stage)); + context.setProgram(task.getProgram(stage)); + context.clear(0.0, 0.0, 0.0, 0.0); + task.activate(stage, camera, depthTexture); + context.setBlendFactors(ContextGLBlendFactor.ONE, ContextGLBlendFactor.ZERO); + context.drawTriangles(indexBuffer, 0, 2); + task.deactivate(stage); + } + context.setTextureAt(0, null); + context.setVertexBufferAt(0, null); + context.setVertexBufferAt(1, null); + }; + Filter3DRenderer.prototype.updateFilterSizes = function () { + for (var i = 0; i < this._filters.length; ++i) { + this._filters[i].textureWidth = this._rttManager.textureWidth; + this._filters[i].textureHeight = this._rttManager.textureHeight; + } + this._filterSizesInvalid = true; + }; + Filter3DRenderer.prototype.dispose = function () { + this._rttManager.removeEventListener(Event.RESIZE, this._onRTTResizeDelegate); + this._rttManager = null; + this._stage = null; + }; + return Filter3DRenderer; +})(); +module.exports = Filter3DRenderer; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvZmlsdGVyM2RyZW5kZXJlci50cyJdLCJuYW1lcyI6WyJGaWx0ZXIzRFJlbmRlcmVyIiwiRmlsdGVyM0RSZW5kZXJlci5jb25zdHJ1Y3RvciIsIkZpbHRlcjNEUmVuZGVyZXIub25SVFRSZXNpemUiLCJGaWx0ZXIzRFJlbmRlcmVyLnJlcXVpcmVEZXB0aFJlbmRlciIsIkZpbHRlcjNEUmVuZGVyZXIuZ2V0TWFpbklucHV0VGV4dHVyZSIsIkZpbHRlcjNEUmVuZGVyZXIuZmlsdGVycyIsIkZpbHRlcjNEUmVuZGVyZXIudXBkYXRlRmlsdGVyVGFza3MiLCJGaWx0ZXIzRFJlbmRlcmVyLnJlbmRlciIsIkZpbHRlcjNEUmVuZGVyZXIudXBkYXRlRmlsdGVyU2l6ZXMiLCJGaWx0ZXIzRFJlbmRlcmVyLmRpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sS0FBSyxXQUFnQiw4QkFBOEIsQ0FBQyxDQUFDO0FBSzVELElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLDJCQUEyQixXQUFXLHFEQUFxRCxDQUFDLENBQUM7QUFPcEcsSUFBTyxnQkFBZ0IsV0FBYyw4Q0FBOEMsQ0FBQyxDQUFDO0FBRXJGLEFBR0E7O0dBREc7SUFDRyxnQkFBZ0I7SUFZckJBLFNBWktBLGdCQUFnQkEsQ0FZVEEsS0FBV0E7UUFaeEJDLGlCQTBNQ0E7UUFqTVFBLHdCQUFtQkEsR0FBV0EsSUFBSUEsQ0FBQ0E7UUFLMUNBLElBQUlBLENBQUNBLG9CQUFvQkEsR0FBR0EsVUFBQ0EsS0FBV0EsSUFBS0EsT0FBQUEsS0FBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBdkJBLENBQXVCQSxDQUFDQTtRQUVyRUEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDcEJBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLGdCQUFnQkEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsS0FBS0EsQ0FBQ0Es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Q0FBQ0E7SUFFTVIsa0NBQU9BLEdBQWRBO1FBRUNTLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLG1CQUFtQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0Esb0JBQW9CQSxDQUFDQSxDQUFDQTtRQUM5RUEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBO0lBQ3BCQSxDQUFDQTtJQUNGVCx1QkFBQ0E7QUFBREEsQ0ExTUEsQUEwTUNBLElBQUE7QUFFRCxBQUEwQixpQkFBakIsZ0JBQWdCLENBQUMiLCJmaWxlIjoicmVuZGVyL0ZpbHRlcjNEUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcblxuaW1wb3J0IENhbWVyYVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9DYW1lcmFcIik7XG5cbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IENvbnRleHRHTEJsZW5kRmFjdG9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2Jhc2UvQ29udGV4dEdMQmxlbmRGYWN0b3JcIik7XG5pbXBvcnQgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xWZXJ0ZXhCdWZmZXJGb3JtYXRcIik7XG5pbXBvcnQgSUNvbnRleHRTdGFnZUdMXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9JQ29udGV4dFN0YWdlR0xcIik7XG5pbXBvcnQgSUluZGV4QnVmZmVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lJbmRleEJ1ZmZlclwiKTtcbmltcG9ydCBJVGV4dHVyZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lUZXh0dXJlXCIpO1xuaW1wb3J0IElWZXJ0ZXhCdWZmZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lWZXJ0ZXhCdWZmZXJcIik7XG5pbXBvcnQgRmlsdGVyM0RCYXNlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9maWx0ZXJzL0ZpbHRlcjNEQmFzZVwiKTtcbmltcG9ydCBGaWx0ZXIzRFRhc2tCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvZmlsdGVycy90YXNrcy9GaWx0ZXIzRFRhc2tCYXNlXCIpO1xuaW1wb3J0IFJUVEJ1ZmZlck1hbmFnZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYW5hZ2Vycy9SVFRCdWZmZXJNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIEBjbGFzcyBhd2F5LnJlbmRlci5GaWx0ZXIzRFJlbmRlcmVyXG4gKi9cbmNsYXNzIEZpbHRlcjNEUmVuZGVyZXJcbntcblx0cHJpdmF0ZSBfZmlsdGVyczpBcnJheTxGaWx0ZXIzREJhc2U+O1xuXHRwcml2YXRlIF90YXNrczpBcnJheTxGaWx0ZXIzRFRhc2tCYXNlPjtcblx0cHJpdmF0ZSBfZmlsdGVyVGFza3NJbnZhbGlkOmJvb2xlYW47XG5cdHByaXZhdGUgX21haW5JbnB1dFRleHR1cmU6SVRleHR1cmU7XG5cdHByaXZhdGUgX3JlcXVpcmVEZXB0aFJlbmRlcjpib29sZWFuO1xuXHRwcml2YXRlIF9ydHRNYW5hZ2VyOlJUVEJ1ZmZlck1hbmFnZXI7XG5cdHByaXZhdGUgX3N0YWdlOlN0YWdlO1xuXHRwcml2YXRlIF9maWx0ZXJTaXplc0ludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHByaXZhdGUgX29uUlRUUmVzaXplRGVsZWdhdGU6KGV2ZW50OkV2ZW50KSA9PiB2b2lkO1xuXG5cdGNvbnN0cnVjdG9yKHN0YWdlOlN0YWdlKVxuXHR7XG5cdFx0dGhpcy5fb25SVFRSZXNpemVEZWxlZ2F0ZSA9IChldmVudDpFdmVudCkgPT4gdGhpcy5vblJUVFJlc2l6ZShldmVudCk7XG5cblx0XHR0aGlzLl9zdGFnZSA9IHN0YWdlO1xuXHRcdHRoaXMuX3J0dE1hbmFnZXIgPSBSVFRCdWZmZXJNYW5hZ2VyLmdldEluc3RhbmNlKHN0YWdlKTtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRXZlbnQuUkVTSVpFLCB0aGlzLl9vblJUVFJlc2l6ZURlbGVnYXRlKTtcblxuXHR9XG5cblx0cHJpdmF0ZSBvblJUVFJlc2l6ZShldmVudDpFdmVudClcblx0e1xuXHRcdHRoaXMuX2ZpbHRlclNpemVzSW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHJlcXVpcmVEZXB0aFJlbmRlcigpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZTpTdGFnZSk6SVRleHR1cmVcblx0e1xuXHRcdGlmICh0aGlzLl9maWx0ZXJUYXNrc0ludmFsaWQpIHtcblxuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZSk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fbWFpbklucHV0VGV4dHVyZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgZmlsdGVycygpOkZpbHRlcjNEQmFzZVtdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fZmlsdGVycztcblx0fVxuXG5cdHB1YmxpYyBzZXQgZmlsdGVycyh2YWx1ZTpGaWx0ZXIzREJhc2VbXSlcblx0e1xuXHRcdHRoaXMuX2ZpbHRlcnMgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX2ZpbHRlclRhc2tzSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLl9yZXF1aXJlRGVwdGhSZW5kZXIgPSBmYWxzZTtcblxuXHRcdGlmICghdGhpcy5fZmlsdGVycykge1xuXG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgKytpKSB7XG5cblx0XHRcdC8vIFRPRE86IGNoZWNrIGxvZ2ljOlxuXHRcdFx0Ly8gdGhpcy5fcmVxdWlyZURlcHRoUmVuZGVyIHx8PSAgQm9vbGVhbiAoIHRoaXMuX2ZpbHRlcnNbaV0ucmVxdWlyZURlcHRoUmVuZGVyIClcblxuXHRcdFx0dmFyIHM6YW55ID0gdGhpcy5fZmlsdGVyc1tpXTtcblx0XHRcdHZhciBiOmJvb2xlYW4gPSA8Ym9vbGVhbj4gKCBzLnJlcXVpcmVEZXB0aFJlbmRlciA9PSBudWxsICk/IGZhbHNlIDogcy5yZXF1aXJlRGVwdGhSZW5kZXI7XG5cblx0XHRcdHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciA9IHRoaXMuX3JlcXVpcmVEZXB0aFJlbmRlciB8fCBiO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5fZmlsdGVyU2l6ZXNJbnZhbGlkID0gdHJ1ZTtcblxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZTpTdGFnZSlcblx0e1xuXHRcdHZhciBsZW46bnVtYmVyO1xuXG5cdFx0aWYgKHRoaXMuX2ZpbHRlclNpemVzSW52YWxpZCkge1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlclNpemVzKCk7XG5cblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX2ZpbHRlcnMpIHtcblx0XHRcdHRoaXMuX3Rhc2tzID0gbnVsbDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl90YXNrcyA9IG5ldyBBcnJheTxGaWx0ZXIzRFRhc2tCYXNlPigpO1xuXG5cdFx0bGVuID0gdGhpcy5fZmlsdGVycy5sZW5ndGggLSAxO1xuXG5cdFx0dmFyIGZpbHRlcjpGaWx0ZXIzREJhc2U7XG5cblx0XHRmb3IgKHZhciBpOm51bWJlciA9IDA7IGkgPD0gbGVuOyArK2kpIHtcblxuXHRcdFx0Ly8gbWFrZSBzdXJlIGFsbCBpbnRlcm5hbCB0YXNrcyBhcmUgbGlua2VkIHRvZ2V0aGVyXG5cdFx0XHRmaWx0ZXIgPSB0aGlzLl9maWx0ZXJzW2ldO1xuXG5cdFx0XHQvLyBUT0RPOiBjaGVjayBsb2dpY1xuXHRcdFx0Ly8gZmlsdGVyLnNldFJlbmRlclRhcmdldHMoaSA9PSBsZW4/IG51bGwgOiBGaWx0ZXIzREJhc2UoX2ZpbHRlcnNbaSArIDFdKS5nZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlKSwgc3RhZ2UpO1xuXG5cdFx0XHRmaWx0ZXIuc2V0UmVuZGVyVGFyZ2V0cyhpID09IGxlbj8gbnVsbCA6IHRoaXMuX2ZpbHRlcnNbaSArIDFdLmdldE1haW5JbnB1dFRleHR1cmUoc3RhZ2UpLCBzdGFnZSk7XG5cblx0XHRcdHRoaXMuX3Rhc2tzID0gdGhpcy5fdGFza3MuY29uY2F0KGZpbHRlci50YXNrcyk7XG5cblx0XHR9XG5cblx0XHR0aGlzLl9tYWluSW5wdXRUZXh0dXJlID0gdGhpcy5fZmlsdGVyc1swXS5nZXRNYWluSW5wdXRUZXh0dXJlKHN0YWdlKTtcblxuXHR9XG5cblx0cHVibGljIHJlbmRlcihzdGFnZTpTdGFnZSwgY2FtZXJhOkNhbWVyYSwgZGVwdGhUZXh0dXJlOklUZXh0dXJlKVxuXHR7XG5cdFx0dmFyIGxlbjpudW1iZXI7XG5cdFx0dmFyIGk6bnVtYmVyO1xuXHRcdHZhciB0YXNrOkZpbHRlcjNEVGFza0Jhc2U7XG5cdFx0dmFyIGNvbnRleHQ6SUNvbnRleHRTdGFnZUdMID0gPElDb250ZXh0U3RhZ2VHTD4gc3RhZ2UuY29udGV4dDtcblxuXHRcdHZhciBpbmRleEJ1ZmZlcjpJSW5kZXhCdWZmZXIgPSB0aGlzLl9ydHRNYW5hZ2VyLmluZGV4QnVmZmVyO1xuXG5cdFx0dmFyIHZlcnRleEJ1ZmZlcjpJVmVydGV4QnVmZmVyID0gdGhpcy5fcnR0TWFuYWdlci5yZW5kZXJUb1RleHR1cmVWZXJ0ZXhCdWZmZXI7XG5cblx0XHRpZiAoIXRoaXMuX2ZpbHRlcnMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fZmlsdGVyU2l6ZXNJbnZhbGlkKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlclNpemVzKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2ZpbHRlclRhc2tzSW52YWxpZCkge1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJUYXNrcyhzdGFnZSk7XG5cdFx0fVxuXG5cdFx0bGVuID0gdGhpcy5fZmlsdGVycy5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRcdHRoaXMuX2ZpbHRlcnNbaV0udXBkYXRlKHN0YWdlLCBjYW1lcmEpO1xuXHRcdH1cblxuXHRcdGxlbiA9IHRoaXMuX3Rhc2tzLmxlbmd0aDtcblxuXHRcdGlmIChsZW4gPiAxKSB7XG5cdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDAsIHZlcnRleEJ1ZmZlciwgMCwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXHRcdFx0Y29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdCgxLCB2ZXJ0ZXhCdWZmZXIsIDIsIENvbnRleHRHTFZlcnRleEJ1ZmZlckZvcm1hdC5GTE9BVF8yKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblxuXHRcdFx0dGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xuXG5cdFx0XHQvL3N0YWdlLnNldFJlbmRlclRhcmdldCh0YXNrLnRhcmdldCk7IC8vVE9ET1xuXG5cdFx0XHRpZiAoIXRhc2sudGFyZ2V0KSB7XG5cblx0XHRcdFx0c3RhZ2Uuc2Npc3NvclJlY3QgPSBudWxsO1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXIgPSB0aGlzLl9ydHRNYW5hZ2VyLnJlbmRlclRvU2NyZWVuVmVydGV4QnVmZmVyO1xuXHRcdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDAsIHZlcnRleEJ1ZmZlciwgMCwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXHRcdFx0XHRjb250ZXh0LnNldFZlcnRleEJ1ZmZlckF0KDEsIHZlcnRleEJ1ZmZlciwgMiwgQ29udGV4dEdMVmVydGV4QnVmZmVyRm9ybWF0LkZMT0FUXzIpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnRleHQuc2V0VGV4dHVyZUF0KDAsIHRhc2suZ2V0TWFpbklucHV0VGV4dHVyZShzdGFnZSkpO1xuXHRcdFx0Y29udGV4dC5zZXRQcm9ncmFtKHRhc2suZ2V0UHJvZ3JhbShzdGFnZSkpO1xuXHRcdFx0Y29udGV4dC5jbGVhcigwLjAsIDAuMCwgMC4wLCAwLjApO1xuXG5cdFx0XHR0YXNrLmFjdGl2YXRlKHN0YWdlLCBjYW1lcmEsIGRlcHRoVGV4dHVyZSk7XG5cblx0XHRcdGNvbnRleHQuc2V0QmxlbmRGYWN0b3JzKENvbnRleHRHTEJsZW5kRmFjdG9yLk9ORSwgQ29udGV4dEdMQmxlbmRGYWN0b3IuWkVSTyk7XG5cdFx0XHRjb250ZXh0LmRyYXdUcmlhbmdsZXMoaW5kZXhCdWZmZXIsIDAsIDIpO1xuXG5cdFx0XHR0YXNrLmRlYWN0aXZhdGUoc3RhZ2UpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuc2V0VGV4dHVyZUF0KDAsIG51bGwpO1xuXHRcdGNvbnRleHQuc2V0VmVydGV4QnVmZmVyQXQoMCwgbnVsbCk7XG5cdFx0Y29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdCgxLCBudWxsKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRmlsdGVyU2l6ZXMoKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7ICsraSkge1xuXHRcdFx0dGhpcy5fZmlsdGVyc1tpXS50ZXh0dXJlV2lkdGggPSB0aGlzLl9ydHRNYW5hZ2VyLnRleHR1cmVXaWR0aDtcblx0XHRcdHRoaXMuX2ZpbHRlcnNbaV0udGV4dHVyZUhlaWdodCA9IHRoaXMuX3J0dE1hbmFnZXIudGV4dHVyZUhlaWdodDtcblx0XHR9XG5cblx0XHR0aGlzLl9maWx0ZXJTaXplc0ludmFsaWQgPSB0cnVlO1xuXG5cdH1cblxuXHRwdWJsaWMgZGlzcG9zZSgpXG5cdHtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnQuUkVTSVpFLCB0aGlzLl9vblJUVFJlc2l6ZURlbGVnYXRlKTtcblx0XHR0aGlzLl9ydHRNYW5hZ2VyID0gbnVsbDtcblx0XHR0aGlzLl9zdGFnZSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0ID0gRmlsdGVyM0RSZW5kZXJlcjsiXX0= \ No newline at end of file diff --git a/lib/core/render/Filter3DRenderer.ts b/lib/render/Filter3DRenderer.ts similarity index 90% rename from lib/core/render/Filter3DRenderer.ts rename to lib/render/Filter3DRenderer.ts index 675bb201..819ef388 100644 --- a/lib/core/render/Filter3DRenderer.ts +++ b/lib/render/Filter3DRenderer.ts @@ -2,13 +2,13 @@ import Event = require("awayjs-core/lib/events/Event"); import Camera = require("awayjs-display/lib/entities/Camera"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); -import ContextGLBlendFactor = require("awayjs-stagegl/lib/core/stagegl/ContextGLBlendFactor"); -import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/core/stagegl/ContextGLVertexBufferFormat"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); -import IIndexBuffer = require("awayjs-stagegl/lib/core/stagegl/IIndexBuffer"); -import ITexture = require("awayjs-stagegl/lib/core/stagegl/ITexture"); -import IVertexBuffer = require("awayjs-stagegl/lib/core/stagegl/IVertexBuffer"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); +import ContextGLBlendFactor = require("awayjs-stagegl/lib/base/ContextGLBlendFactor"); +import ContextGLVertexBufferFormat = require("awayjs-stagegl/lib/base/ContextGLVertexBufferFormat"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); +import IIndexBuffer = require("awayjs-stagegl/lib/base/IIndexBuffer"); +import ITexture = require("awayjs-stagegl/lib/base/ITexture"); +import IVertexBuffer = require("awayjs-stagegl/lib/base/IVertexBuffer"); import Filter3DBase = require("awayjs-stagegl/lib/filters/Filter3DBase"); import Filter3DTaskBase = require("awayjs-stagegl/lib/filters/tasks/Filter3DTaskBase"); import RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); diff --git a/lib/render/RendererBase.js b/lib/render/RendererBase.js new file mode 100755 index 00000000..c59cb544 --- /dev/null +++ b/lib/render/RendererBase.js @@ -0,0 +1,555 @@ +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Matrix3D = require("awayjs-core/lib/geom/Matrix3D"); +var Point = require("awayjs-core/lib/geom/Point"); +var Rectangle = require("awayjs-core/lib/geom/Rectangle"); +var AbstractMethodError = require("awayjs-core/lib/errors/AbstractMethodError"); +var EventDispatcher = require("awayjs-core/lib/events/EventDispatcher"); +var RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); +var RenderableMergeSort = require("awayjs-display/lib/sort/RenderableMergeSort"); +var RendererEvent = require("awayjs-display/lib/events/RendererEvent"); +var StageEvent = require("awayjs-display/lib/events/StageEvent"); +var EntityCollector = require("awayjs-display/lib/traverse/EntityCollector"); +var BillboardRenderable = require("awayjs-stagegl/lib/pool/BillboardRenderable"); +var LineSubMeshRenderable = require("awayjs-stagegl/lib/pool/LineSubMeshRenderable"); +var TriangleSubMeshRenderable = require("awayjs-stagegl/lib/pool/TriangleSubMeshRenderable"); +var ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +var DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); +/** + * RendererBase forms an abstract base class for classes that are used in the rendering pipeline to render the + * contents of a partition + * + * @class away.render.RendererBase + */ +var RendererBase = (function (_super) { + __extends(RendererBase, _super); + /** + * Creates a new RendererBase object. + */ + function RendererBase() { + var _this = this; + _super.call(this); + this._viewPort = new Rectangle(); + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this._depthPrepass = false; + this._backgroundR = 0; + this._backgroundG = 0; + this._backgroundB = 0; + this._backgroundAlpha = 1; + this._shareContext = false; + this.textureRatioX = 1; + this.textureRatioY = 1; + this._pRttViewProjectionMatrix = new Matrix3D(); + this._localPos = new Point(); + this._globalPos = new Point(); + this._pScissorRect = new Rectangle(); + this._pNumTriangles = 0; + this._onViewportUpdatedDelegate = function (event) { return _this.onViewportUpdated(event); }; + this._billboardRenderablePool = RenderablePool.getPool(BillboardRenderable); + this._triangleSubMeshRenderablePool = RenderablePool.getPool(TriangleSubMeshRenderable); + this._lineSubMeshRenderablePool = RenderablePool.getPool(LineSubMeshRenderable); + this._onContextUpdateDelegate = function (event) { return _this.onContextUpdate(event); }; + //default sorting algorithm + this.renderableSorter = new RenderableMergeSort(); + } + Object.defineProperty(RendererBase.prototype, "numTriangles", { + /** + * + */ + get: function () { + return this._pNumTriangles; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "viewPort", { + /** + * A viewPort rectangle equivalent of the Stage size and position. + */ + get: function () { + return this._viewPort; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "scissorRect", { + /** + * A scissor rectangle equivalent of the view size and position. + */ + get: function () { + return this._pScissorRect; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "x", { + /** + * + */ + get: function () { + return this._localPos.x; + }, + set: function (value) { + if (this.x == value) + return; + this._globalPos.x = this._localPos.x = value; + this.updateGlobalPos(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "y", { + /** + * + */ + get: function () { + return this._localPos.y; + }, + set: function (value) { + if (this.y == value) + return; + this._globalPos.y = this._localPos.y = value; + this.updateGlobalPos(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "width", { + /** + * + */ + get: function () { + return this._width; + }, + set: function (value) { + if (this._width == value) + return; + this._width = value; + this._pScissorRect.width = value; + if (this._pRttBufferManager) + this._pRttBufferManager.viewWidth = value; + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this.notifyScissorUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "height", { + /** + * + */ + get: function () { + return this._height; + }, + set: function (value) { + if (this._height == value) + return; + this._height = value; + this._pScissorRect.height = value; + if (this._pRttBufferManager) + this._pRttBufferManager.viewHeight = value; + this._pBackBufferInvalid = true; + this._pDepthTextureInvalid = true; + this.notifyScissorUpdate(); + }, + enumerable: true, + configurable: true + }); + RendererBase.prototype._iCreateEntityCollector = function () { + return new EntityCollector(); + }; + Object.defineProperty(RendererBase.prototype, "_iBackgroundR", { + /** + * The background color's red component, used when clearing. + * + * @private + */ + get: function () { + return this._backgroundR; + }, + set: function (value) { + if (this._backgroundR == value) + return; + this._backgroundR = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "_iBackgroundG", { + /** + * The background color's green component, used when clearing. + * + * @private + */ + get: function () { + return this._backgroundG; + }, + set: function (value) { + if (this._backgroundG == value) + return; + this._backgroundG = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "_iBackgroundB", { + /** + * The background color's blue component, used when clearing. + * + * @private + */ + get: function () { + return this._backgroundB; + }, + set: function (value) { + if (this._backgroundB == value) + return; + this._backgroundB = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RendererBase.prototype, "stage", { + /** + * The Stage that will provide the ContextGL used for rendering. + */ + get: function () { + return this._pStage; + }, + set: function (value) { + if (value == this._pStage) + return; + this.iSetStage(value); + }, + enumerable: true, + configurable: true + }); + RendererBase.prototype.iSetStage = function (value) { + if (this._pStage) { + this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); + } + if (!value) { + this._pStage = null; + this._pContext = null; + } + else { + this._pStage = value; + this._pStage.addEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.addEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.addEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); + /* + if (_backgroundImageRenderer) + _backgroundImageRenderer.stage = value; + */ + if (this._pStage.context) + this._pContext = this._pStage.context; + } + this._pBackBufferInvalid = true; + this.updateGlobalPos(); + }; + Object.defineProperty(RendererBase.prototype, "shareContext", { + /** + * Defers control of ContextGL clear() and present() calls to Stage, enabling multiple Stage frameworks + * to share the same ContextGL object. + */ + get: function () { + return this._shareContext; + }, + set: function (value) { + if (this._shareContext == value) + return; + this._shareContext = value; + this.updateGlobalPos(); + }, + enumerable: true, + configurable: true + }); + /** + * Disposes the resources used by the RendererBase. + */ + RendererBase.prototype.dispose = function () { + if (this._pRttBufferManager) + this._pRttBufferManager.dispose(); + this._pRttBufferManager = null; + this._pStage.removeEventListener(StageEvent.CONTEXT_CREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.CONTEXT_RECREATED, this._onContextUpdateDelegate); + this._pStage.removeEventListener(StageEvent.VIEWPORT_UPDATED, this._onViewportUpdatedDelegate); + this._pStage = null; + /* + if (_backgroundImageRenderer) { + _backgroundImageRenderer.dispose(); + _backgroundImageRenderer = null; + } + */ + }; + RendererBase.prototype.render = function (entityCollector) { + this._viewportDirty = false; + this._scissorDirty = false; + }; + /** + * Renders the potentially visible geometry to the back buffer or texture. + * @param entityCollector The EntityCollector object containing the potentially visible geometry. + * @param target An option target texture to render to. + * @param surfaceSelector The index of a CubeTexture's face to render to. + * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. + */ + RendererBase.prototype._iRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + //TODO refactor setTarget so that rendertextures are created before this check + if (!this._pStage || !this._pContext) + return; + this._pRttViewProjectionMatrix.copyFrom(entityCollector.camera.viewProjection); + this._pRttViewProjectionMatrix.appendScale(this.textureRatioX, this.textureRatioY, 1); + this.pExecuteRender(entityCollector, target, scissorRect, surfaceSelector); + for (var i = 0; i < 8; ++i) { + this._pContext.setVertexBufferAt(i, null); + this._pContext.setTextureAt(i, null); + } + }; + RendererBase.prototype._iRenderCascades = function (entityCollector, target, numCascades, scissorRects, cameras) { + }; + RendererBase.prototype.pCollectRenderables = function (entityCollector) { + //reset head values + this._pBlendedRenderableHead = null; + this._pOpaqueRenderableHead = null; + this._pNumTriangles = 0; + //grab entity head + var item = entityCollector.entityHead; + //set temp values for entry point and camera forward vector + this._pCamera = entityCollector.camera; + this._iEntryPoint = this._pCamera.scenePosition; + this._pCameraForward = this._pCamera.transform.forwardVector; + while (item) { + item.entity._iCollectRenderables(this); + item = item.next; + } + //sort the resulting renderables + this._pOpaqueRenderableHead = this.renderableSorter.sortOpaqueRenderables(this._pOpaqueRenderableHead); + this._pBlendedRenderableHead = this.renderableSorter.sortBlendedRenderables(this._pBlendedRenderableHead); + }; + /** + * Renders the potentially visible geometry to the back buffer or texture. Only executed if everything is set up. + * + * @param entityCollector The EntityCollector object containing the potentially visible geometry. + * @param target An option target texture to render to. + * @param surfaceSelector The index of a CubeTexture's face to render to. + * @param additionalClearMask Additional clear mask information, in case extra clear channels are to be omitted. + */ + RendererBase.prototype.pExecuteRender = function (entityCollector, target, scissorRect, surfaceSelector) { + if (target === void 0) { target = null; } + if (scissorRect === void 0) { scissorRect = null; } + if (surfaceSelector === void 0) { surfaceSelector = 0; } + this._pContext.setRenderTarget(target, true, surfaceSelector); + if ((target || !this._shareContext) && !this._depthPrepass) + this._pContext.clear(this._backgroundR, this._backgroundG, this._backgroundB, this._backgroundAlpha, 1, 0); + this._pContext.setDepthTest(false, ContextGLCompareMode.ALWAYS); + this._pStage.scissorRect = scissorRect; + /* + if (_backgroundImageRenderer) + _backgroundImageRenderer.render(); + */ + this.pDraw(entityCollector, target); + //line required for correct rendering when using away3d with starling. DO NOT REMOVE UNLESS STARLING INTEGRATION IS RETESTED! + //this._pContext.setDepthTest(false, ContextGLCompareMode.LESS_EQUAL); //oopsie + if (!this._shareContext) { + if (this._snapshotRequired && this._snapshotBitmapData) { + this._pContext.drawToBitmapData(this._snapshotBitmapData); + this._snapshotRequired = false; + } + } + this._pStage.scissorRect = null; + }; + /* + * Will draw the renderer's output on next render to the provided bitmap data. + * */ + RendererBase.prototype.queueSnapshot = function (bmd) { + this._snapshotRequired = true; + this._snapshotBitmapData = bmd; + }; + /** + * Performs the actual drawing of geometry to the target. + * @param entityCollector The EntityCollector object containing the potentially visible geometry. + */ + RendererBase.prototype.pDraw = function (entityCollector, target) { + throw new AbstractMethodError(); + }; + /** + * Assign the context once retrieved + */ + RendererBase.prototype.onContextUpdate = function (event) { + this._pContext = this._pStage.context; + }; + Object.defineProperty(RendererBase.prototype, "_iBackgroundAlpha", { + get: function () { + return this._backgroundAlpha; + }, + set: function (value) { + if (this._backgroundAlpha == value) + return; + this._backgroundAlpha = value; + this._pBackBufferInvalid = true; + }, + enumerable: true, + configurable: true + }); + /* + public get iBackground():Texture2DBase + { + return this._background; + } + */ + /* + public set iBackground(value:Texture2DBase) + { + if (this._backgroundImageRenderer && !value) { + this._backgroundImageRenderer.dispose(); + this._backgroundImageRenderer = null; + } + + if (!this._backgroundImageRenderer && value) + { + + this._backgroundImageRenderer = new BackgroundImageRenderer(this._pStage); + + } + + + this._background = value; + + if (this._backgroundImageRenderer) + this._backgroundImageRenderer.texture = value; + } + */ + /* + public get backgroundImageRenderer():BackgroundImageRenderer + { + return _backgroundImageRenderer; + } + */ + /** + * @private + */ + RendererBase.prototype.notifyScissorUpdate = function () { + if (this._scissorDirty) + return; + this._scissorDirty = true; + if (!this._scissorUpdated) + this._scissorUpdated = new RendererEvent(RendererEvent.SCISSOR_UPDATED); + this.dispatchEvent(this._scissorUpdated); + }; + /** + * @private + */ + RendererBase.prototype.notifyViewportUpdate = function () { + if (this._viewportDirty) + return; + this._viewportDirty = true; + if (!this._viewPortUpdated) + this._viewPortUpdated = new RendererEvent(RendererEvent.VIEWPORT_UPDATED); + this.dispatchEvent(this._viewPortUpdated); + }; + /** + * + */ + RendererBase.prototype.onViewportUpdated = function (event) { + this._viewPort = this._pStage.viewPort; + //TODO stop firing viewport updated for every stagegl viewport change + if (this._shareContext) { + this._pScissorRect.x = this._globalPos.x - this._pStage.x; + this._pScissorRect.y = this._globalPos.y - this._pStage.y; + this.notifyScissorUpdate(); + } + this.notifyViewportUpdate(); + }; + /** + * + */ + RendererBase.prototype.updateGlobalPos = function () { + if (this._shareContext) { + this._pScissorRect.x = this._globalPos.x - this._viewPort.x; + this._pScissorRect.y = this._globalPos.y - this._viewPort.y; + } + else { + this._pScissorRect.x = 0; + this._pScissorRect.y = 0; + this._viewPort.x = this._globalPos.x; + this._viewPort.y = this._globalPos.y; + } + this.notifyScissorUpdate(); + }; + /** + * + * @param billboard + * @protected + */ + RendererBase.prototype.applyBillboard = function (billboard) { + this._applyRenderable(this._billboardRenderablePool.getItem(billboard)); + }; + /** + * + * @param triangleSubMesh + */ + RendererBase.prototype.applyTriangleSubMesh = function (triangleSubMesh) { + this._applyRenderable(this._triangleSubMeshRenderablePool.getItem(triangleSubMesh)); + }; + /** + * + * @param lineSubMesh + */ + RendererBase.prototype.applyLineSubMesh = function (lineSubMesh) { + this._applyRenderable(this._lineSubMeshRenderablePool.getItem(lineSubMesh)); + }; + /** + * + * @param renderable + * @protected + */ + RendererBase.prototype._applyRenderable = function (renderable) { + var material = renderable.materialOwner.material; + var entity = renderable.sourceEntity; + var position = entity.scenePosition; + if (!material) + material = DefaultMaterialManager.getDefaultMaterial(renderable.materialOwner); + //update material if invalidated + material._iUpdateMaterial(); + //set ids for faster referencing + renderable.material = material; + renderable.materialId = material._iMaterialId; + renderable.renderOrderId = this._pContext.getMaterial(material, this._pStage.profile).renderOrderId; + renderable.cascaded = false; + // project onto camera's z-axis + position = this._iEntryPoint.subtract(position); + renderable.zIndex = entity.zOffset + position.dotProduct(this._pCameraForward); + //store reference to scene transform + renderable.renderSceneTransform = renderable.sourceEntity.getRenderSceneTransform(this._pCamera); + if (material.requiresBlending) { + renderable.next = this._pBlendedRenderableHead; + this._pBlendedRenderableHead = renderable; + } + else { + renderable.next = this._pOpaqueRenderableHead; + this._pOpaqueRenderableHead = renderable; + } + this._pNumTriangles += renderable.numTriangles; + //handle any overflow for renderables with data that exceeds GPU limitations + if (renderable.overflow) + this._applyRenderable(renderable.overflow); + }; + return RendererBase; +})(EventDispatcher); +module.exports = RendererBase; + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF3YXlqcy1zdGFnZWdsL2xpYi9yZW5kZXIvcmVuZGVyZXJiYXNlLnRzIl0sIm5hbWVzIjpbIlJlbmRlcmVyQmFzZSIsIlJlbmRlcmVyQmFzZS5jb25zdHJ1Y3RvciIsIlJlbmRlcmVyQmFzZS5udW1UcmlhbmdsZXMiLCJSZW5kZXJlckJhc2Uudmlld1BvcnQiLCJSZW5kZXJlckJhc2Uuc2Npc3NvclJlY3QiLCJSZW5kZXJlckJhc2UueCIsIlJlbmRlcmVyQmFzZS55IiwiUmVuZGVyZXJCYXNlLndpZHRoIiwiUmVuZGVyZXJCYXNlLmhlaWdodCIsIlJlbmRlcmVyQmFzZS5faUNyZWF0ZUVudGl0eUNvbGxlY3RvciIsIlJlbmRlcmVyQmFzZS5faUJhY2tncm91bmRSIiwiUmVuZGVyZXJCYXNlLl9pQmFja2dyb3VuZEciLCJSZW5kZXJlckJhc2UuX2lCYWNrZ3JvdW5kQiIsIlJlbmRlcmVyQmFzZS5zdGFnZSIsIlJlbmRlcmVyQmFzZS5pU2V0U3RhZ2UiLCJSZW5kZXJlckJhc2Uuc2hhcmVDb250ZXh0IiwiUmVuZGVyZXJCYXNlLmRpc3Bvc2UiLCJSZW5kZXJlckJhc2UucmVuZGVyIiwiUmVuZGVyZXJCYXNlLl9pUmVuZGVyIiwiUmVuZGVyZXJCYXNlLl9pUmVuZGVyQ2FzY2FkZXMiLCJSZW5kZXJlckJhc2UucENvbGxlY3RSZW5kZXJhYmxlcyIsIlJlbmRlcmVyQmFzZS5wRXhlY3V0ZVJlbmRlciIsIlJlbmRlcmVyQmFzZS5xdWV1ZVNuYXBzaG90IiwiUmVuZGVyZXJCYXNlLnBEcmF3IiwiUmVuZGVyZXJCYXNlLm9uQ29udGV4dFVwZGF0ZSIsIlJlbmRlcmVyQmFzZS5faUJhY2tncm91bmRBbHBoYSIsIlJlbmRlcmVyQmFzZS5ub3RpZnlTY2lzc29yVXBkYXRlIiwiUmVuZGVyZXJCYXNlLm5vdGlmeVZpZXdwb3J0VXBkYXRlIiwiUmVuZGVyZXJCYXNlLm9uVmlld3BvcnRVcGRhdGVkIiwiUmVuZGVyZXJCYXNlLnVwZGF0ZUdsb2JhbFBvcyIsIlJlbmRlcmVyQmFzZS5hcHBseUJpbGxib2FyZCIsIlJlbmRlcmVyQmFzZS5hcHBseVRyaWFuZ2xlU3ViTWVzaCIsIlJlbmRlcmVyQmFzZS5hcHBseUxpbmVTdWJNZXNoIiwiUmVuZGVyZXJCYXNlLl9hcHBseVJlbmRlcmFibGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQU8sUUFBUSxXQUFnQiwrQkFBK0IsQ0FBQyxDQUFDO0FBQ2hFLElBQU8sS0FBSyxXQUFnQiw0QkFBNEIsQ0FBQyxDQUFDO0FBQzFELElBQU8sU0FBUyxXQUFlLGdDQUFnQyxDQUFDLENBQUM7QUFFakUsSUFBTyxtQkFBbUIsV0FBYSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3JGLElBQU8sZUFBZSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFPOUUsSUFBTyxjQUFjLFdBQWMsd0NBQXdDLENBQUMsQ0FBQztBQUU3RSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFPdEYsSUFBTyxhQUFhLFdBQWMseUNBQXlDLENBQUMsQ0FBQztBQUM3RSxJQUFPLFVBQVUsV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBR3hFLElBQU8sZUFBZSxXQUFjLDZDQUE2QyxDQUFDLENBQUM7QUFJbkYsSUFBTyxtQkFBbUIsV0FBYSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3RGLElBQU8scUJBQXFCLFdBQVksK0NBQStDLENBQUMsQ0FBQztBQUV6RixJQUFPLHlCQUF5QixXQUFXLG1EQUFtRCxDQUFDLENBQUM7QUFDaEcsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBR3hGLElBQU8sc0JBQXNCLFdBQVksMkRBQTJELENBQUMsQ0FBQztBQUV0RyxBQU1BOzs7OztHQURHO0lBQ0csWUFBWTtJQUFTQSxVQUFyQkEsWUFBWUEsVUFBd0JBO0lBMEt6Q0E7O09BRUdBO0lBQ0hBLFNBN0tLQSxZQUFZQTtRQUFsQkMsaUJBMnBCQ0E7UUE1ZUNBLGlCQUFPQSxDQUFDQTtRQWpLREEsY0FBU0EsR0FBYUEsSUFBSUEsU0FBU0EsRUFBRUEsQ0FBQ0E7UUFJdkNB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QjBCLGVBQWUsRUEycEJ6QztBQUVELEFBQXNCLGlCQUFiLFlBQVksQ0FBQyIsImZpbGUiOiJyZW5kZXIvUmVuZGVyZXJCYXNlLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9iYXNlL0JpdG1hcERhdGFcIik7XG5pbXBvcnQgTWF0cml4M0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9NYXRyaXgzRFwiKTtcbmltcG9ydCBQb2ludFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9nZW9tL1BvaW50XCIpO1xuaW1wb3J0IFJlY3RhbmdsZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9SZWN0YW5nbGVcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBBYnN0cmFjdE1ldGhvZEVycm9yXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2Vycm9ycy9BYnN0cmFjdE1ldGhvZEVycm9yXCIpO1xuaW1wb3J0IEV2ZW50RGlzcGF0Y2hlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudERpc3BhdGNoZXJcIik7XG5pbXBvcnQgVGV4dHVyZVByb3h5QmFzZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL1RleHR1cmVQcm94eUJhc2VcIik7XG5cbmltcG9ydCBMaW5lU3ViTWVzaFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvYmFzZS9MaW5lU3ViTWVzaFwiKTtcbmltcG9ydCBUcmlhbmdsZVN1Yk1lc2hcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9iYXNlL1RyaWFuZ2xlU3ViTWVzaFwiKTtcbmltcG9ydCBTdGFnZVx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL1N0YWdlXCIpO1xuaW1wb3J0IEVudGl0eUxpc3RJdGVtXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvcG9vbC9FbnRpdHlMaXN0SXRlbVwiKTtcbmltcG9ydCBSZW5kZXJhYmxlUG9vbFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3Bvb2wvUmVuZGVyYWJsZVBvb2xcIik7XG5pbXBvcnQgSUVudGl0eVNvcnRlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3NvcnQvSUVudGl0eVNvcnRlclwiKTtcbmltcG9ydCBSZW5kZXJhYmxlTWVyZ2VTb3J0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3NvcnQvUmVuZGVyYWJsZU1lcmdlU29ydFwiKTtcbmltcG9ydCBJUmVuZGVyZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3JlbmRlci9JUmVuZGVyZXJcIik7XG5pbXBvcnQgQmlsbGJvYXJkXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9lbnRpdGllcy9CaWxsYm9hcmRcIik7XG5pbXBvcnQgQ2FtZXJhXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0NhbWVyYVwiKTtcbmltcG9ydCBJRW50aXR5XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL0lFbnRpdHlcIik7XG5pbXBvcnQgU2t5Ym94XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL2VudGl0aWVzL1NreWJveFwiKTtcblxuaW1wb3J0IFJlbmRlcmVyRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvUmVuZGVyZXJFdmVudFwiKTtcbmltcG9ydCBTdGFnZUV2ZW50XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi9ldmVudHMvU3RhZ2VFdmVudFwiKTtcbmltcG9ydCBNYXRlcmlhbEJhc2VcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL21hdGVyaWFscy9NYXRlcmlhbEJhc2VcIik7XG5cbmltcG9ydCBFbnRpdHlDb2xsZWN0b3JcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1kaXNwbGF5L2xpYi90cmF2ZXJzZS9FbnRpdHlDb2xsZWN0b3JcIik7XG5pbXBvcnQgSUNvbGxlY3Rvclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtZGlzcGxheS9saWIvdHJhdmVyc2UvSUNvbGxlY3RvclwiKTtcbmltcG9ydCBTaGFkb3dDYXN0ZXJDb2xsZWN0b3JcdFx0PSByZXF1aXJlKFwiYXdheWpzLWRpc3BsYXkvbGliL3RyYXZlcnNlL1NoYWRvd0Nhc3RlckNvbGxlY3RvclwiKTtcblxuaW1wb3J0IEJpbGxib2FyZFJlbmRlcmFibGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9CaWxsYm9hcmRSZW5kZXJhYmxlXCIpO1xuaW1wb3J0IExpbmVTdWJNZXNoUmVuZGVyYWJsZVx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvcG9vbC9MaW5lU3ViTWVzaFJlbmRlcmFibGVcIik7XG5pbXBvcnQgUmVuZGVyYWJsZUJhc2VcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1JlbmRlcmFibGVCYXNlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9wb29sL1RyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVcIik7XG5pbXBvcnQgQ29udGV4dEdMQ29tcGFyZU1vZGVcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvYmFzZS9Db250ZXh0R0xDb21wYXJlTW9kZVwiKTtcbmltcG9ydCBJQ29udGV4dFN0YWdlR0xcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9iYXNlL0lDb250ZXh0U3RhZ2VHTFwiKTtcbmltcG9ydCBSVFRCdWZmZXJNYW5hZ2VyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWFuYWdlcnMvUlRUQnVmZmVyTWFuYWdlclwiKTtcbmltcG9ydCBEZWZhdWx0TWF0ZXJpYWxNYW5hZ2VyXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvdXRpbHMvRGVmYXVsdE1hdGVyaWFsTWFuYWdlclwiKTtcblxuLyoqXG4gKiBSZW5kZXJlckJhc2UgZm9ybXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSByZW5kZXJpbmcgcGlwZWxpbmUgdG8gcmVuZGVyIHRoZVxuICogY29udGVudHMgb2YgYSBwYXJ0aXRpb25cbiAqXG4gKiBAY2xhc3MgYXdheS5yZW5kZXIuUmVuZGVyZXJCYXNlXG4gKi9cbmNsYXNzIFJlbmRlcmVyQmFzZSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlclxue1xuXHRwcml2YXRlIF9iaWxsYm9hcmRSZW5kZXJhYmxlUG9vbDpSZW5kZXJhYmxlUG9vbDtcblx0cHJpdmF0ZSBfdHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZVBvb2w6UmVuZGVyYWJsZVBvb2w7XG5cdHByaXZhdGUgX2xpbmVTdWJNZXNoUmVuZGVyYWJsZVBvb2w6UmVuZGVyYWJsZVBvb2w7XG5cblx0cHVibGljIF9wQ29udGV4dDpJQ29udGV4dFN0YWdlR0w7XG5cdHB1YmxpYyBfcFN0YWdlOlN0YWdlO1xuXG5cdHB1YmxpYyBfcENhbWVyYTpDYW1lcmE7XG5cdHB1YmxpYyBfaUVudHJ5UG9pbnQ6VmVjdG9yM0Q7XG5cdHB1YmxpYyBfcENhbWVyYUZvcndhcmQ6VmVjdG9yM0Q7XG5cblx0cHVibGljIF9wUnR0QnVmZmVyTWFuYWdlcjpSVFRCdWZmZXJNYW5hZ2VyO1xuXHRwcml2YXRlIF92aWV3UG9ydDpSZWN0YW5nbGUgPSBuZXcgUmVjdGFuZ2xlKCk7XG5cdHByaXZhdGUgX3ZpZXdwb3J0RGlydHk6Ym9vbGVhbjtcblx0cHJpdmF0ZSBfc2Npc3NvckRpcnR5OmJvb2xlYW47XG5cblx0cHVibGljIF9wQmFja0J1ZmZlckludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHB1YmxpYyBfcERlcHRoVGV4dHVyZUludmFsaWQ6Ym9vbGVhbiA9IHRydWU7XG5cdHB1YmxpYyBfZGVwdGhQcmVwYXNzOmJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZFI6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEc6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEI6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBfYmFja2dyb3VuZEFscGhhOm51bWJlciA9IDE7XG5cdHB1YmxpYyBfc2hhcmVDb250ZXh0OmJvb2xlYW4gPSBmYWxzZTtcblxuXHQvLyBvbmx5IHVzZWQgYnkgcmVuZGVyZXJzIHRoYXQgbmVlZCB0byByZW5kZXIgZ2VvbWV0cnkgdG8gdGV4dHVyZXNcblx0cHVibGljIF93aWR0aDpudW1iZXI7XG5cdHB1YmxpYyBfaGVpZ2h0Om51bWJlcjtcblxuXHRwdWJsaWMgdGV4dHVyZVJhdGlvWDpudW1iZXIgPSAxO1xuXHRwdWJsaWMgdGV4dHVyZVJhdGlvWTpudW1iZXIgPSAxO1xuXG5cdHByaXZhdGUgX3NuYXBzaG90Qml0bWFwRGF0YTpCaXRtYXBEYXRhO1xuXHRwcml2YXRlIF9zbmFwc2hvdFJlcXVpcmVkOmJvb2xlYW47XG5cblx0cHVibGljIF9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXg6TWF0cml4M0QgPSBuZXcgTWF0cml4M0QoKTtcblxuXHRwcml2YXRlIF9sb2NhbFBvczpQb2ludCA9IG5ldyBQb2ludCgpO1xuXHRwcml2YXRlIF9nbG9iYWxQb3M6UG9pbnQgPSBuZXcgUG9pbnQoKTtcblx0cHVibGljIF9wU2Npc3NvclJlY3Q6UmVjdGFuZ2xlID0gbmV3IFJlY3RhbmdsZSgpO1xuXG5cdHByaXZhdGUgX3NjaXNzb3JVcGRhdGVkOlJlbmRlcmVyRXZlbnQ7XG5cdHByaXZhdGUgX3ZpZXdQb3J0VXBkYXRlZDpSZW5kZXJlckV2ZW50O1xuXG5cdHByaXZhdGUgX29uQ29udGV4dFVwZGF0ZURlbGVnYXRlOkZ1bmN0aW9uO1xuXHRwcml2YXRlIF9vblZpZXdwb3J0VXBkYXRlZERlbGVnYXRlO1xuXG5cdHB1YmxpYyBfcE51bVRyaWFuZ2xlczpudW1iZXIgPSAwO1xuXG5cdHB1YmxpYyBfcE9wYXF1ZVJlbmRlcmFibGVIZWFkOlJlbmRlcmFibGVCYXNlO1xuXHRwdWJsaWMgX3BCbGVuZGVkUmVuZGVyYWJsZUhlYWQ6UmVuZGVyYWJsZUJhc2U7XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IG51bVRyaWFuZ2xlcygpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BOdW1UcmlhbmdsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyByZW5kZXJhYmxlU29ydGVyOklFbnRpdHlTb3J0ZXI7XG5cblxuXHQvKipcblx0ICogQSB2aWV3UG9ydCByZWN0YW5nbGUgZXF1aXZhbGVudCBvZiB0aGUgU3RhZ2Ugc2l6ZSBhbmQgcG9zaXRpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHZpZXdQb3J0KCk6UmVjdGFuZ2xlXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld1BvcnQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzY2lzc29yIHJlY3RhbmdsZSBlcXVpdmFsZW50IG9mIHRoZSB2aWV3IHNpemUgYW5kIHBvc2l0aW9uLlxuXHQgKi9cblx0cHVibGljIGdldCBzY2lzc29yUmVjdCgpOlJlY3RhbmdsZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX3BTY2lzc29yUmVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCB4KCk6bnVtYmVyXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxQb3MueDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgeCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy54ID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fZ2xvYmFsUG9zLnggPSB0aGlzLl9sb2NhbFBvcy54ID0gdmFsdWU7XG5cblx0XHR0aGlzLnVwZGF0ZUdsb2JhbFBvcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHkoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9sb2NhbFBvcy55O1xuXHR9XG5cblx0cHVibGljIHNldCB5KHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLnkgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9nbG9iYWxQb3MueSA9IHRoaXMuX2xvY2FsUG9zLnkgPSB2YWx1ZTtcblxuXHRcdHRoaXMudXBkYXRlR2xvYmFsUG9zKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdHB1YmxpYyBnZXQgd2lkdGgoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl93aWR0aDtcblx0fVxuXG5cdHB1YmxpYyBzZXQgd2lkdGgodmFsdWU6bnVtYmVyKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3dpZHRoID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fd2lkdGggPSB2YWx1ZTtcblx0XHR0aGlzLl9wU2Npc3NvclJlY3Qud2lkdGggPSB2YWx1ZTtcblxuXHRcdGlmICh0aGlzLl9wUnR0QnVmZmVyTWFuYWdlcilcblx0XHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLnZpZXdXaWR0aCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0XHR0aGlzLl9wRGVwdGhUZXh0dXJlSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLm5vdGlmeVNjaXNzb3JVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGdldCBoZWlnaHQoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9oZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IGhlaWdodCh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5faGVpZ2h0ID09IHZhbHVlKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5faGVpZ2h0ID0gdmFsdWU7XG5cdFx0dGhpcy5fcFNjaXNzb3JSZWN0LmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyKVxuXHRcdFx0dGhpcy5fcFJ0dEJ1ZmZlck1hbmFnZXIudmlld0hlaWdodCA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0XHR0aGlzLl9wRGVwdGhUZXh0dXJlSW52YWxpZCA9IHRydWU7XG5cblx0XHR0aGlzLm5vdGlmeVNjaXNzb3JVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IFJlbmRlcmVyQmFzZSBvYmplY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5fb25WaWV3cG9ydFVwZGF0ZWREZWxlZ2F0ZSA9IChldmVudDpTdGFnZUV2ZW50KSA9PiB0aGlzLm9uVmlld3BvcnRVcGRhdGVkKGV2ZW50KTtcblxuXHRcdHRoaXMuX2JpbGxib2FyZFJlbmRlcmFibGVQb29sID0gUmVuZGVyYWJsZVBvb2wuZ2V0UG9vbChCaWxsYm9hcmRSZW5kZXJhYmxlKTtcblx0XHR0aGlzLl90cmlhbmdsZVN1Yk1lc2hSZW5kZXJhYmxlUG9vbCA9IFJlbmRlcmFibGVQb29sLmdldFBvb2woVHJpYW5nbGVTdWJNZXNoUmVuZGVyYWJsZSk7XG5cdFx0dGhpcy5fbGluZVN1Yk1lc2hSZW5kZXJhYmxlUG9vbCA9IFJlbmRlcmFibGVQb29sLmdldFBvb2woTGluZVN1Yk1lc2hSZW5kZXJhYmxlKTtcblxuXHRcdHRoaXMuX29uQ29udGV4dFVwZGF0ZURlbGVnYXRlID0gKGV2ZW50OkV2ZW50KSA9PiB0aGlzLm9uQ29udGV4dFVwZGF0ZShldmVudCk7XG5cblx0XHQvL2RlZmF1bHQgc29ydGluZyBhbGdvcml0aG1cblx0XHR0aGlzLnJlbmRlcmFibGVTb3J0ZXIgPSBuZXcgUmVuZGVyYWJsZU1lcmdlU29ydCgpO1xuXHR9XG5cblx0cHVibGljIF9pQ3JlYXRlRW50aXR5Q29sbGVjdG9yKCk6SUNvbGxlY3RvclxuXHR7XG5cdFx0cmV0dXJuIG5ldyBFbnRpdHlDb2xsZWN0b3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvcidzIHJlZCBjb21wb25lbnQsIHVzZWQgd2hlbiBjbGVhcmluZy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHB1YmxpYyBnZXQgX2lCYWNrZ3JvdW5kUigpOm51bWJlclxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuX2JhY2tncm91bmRSO1xuXHR9XG5cblx0cHVibGljIHNldCBfaUJhY2tncm91bmRSKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9iYWNrZ3JvdW5kUiA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX2JhY2tncm91bmRSID0gdmFsdWU7XG5cblx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yJ3MgZ3JlZW4gY29tcG9uZW50LCB1c2VkIHdoZW4gY2xlYXJpbmcuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pQmFja2dyb3VuZEcoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kRztcblx0fVxuXG5cdHB1YmxpYyBzZXQgX2lCYWNrZ3JvdW5kRyh2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYmFja2dyb3VuZEcgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kRyA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYmFja2dyb3VuZCBjb2xvcidzIGJsdWUgY29tcG9uZW50LCB1c2VkIHdoZW4gY2xlYXJpbmcuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IF9pQmFja2dyb3VuZEIoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQjtcblx0fVxuXG5cdHB1YmxpYyBzZXQgX2lCYWNrZ3JvdW5kQih2YWx1ZTpudW1iZXIpXG5cdHtcblx0XHRpZiAodGhpcy5fYmFja2dyb3VuZEIgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kQiA9IHZhbHVlO1xuXG5cdFx0dGhpcy5fcEJhY2tCdWZmZXJJbnZhbGlkID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgU3RhZ2UgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIENvbnRleHRHTCB1c2VkIGZvciByZW5kZXJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN0YWdlKCk6U3RhZ2Vcblx0e1xuXHRcdHJldHVybiB0aGlzLl9wU3RhZ2U7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHN0YWdlKHZhbHVlOlN0YWdlKVxuXHR7XG5cdFx0aWYgKHZhbHVlID09IHRoaXMuX3BTdGFnZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuaVNldFN0YWdlKHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBpU2V0U3RhZ2UodmFsdWU6U3RhZ2UpXG5cdHtcblx0XHRpZiAodGhpcy5fcFN0YWdlKSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5DT05URVhUX1JFQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5WSUVXUE9SVF9VUERBVEVELCB0aGlzLl9vblZpZXdwb3J0VXBkYXRlZERlbGVnYXRlKTtcblx0XHR9XG5cblx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UgPSBudWxsO1xuXHRcdFx0dGhpcy5fcENvbnRleHQgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wU3RhZ2UgPSB2YWx1ZTtcblx0XHRcdHRoaXMuX3BTdGFnZS5hZGRFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuQ09OVEVYVF9DUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0XHR0aGlzLl9wU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LkNPTlRFWFRfUkVDUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0XHR0aGlzLl9wU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihTdGFnZUV2ZW50LlZJRVdQT1JUX1VQREFURUQsIHRoaXMuX29uVmlld3BvcnRVcGRhdGVkRGVsZWdhdGUpO1xuXG5cdFx0XHQvKlxuXHRcdFx0IGlmIChfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIpXG5cdFx0XHQgX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyLnN0YWdlID0gdmFsdWU7XG5cdFx0XHQgKi9cblx0XHRcdGlmICh0aGlzLl9wU3RhZ2UuY29udGV4dClcblx0XHRcdFx0dGhpcy5fcENvbnRleHQgPSA8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dDtcblx0XHR9XG5cblx0XHR0aGlzLl9wQmFja0J1ZmZlckludmFsaWQgPSB0cnVlO1xuXG5cdFx0dGhpcy51cGRhdGVHbG9iYWxQb3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZlcnMgY29udHJvbCBvZiBDb250ZXh0R0wgY2xlYXIoKSBhbmQgcHJlc2VudCgpIGNhbGxzIHRvIFN0YWdlLCBlbmFibGluZyBtdWx0aXBsZSBTdGFnZSBmcmFtZXdvcmtzXG5cdCAqIHRvIHNoYXJlIHRoZSBzYW1lIENvbnRleHRHTCBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHNoYXJlQ29udGV4dCgpOmJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLl9zaGFyZUNvbnRleHQ7XG5cdH1cblxuXHRwdWJsaWMgc2V0IHNoYXJlQ29udGV4dCh2YWx1ZTpib29sZWFuKVxuXHR7XG5cdFx0aWYgKHRoaXMuX3NoYXJlQ29udGV4dCA9PSB2YWx1ZSlcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3NoYXJlQ29udGV4dCA9IHZhbHVlO1xuXG5cdFx0dGhpcy51cGRhdGVHbG9iYWxQb3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwb3NlcyB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFJlbmRlcmVyQmFzZS5cblx0ICovXG5cdHB1YmxpYyBkaXNwb3NlKClcblx0e1xuXHRcdGlmICh0aGlzLl9wUnR0QnVmZmVyTWFuYWdlcilcblx0XHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyLmRpc3Bvc2UoKTtcblxuXHRcdHRoaXMuX3BSdHRCdWZmZXJNYW5hZ2VyID0gbnVsbDtcblxuXHRcdHRoaXMuX3BTdGFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuQ09OVEVYVF9DUkVBVEVELCB0aGlzLl9vbkNvbnRleHRVcGRhdGVEZWxlZ2F0ZSk7XG5cdFx0dGhpcy5fcFN0YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoU3RhZ2VFdmVudC5DT05URVhUX1JFQ1JFQVRFRCwgdGhpcy5fb25Db250ZXh0VXBkYXRlRGVsZWdhdGUpO1xuXHRcdHRoaXMuX3BTdGFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFN0YWdlRXZlbnQuVklFV1BPUlRfVVBEQVRFRCwgdGhpcy5fb25WaWV3cG9ydFVwZGF0ZWREZWxlZ2F0ZSk7XG5cblx0XHR0aGlzLl9wU3RhZ2UgPSBudWxsO1xuXG5cdFx0Lypcblx0XHQgaWYgKF9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcikge1xuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIgPSBudWxsO1xuXHRcdCB9XG5cdFx0ICovXG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yKVxuXHR7XG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IGZhbHNlO1xuXHRcdHRoaXMuX3NjaXNzb3JEaXJ0eSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbmRlcnMgdGhlIHBvdGVudGlhbGx5IHZpc2libGUgZ2VvbWV0cnkgdG8gdGhlIGJhY2sgYnVmZmVyIG9yIHRleHR1cmUuXG5cdCAqIEBwYXJhbSBlbnRpdHlDb2xsZWN0b3IgVGhlIEVudGl0eUNvbGxlY3RvciBvYmplY3QgY29udGFpbmluZyB0aGUgcG90ZW50aWFsbHkgdmlzaWJsZSBnZW9tZXRyeS5cblx0ICogQHBhcmFtIHRhcmdldCBBbiBvcHRpb24gdGFyZ2V0IHRleHR1cmUgdG8gcmVuZGVyIHRvLlxuXHQgKiBAcGFyYW0gc3VyZmFjZVNlbGVjdG9yIFRoZSBpbmRleCBvZiBhIEN1YmVUZXh0dXJlJ3MgZmFjZSB0byByZW5kZXIgdG8uXG5cdCAqIEBwYXJhbSBhZGRpdGlvbmFsQ2xlYXJNYXNrIEFkZGl0aW9uYWwgY2xlYXIgbWFzayBpbmZvcm1hdGlvbiwgaW4gY2FzZSBleHRyYSBjbGVhciBjaGFubmVscyBhcmUgdG8gYmUgb21pdHRlZC5cblx0ICovXG5cdHB1YmxpYyBfaVJlbmRlcihlbnRpdHlDb2xsZWN0b3I6SUNvbGxlY3RvciwgdGFyZ2V0OlRleHR1cmVQcm94eUJhc2UgPSBudWxsLCBzY2lzc29yUmVjdDpSZWN0YW5nbGUgPSBudWxsLCBzdXJmYWNlU2VsZWN0b3I6bnVtYmVyID0gMClcblx0e1xuXHRcdC8vVE9ETyByZWZhY3RvciBzZXRUYXJnZXQgc28gdGhhdCByZW5kZXJ0ZXh0dXJlcyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhpcyBjaGVja1xuXHRcdGlmICghdGhpcy5fcFN0YWdlIHx8ICF0aGlzLl9wQ29udGV4dClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuX3BSdHRWaWV3UHJvamVjdGlvbk1hdHJpeC5jb3B5RnJvbShlbnRpdHlDb2xsZWN0b3IuY2FtZXJhLnZpZXdQcm9qZWN0aW9uKTtcblx0XHR0aGlzLl9wUnR0Vmlld1Byb2plY3Rpb25NYXRyaXguYXBwZW5kU2NhbGUodGhpcy50ZXh0dXJlUmF0aW9YLCB0aGlzLnRleHR1cmVSYXRpb1ksIDEpO1xuXG5cdFx0dGhpcy5wRXhlY3V0ZVJlbmRlcihlbnRpdHlDb2xsZWN0b3IsIHRhcmdldCwgc2Npc3NvclJlY3QsIHN1cmZhY2VTZWxlY3Rvcik7XG5cblx0XHQvLyBnZW5lcmF0ZSBtaXAgbWFwcyBvbiB0YXJnZXQgKGlmIHRhcmdldCBleGlzdHMpIC8vVE9ET1xuXHRcdC8vaWYgKHRhcmdldClcblx0XHQvL1x0KDxUZXh0dXJlPnRhcmdldCkuZ2VuZXJhdGVNaXBtYXBzKCk7XG5cblx0XHQvLyBjbGVhciBidWZmZXJzXG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgODsgKytpKSB7XG5cdFx0XHR0aGlzLl9wQ29udGV4dC5zZXRWZXJ0ZXhCdWZmZXJBdChpLCBudWxsKTtcblx0XHRcdHRoaXMuX3BDb250ZXh0LnNldFRleHR1cmVBdChpLCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgX2lSZW5kZXJDYXNjYWRlcyhlbnRpdHlDb2xsZWN0b3I6U2hhZG93Q2FzdGVyQ29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSwgbnVtQ2FzY2FkZXM6bnVtYmVyLCBzY2lzc29yUmVjdHM6QXJyYXk8UmVjdGFuZ2xlPiwgY2FtZXJhczpBcnJheTxDYW1lcmE+KVxuXHR7XG5cblx0fVxuXG5cdHB1YmxpYyBwQ29sbGVjdFJlbmRlcmFibGVzKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yKVxuXHR7XG5cdFx0Ly9yZXNldCBoZWFkIHZhbHVlc1xuXHRcdHRoaXMuX3BCbGVuZGVkUmVuZGVyYWJsZUhlYWQgPSBudWxsO1xuXHRcdHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCA9IG51bGw7XG5cdFx0dGhpcy5fcE51bVRyaWFuZ2xlcyA9IDA7XG5cblx0XHQvL2dyYWIgZW50aXR5IGhlYWRcblx0XHR2YXIgaXRlbTpFbnRpdHlMaXN0SXRlbSA9IGVudGl0eUNvbGxlY3Rvci5lbnRpdHlIZWFkO1xuXG5cdFx0Ly9zZXQgdGVtcCB2YWx1ZXMgZm9yIGVudHJ5IHBvaW50IGFuZCBjYW1lcmEgZm9yd2FyZCB2ZWN0b3Jcblx0XHR0aGlzLl9wQ2FtZXJhID0gZW50aXR5Q29sbGVjdG9yLmNhbWVyYTtcblx0XHR0aGlzLl9pRW50cnlQb2ludCA9IHRoaXMuX3BDYW1lcmEuc2NlbmVQb3NpdGlvbjtcblx0XHR0aGlzLl9wQ2FtZXJhRm9yd2FyZCA9IHRoaXMuX3BDYW1lcmEudHJhbnNmb3JtLmZvcndhcmRWZWN0b3I7XG5cblx0XHQvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgZW50aXRpZXNcblx0XHR3aGlsZSAoaXRlbSkge1xuXHRcdFx0aXRlbS5lbnRpdHkuX2lDb2xsZWN0UmVuZGVyYWJsZXModGhpcyk7XG5cdFx0XHRpdGVtID0gaXRlbS5uZXh0O1xuXHRcdH1cblxuXHRcdC8vc29ydCB0aGUgcmVzdWx0aW5nIHJlbmRlcmFibGVzXG5cdFx0dGhpcy5fcE9wYXF1ZVJlbmRlcmFibGVIZWFkID0gPFJlbmRlcmFibGVCYXNlPiB0aGlzLnJlbmRlcmFibGVTb3J0ZXIuc29ydE9wYXF1ZVJlbmRlcmFibGVzKHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCk7XG5cdFx0dGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCA9IDxSZW5kZXJhYmxlQmFzZT4gdGhpcy5yZW5kZXJhYmxlU29ydGVyLnNvcnRCbGVuZGVkUmVuZGVyYWJsZXModGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVycyB0aGUgcG90ZW50aWFsbHkgdmlzaWJsZSBnZW9tZXRyeSB0byB0aGUgYmFjayBidWZmZXIgb3IgdGV4dHVyZS4gT25seSBleGVjdXRlZCBpZiBldmVyeXRoaW5nIGlzIHNldCB1cC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eUNvbGxlY3RvciBUaGUgRW50aXR5Q29sbGVjdG9yIG9iamVjdCBjb250YWluaW5nIHRoZSBwb3RlbnRpYWxseSB2aXNpYmxlIGdlb21ldHJ5LlxuXHQgKiBAcGFyYW0gdGFyZ2V0IEFuIG9wdGlvbiB0YXJnZXQgdGV4dHVyZSB0byByZW5kZXIgdG8uXG5cdCAqIEBwYXJhbSBzdXJmYWNlU2VsZWN0b3IgVGhlIGluZGV4IG9mIGEgQ3ViZVRleHR1cmUncyBmYWNlIHRvIHJlbmRlciB0by5cblx0ICogQHBhcmFtIGFkZGl0aW9uYWxDbGVhck1hc2sgQWRkaXRpb25hbCBjbGVhciBtYXNrIGluZm9ybWF0aW9uLCBpbiBjYXNlIGV4dHJhIGNsZWFyIGNoYW5uZWxzIGFyZSB0byBiZSBvbWl0dGVkLlxuXHQgKi9cblx0cHVibGljIHBFeGVjdXRlUmVuZGVyKGVudGl0eUNvbGxlY3RvcjpJQ29sbGVjdG9yLCB0YXJnZXQ6VGV4dHVyZVByb3h5QmFzZSA9IG51bGwsIHNjaXNzb3JSZWN0OlJlY3RhbmdsZSA9IG51bGwsIHN1cmZhY2VTZWxlY3RvcjpudW1iZXIgPSAwKVxuXHR7XG5cdFx0dGhpcy5fcENvbnRleHQuc2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgdHJ1ZSwgc3VyZmFjZVNlbGVjdG9yKTtcblxuXHRcdGlmICgodGFyZ2V0IHx8ICF0aGlzLl9zaGFyZUNvbnRleHQpICYmICF0aGlzLl9kZXB0aFByZXBhc3MpXG5cdFx0XHR0aGlzLl9wQ29udGV4dC5jbGVhcih0aGlzLl9iYWNrZ3JvdW5kUiwgdGhpcy5fYmFja2dyb3VuZEcsIHRoaXMuX2JhY2tncm91bmRCLCB0aGlzLl9iYWNrZ3JvdW5kQWxwaGEsIDEsIDApO1xuXG5cdFx0dGhpcy5fcENvbnRleHQuc2V0RGVwdGhUZXN0KGZhbHNlLCBDb250ZXh0R0xDb21wYXJlTW9kZS5BTFdBWVMpO1xuXG5cdFx0dGhpcy5fcFN0YWdlLnNjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7XG5cblx0XHQvKlxuXHRcdCBpZiAoX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyKVxuXHRcdCBfYmFja2dyb3VuZEltYWdlUmVuZGVyZXIucmVuZGVyKCk7XG5cdFx0ICovXG5cblx0XHR0aGlzLnBEcmF3KGVudGl0eUNvbGxlY3RvciwgdGFyZ2V0KTtcblxuXHRcdC8vbGluZSByZXF1aXJlZCBmb3IgY29ycmVjdCByZW5kZXJpbmcgd2hlbiB1c2luZyBhd2F5M2Qgd2l0aCBzdGFybGluZy4gRE8gTk9UIFJFTU9WRSBVTkxFU1MgU1RBUkxJTkcgSU5URUdSQVRJT04gSVMgUkVURVNURUQhXG5cdFx0Ly90aGlzLl9wQ29udGV4dC5zZXREZXB0aFRlc3QoZmFsc2UsIENvbnRleHRHTENvbXBhcmVNb2RlLkxFU1NfRVFVQUwpOyAvL29vcHNpZVxuXG5cdFx0aWYgKCF0aGlzLl9zaGFyZUNvbnRleHQpIHtcblx0XHRcdGlmICh0aGlzLl9zbmFwc2hvdFJlcXVpcmVkICYmIHRoaXMuX3NuYXBzaG90Qml0bWFwRGF0YSkge1xuXHRcdFx0XHR0aGlzLl9wQ29udGV4dC5kcmF3VG9CaXRtYXBEYXRhKHRoaXMuX3NuYXBzaG90Qml0bWFwRGF0YSk7XG5cdFx0XHRcdHRoaXMuX3NuYXBzaG90UmVxdWlyZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9wU3RhZ2Uuc2Npc3NvclJlY3QgPSBudWxsO1xuXHR9XG5cblx0Lypcblx0ICogV2lsbCBkcmF3IHRoZSByZW5kZXJlcidzIG91dHB1dCBvbiBuZXh0IHJlbmRlciB0byB0aGUgcHJvdmlkZWQgYml0bWFwIGRhdGEuXG5cdCAqICovXG5cdHB1YmxpYyBxdWV1ZVNuYXBzaG90KGJtZDpCaXRtYXBEYXRhKVxuXHR7XG5cdFx0dGhpcy5fc25hcHNob3RSZXF1aXJlZCA9IHRydWU7XG5cdFx0dGhpcy5fc25hcHNob3RCaXRtYXBEYXRhID0gYm1kO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgZHJhd2luZyBvZiBnZW9tZXRyeSB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gZW50aXR5Q29sbGVjdG9yIFRoZSBFbnRpdHlDb2xsZWN0b3Igb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBvdGVudGlhbGx5IHZpc2libGUgZ2VvbWV0cnkuXG5cdCAqL1xuXHRwdWJsaWMgcERyYXcoZW50aXR5Q29sbGVjdG9yOklDb2xsZWN0b3IsIHRhcmdldDpUZXh0dXJlUHJveHlCYXNlKVxuXHR7XG5cdFx0dGhyb3cgbmV3IEFic3RyYWN0TWV0aG9kRXJyb3IoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3NpZ24gdGhlIGNvbnRleHQgb25jZSByZXRyaWV2ZWRcblx0ICovXG5cdHByaXZhdGUgb25Db250ZXh0VXBkYXRlKGV2ZW50OkV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fcENvbnRleHQgPSA8SUNvbnRleHRTdGFnZUdMPiB0aGlzLl9wU3RhZ2UuY29udGV4dDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgX2lCYWNrZ3JvdW5kQWxwaGEoKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQWxwaGE7XG5cdH1cblxuXHRwdWJsaWMgc2V0IF9pQmFja2dyb3VuZEFscGhhKHZhbHVlOm51bWJlcilcblx0e1xuXHRcdGlmICh0aGlzLl9iYWNrZ3JvdW5kQWxwaGEgPT0gdmFsdWUpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9iYWNrZ3JvdW5kQWxwaGEgPSB2YWx1ZTtcblxuXHRcdHRoaXMuX3BCYWNrQnVmZmVySW52YWxpZCA9IHRydWU7XG5cdH1cblxuXHQvKlxuXHQgcHVibGljIGdldCBpQmFja2dyb3VuZCgpOlRleHR1cmUyREJhc2Vcblx0IHtcblx0IHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kO1xuXHQgfVxuXHQgKi9cblxuXHQvKlxuXHQgcHVibGljIHNldCBpQmFja2dyb3VuZCh2YWx1ZTpUZXh0dXJlMkRCYXNlKVxuXHQge1xuXHQgaWYgKHRoaXMuX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyICYmICF2YWx1ZSkge1xuXHQgdGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIuZGlzcG9zZSgpO1xuXHQgdGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIgPSBudWxsO1xuXHQgfVxuXG5cdCBpZiAoIXRoaXMuX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyICYmIHZhbHVlKVxuXHQge1xuXG5cdCB0aGlzLl9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlciA9IG5ldyBCYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcih0aGlzLl9wU3RhZ2UpO1xuXG5cdCB9XG5cblxuXHQgdGhpcy5fYmFja2dyb3VuZCA9IHZhbHVlO1xuXG5cdCBpZiAodGhpcy5fYmFja2dyb3VuZEltYWdlUmVuZGVyZXIpXG5cdCB0aGlzLl9iYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlci50ZXh0dXJlID0gdmFsdWU7XG5cdCB9XG5cdCAqL1xuXHQvKlxuXHQgcHVibGljIGdldCBiYWNrZ3JvdW5kSW1hZ2VSZW5kZXJlcigpOkJhY2tncm91bmRJbWFnZVJlbmRlcmVyXG5cdCB7XG5cdCByZXR1cm4gX2JhY2tncm91bmRJbWFnZVJlbmRlcmVyO1xuXHQgfVxuXHQgKi9cblxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBub3RpZnlTY2lzc29yVXBkYXRlKClcblx0e1xuXHRcdGlmICh0aGlzLl9zY2lzc29yRGlydHkpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLl9zY2lzc29yRGlydHkgPSB0cnVlO1xuXG5cdFx0aWYgKCF0aGlzLl9zY2lzc29yVXBkYXRlZClcblx0XHRcdHRoaXMuX3NjaXNzb3JVcGRhdGVkID0gbmV3IFJlbmRlcmVyRXZlbnQoUmVuZGVyZXJFdmVudC5TQ0lTU09SX1VQREFURUQpO1xuXG5cdFx0dGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuX3NjaXNzb3JVcGRhdGVkKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIG5vdGlmeVZpZXdwb3J0VXBkYXRlKClcblx0e1xuXHRcdGlmICh0aGlzLl92aWV3cG9ydERpcnR5KVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5fdmlld3BvcnREaXJ0eSA9IHRydWU7XG5cblx0XHRpZiAoIXRoaXMuX3ZpZXdQb3J0VXBkYXRlZClcblx0XHRcdHRoaXMuX3ZpZXdQb3J0VXBkYXRlZCA9IG5ldyBSZW5kZXJlckV2ZW50KFJlbmRlcmVyRXZlbnQuVklFV1BPUlRfVVBEQVRFRCk7XG5cblx0XHR0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5fdmlld1BvcnRVcGRhdGVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIG9uVmlld3BvcnRVcGRhdGVkKGV2ZW50OlN0YWdlRXZlbnQpXG5cdHtcblx0XHR0aGlzLl92aWV3UG9ydCA9IHRoaXMuX3BTdGFnZS52aWV3UG9ydDtcblx0XHQvL1RPRE8gc3RvcCBmaXJpbmcgdmlld3BvcnQgdXBkYXRlZCBmb3IgZXZlcnkgc3RhZ2VnbCB2aWV3cG9ydCBjaGFuZ2VcblxuXHRcdGlmICh0aGlzLl9zaGFyZUNvbnRleHQpIHtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC54ID0gdGhpcy5fZ2xvYmFsUG9zLnggLSB0aGlzLl9wU3RhZ2UueDtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC55ID0gdGhpcy5fZ2xvYmFsUG9zLnkgLSB0aGlzLl9wU3RhZ2UueTtcblx0XHRcdHRoaXMubm90aWZ5U2Npc3NvclVwZGF0ZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMubm90aWZ5Vmlld3BvcnRVcGRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHVwZGF0ZUdsb2JhbFBvcygpXG5cdHtcblx0XHRpZiAodGhpcy5fc2hhcmVDb250ZXh0KSB7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueCA9IHRoaXMuX2dsb2JhbFBvcy54IC0gdGhpcy5fdmlld1BvcnQueDtcblx0XHRcdHRoaXMuX3BTY2lzc29yUmVjdC55ID0gdGhpcy5fZ2xvYmFsUG9zLnkgLSB0aGlzLl92aWV3UG9ydC55O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueCA9IDA7XG5cdFx0XHR0aGlzLl9wU2Npc3NvclJlY3QueSA9IDA7XG5cdFx0XHR0aGlzLl92aWV3UG9ydC54ID0gdGhpcy5fZ2xvYmFsUG9zLng7XG5cdFx0XHR0aGlzLl92aWV3UG9ydC55ID0gdGhpcy5fZ2xvYmFsUG9zLnk7XG5cdFx0fVxuXG5cdFx0dGhpcy5ub3RpZnlTY2lzc29yVXBkYXRlKCk7XG5cdH1cblxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYmlsbGJvYXJkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHB1YmxpYyBhcHBseUJpbGxib2FyZChiaWxsYm9hcmQ6QmlsbGJvYXJkKVxuXHR7XG5cdFx0dGhpcy5fYXBwbHlSZW5kZXJhYmxlKDxSZW5kZXJhYmxlQmFzZT4gdGhpcy5fYmlsbGJvYXJkUmVuZGVyYWJsZVBvb2wuZ2V0SXRlbShiaWxsYm9hcmQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gdHJpYW5nbGVTdWJNZXNoXG5cdCAqL1xuXHRwdWJsaWMgYXBwbHlUcmlhbmdsZVN1Yk1lc2godHJpYW5nbGVTdWJNZXNoOlRyaWFuZ2xlU3ViTWVzaClcblx0e1xuXHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZSg8UmVuZGVyYWJsZUJhc2U+IHRoaXMuX3RyaWFuZ2xlU3ViTWVzaFJlbmRlcmFibGVQb29sLmdldEl0ZW0odHJpYW5nbGVTdWJNZXNoKSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGxpbmVTdWJNZXNoXG5cdCAqL1xuXHRwdWJsaWMgYXBwbHlMaW5lU3ViTWVzaChsaW5lU3ViTWVzaDpMaW5lU3ViTWVzaClcblx0e1xuXHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZSg8UmVuZGVyYWJsZUJhc2U+IHRoaXMuX2xpbmVTdWJNZXNoUmVuZGVyYWJsZVBvb2wuZ2V0SXRlbShsaW5lU3ViTWVzaCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSByZW5kZXJhYmxlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdHByaXZhdGUgX2FwcGx5UmVuZGVyYWJsZShyZW5kZXJhYmxlOlJlbmRlcmFibGVCYXNlKVxuXHR7XG5cdFx0dmFyIG1hdGVyaWFsOk1hdGVyaWFsQmFzZSA9IHJlbmRlcmFibGUubWF0ZXJpYWxPd25lci5tYXRlcmlhbDtcblx0XHR2YXIgZW50aXR5OklFbnRpdHkgPSByZW5kZXJhYmxlLnNvdXJjZUVudGl0eTtcblx0XHR2YXIgcG9zaXRpb246VmVjdG9yM0QgPSBlbnRpdHkuc2NlbmVQb3NpdGlvbjtcblxuXHRcdGlmICghbWF0ZXJpYWwpXG5cdFx0XHRtYXRlcmlhbCA9IERlZmF1bHRNYXRlcmlhbE1hbmFnZXIuZ2V0RGVmYXVsdE1hdGVyaWFsKHJlbmRlcmFibGUubWF0ZXJpYWxPd25lcik7XG5cblx0XHQvL3VwZGF0ZSBtYXRlcmlhbCBpZiBpbnZhbGlkYXRlZFxuXHRcdG1hdGVyaWFsLl9pVXBkYXRlTWF0ZXJpYWwoKTtcblxuXHRcdC8vc2V0IGlkcyBmb3IgZmFzdGVyIHJlZmVyZW5jaW5nXG5cdFx0cmVuZGVyYWJsZS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHJlbmRlcmFibGUubWF0ZXJpYWxJZCA9IG1hdGVyaWFsLl9pTWF0ZXJpYWxJZDtcblx0XHRyZW5kZXJhYmxlLnJlbmRlck9yZGVySWQgPSB0aGlzLl9wQ29udGV4dC5nZXRNYXRlcmlhbChtYXRlcmlhbCwgdGhpcy5fcFN0YWdlLnByb2ZpbGUpLnJlbmRlck9yZGVySWQ7XG5cdFx0cmVuZGVyYWJsZS5jYXNjYWRlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gcHJvamVjdCBvbnRvIGNhbWVyYSdzIHotYXhpc1xuXHRcdHBvc2l0aW9uID0gdGhpcy5faUVudHJ5UG9pbnQuc3VidHJhY3QocG9zaXRpb24pO1xuXHRcdHJlbmRlcmFibGUuekluZGV4ID0gZW50aXR5LnpPZmZzZXQgKyBwb3NpdGlvbi5kb3RQcm9kdWN0KHRoaXMuX3BDYW1lcmFGb3J3YXJkKTtcblxuXHRcdC8vc3RvcmUgcmVmZXJlbmNlIHRvIHNjZW5lIHRyYW5zZm9ybVxuXHRcdHJlbmRlcmFibGUucmVuZGVyU2NlbmVUcmFuc2Zvcm0gPSByZW5kZXJhYmxlLnNvdXJjZUVudGl0eS5nZXRSZW5kZXJTY2VuZVRyYW5zZm9ybSh0aGlzLl9wQ2FtZXJhKTtcblxuXHRcdGlmIChtYXRlcmlhbC5yZXF1aXJlc0JsZW5kaW5nKSB7XG5cdFx0XHRyZW5kZXJhYmxlLm5leHQgPSB0aGlzLl9wQmxlbmRlZFJlbmRlcmFibGVIZWFkO1xuXHRcdFx0dGhpcy5fcEJsZW5kZWRSZW5kZXJhYmxlSGVhZCA9IHJlbmRlcmFibGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbmRlcmFibGUubmV4dCA9IHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZDtcblx0XHRcdHRoaXMuX3BPcGFxdWVSZW5kZXJhYmxlSGVhZCA9IHJlbmRlcmFibGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcE51bVRyaWFuZ2xlcyArPSByZW5kZXJhYmxlLm51bVRyaWFuZ2xlcztcblxuXHRcdC8vaGFuZGxlIGFueSBvdmVyZmxvdyBmb3IgcmVuZGVyYWJsZXMgd2l0aCBkYXRhIHRoYXQgZXhjZWVkcyBHUFUgbGltaXRhdGlvbnNcblx0XHRpZiAocmVuZGVyYWJsZS5vdmVyZmxvdylcblx0XHRcdHRoaXMuX2FwcGx5UmVuZGVyYWJsZShyZW5kZXJhYmxlLm92ZXJmbG93KTtcblx0fVxufVxuXG5leHBvcnQgPSBSZW5kZXJlckJhc2U7Il19 \ No newline at end of file diff --git a/lib/core/render/RendererBase.ts b/lib/render/RendererBase.ts similarity index 96% rename from lib/core/render/RendererBase.ts rename to lib/render/RendererBase.ts index a9d1a597..af1987c0 100644 --- a/lib/core/render/RendererBase.ts +++ b/lib/render/RendererBase.ts @@ -9,7 +9,7 @@ import TextureProxyBase = require("awayjs-core/lib/textures/TextureProxyBase" import LineSubMesh = require("awayjs-display/lib/base/LineSubMesh"); import TriangleSubMesh = require("awayjs-display/lib/base/TriangleSubMesh"); -import Stage = require("awayjs-stagegl/lib/core/base/Stage"); +import Stage = require("awayjs-stagegl/lib/base/Stage"); import EntityListItem = require("awayjs-display/lib/pool/EntityListItem"); import RenderablePool = require("awayjs-display/lib/pool/RenderablePool"); import IEntitySorter = require("awayjs-display/lib/sort/IEntitySorter"); @@ -28,12 +28,12 @@ import EntityCollector = require("awayjs-display/lib/traverse/EntityCollector import ICollector = require("awayjs-display/lib/traverse/ICollector"); import ShadowCasterCollector = require("awayjs-display/lib/traverse/ShadowCasterCollector"); -import BillboardRenderable = require("awayjs-stagegl/lib/core/pool/BillboardRenderable"); -import LineSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/LineSubMeshRenderable"); -import RenderableBase = require("awayjs-stagegl/lib/core/pool/RenderableBase"); -import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/core/pool/TriangleSubMeshRenderable"); -import ContextGLCompareMode = require("awayjs-stagegl/lib/core/stagegl/ContextGLCompareMode"); -import IContextStageGL = require("awayjs-stagegl/lib/core/stagegl/IContextStageGL"); +import BillboardRenderable = require("awayjs-stagegl/lib/pool/BillboardRenderable"); +import LineSubMeshRenderable = require("awayjs-stagegl/lib/pool/LineSubMeshRenderable"); +import RenderableBase = require("awayjs-stagegl/lib/pool/RenderableBase"); +import TriangleSubMeshRenderable = require("awayjs-stagegl/lib/pool/TriangleSubMeshRenderable"); +import ContextGLCompareMode = require("awayjs-stagegl/lib/base/ContextGLCompareMode"); +import IContextStageGL = require("awayjs-stagegl/lib/base/IContextStageGL"); import RTTBufferManager = require("awayjs-stagegl/lib/managers/RTTBufferManager"); import DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager");