@maptalks/video-layer
Advanced tools
| /*! | ||
| * @maptalks/video-layer v0.122.0 | ||
| * @maptalks/video-layer v0.123.0 | ||
| * LICENSE : UNLICENSED | ||
| * (c) 2016-2026 maptalks.org | ||
| */ | ||
| import*as e from"maptalks";import{Eventable as t,Handlerable as r,Class as i,DrawToolLayer as o,Polygon as n,Layer as s}from"maptalks";import{CanvasCompatible as a,reshader as d,mat4 as l,quat as c}from"@maptalks/gl"; | ||
| import*as e from"maptalks";import{Eventable as t,Handlerable as r,Class as i,DrawToolLayer as o,Polygon as s,Layer as n}from"maptalks";import{CanvasCompatible as a,reshader as d,getWGSLSource as l,mat4 as h,quat as c}from"@maptalks/gl"; | ||
| /*! | ||
@@ -11,3 +11,3 @@ * Contains code from THREE.js | ||
| * https://github.com/mrdoob/three.js | ||
| */for(var h=[],u=0;u<6;u++)h[u]=[];var p=[];function g(e,t,r){var i,o,n,s,a,d,l,c,u,g,f,_,y,x,w,S,M;o=(i=e)[0],n=i[1],s=i[2],a=i[3],d=i[4],l=i[5],c=i[6],u=i[7],g=i[8],f=i[9],_=i[10],y=i[11],x=i[12],w=i[13],S=i[14],M=i[15],m(h[0],a-o,u-d,y-g,M-x),m(h[1],a+o,u+d,y+g,M+x),m(h[2],a+n,u+l,y+f,M+w),m(h[3],a-n,u-l,y-f,M-w),m(h[4],a-s,u-c,y-_,M-S),m(h[5],a+s,u+c,y+_,M+S);for(var b=0;b<6;b++){var C=h[b];if(p[0]=C[0]>0?t[1][0]:t[0][0],p[1]=C[1]>0?t[1][1]:t[0][1],p[2]=C[2]>0?t[1][2]:t[0][2],v(C,p)<0)return!1}return!0}function m(e,t,r,i,o){var n=1/Math.sqrt(t*t+r*r+i*i);return e[0]=t*n,e[1]=r*n,e[2]=i*n,e[3]=o*n,e}function v(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]}const f={name:"video-layer",vert:"attribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 projViewModelMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 modelMatrix;\nvarying vec2 vTexCoords;\n#include <get_output>\nvoid main()\n{\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localPosition = getPosition(aPosition);\n gl_Position = projViewModelMatrix * localPositionMatrix * localPosition;\n vTexCoords = aTexCoord;\n}",frag:"precision mediump float;\nuniform sampler2D videoTexture;\nuniform float opacity;\nvarying vec2 vTexCoords;\nvoid main() {\n vec4 color = texture2D(videoTexture, vTexCoords);\n gl_FragColor = color * opacity;\n}",wgslVert:"#include <get_output>\nstruct Uniforms {\n modelMatrix: mat4x4f,\n positionMatrix: mat4x4f,\n projViewModelMatrix: mat4x4f,\n};\n@group(0) @binding($b) var<uniform> uniforms: Uniforms;\nstruct VertexInput {\n @location($i) aPosition: vec3f,\n @location($i) aTexCoord: vec2f,\n};\nstruct VertexOutput {\n @builtin(position) position: vec4f,\n @location($o) vTexCoords: vec2f,\n};\n@vertex\nfn main(vertexInput: VertexInput) -> VertexOutput {\n var output: VertexOutput;\n let localPositionMatrix: mat4x4f = getPositionMatrix(vertexInput, &output, uniforms.positionMatrix);\n let localPosition: vec4f = getPosition(vec3f(vertexInput.aPosition.xyz), vertexInput);\n output.vTexCoords = vertexInput.aTexCoord;\n output.position = uniforms.projViewModelMatrix * localPositionMatrix * localPosition;\n return output;\n}",wgslFrag:"struct FragUniforms {\n opacity: f32\n}\n@group(0) @binding($b) var videoTexture: texture_2d<f32>;\n@group(0) @binding($b) var videoTextureSampler: sampler;\n@group(0) @binding($b) var<uniform> fragUniforms: FragUniforms;\n@fragment\nfn main(vertexOutput: VertexOutput) -> @location(0) vec4f {\n let color = textureSample(videoTexture, videoTextureSampler, vertexOutput.vTexCoords);\n return color * fragUniforms.opacity;\n}",uniforms:[{name:"projViewModelMatrix",type:"function",fn:(e,t)=>l.multiply([],t.projViewMatrix,t.modelMatrix)},"texture","opacity"],positionAttribute:"POSITION",extraCommandProps:{depth:{enable:!0,func:"always"},cull:{enable:!1,face:"back"},frontFace:"cw",blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"},equation:"add"}}},_=[1,0,3,3,2,1];class y extends(a(e.renderer.LayerAbstractRenderer)){constructor(e){super(e),this._scenes={}}draw(e,t){this.prepareCanvas(),this._renderScene(t)}drawOnInteracting(e,t,r){this._renderScene(r)}needToRedraw(){return!0}hitDetect(){return!1}initContext(){super.initContext();const{regl:e,device:t,reglGL:r}=this.context;this.regl=e||t,this.gl=r,this.device=e||t,this._initShader(),this._initRenderer();const i=this.layer.getVideoSurfaces();for(let e=0;e<i.length;e++)this._createScene(i[e])}_createGLContext(e,t){const r=["webgl","experimental-webgl"];let i=null;for(let o=0;o<r.length;++o){try{i=e.getContext(r[o],t)}catch(e){}if(i)break}return i}_initRenderer(){const e=this.layer.getMap(),t=new d.Renderer(this.regl);this.renderer=t,this._uniforms={projMatrix:e.projMatrix,projViewMatrix:e.projViewMatrix,viewMatrix:e.viewMatrix,halton:[.2107,-.0202],uHalton:[.2107,-.0202],uCameraPosition:e.cameraPosition,cameraPosition:e.cameraPosition,globalTexSize:[e.width,e.height]}}_getRegl(){return this.regl}_initShader(){this.viewport={x:0,y:0,width:()=>this.canvas?this.canvas.width:1,height:()=>this.canvas?this.canvas.height:1},this._updateShader()}_updateShader(){this._shader&&this._shader.dispose(),this.layer.options.showTopAlways?(f.extraCommandProps.depth.mask=!1,f.extraCommandProps.depth.range=[0,0]):(delete f.extraCommandProps.depth.mask,delete f.extraCommandProps.depth.range),f.extraCommandProps.cull.enable=!this.layer.options.doubleSide,this._shader=new d.MeshShader(f)}_createScene(e){const t=this.device.texture(),r=new d.Material({videoTexture:t,opacity:1}),i=e.getCoordinates(),{worldCenter:o,points:n}=this._transformCoordToWorld(i),s=this._createGeometry(n),a=new d.Mesh(s,r);this._updateMatrix(a,o);const l=new d.Scene(a),c=e._getVideoId();this._scenes[c]=l}_updateCoordinates(e){const t=e._getVideoId(),r=this._scenes[t].getMeshes()[0],i=e.getCoordinates();r.geometry.dispose();const{worldCenter:o,points:n}=this._transformCoordToWorld(i),s=this._createGeometry(n);r.geometry=s,this._updateMatrix(r,o)}_renderScene(e){const t=this.layer.getVideoSurfaces().filter((e=>e.isVisible()));if(!t.length)return;const r=this._createSceneInFrustum(t);if(!r)return;let i=null;e&&(i=e.renderTarget&&e.renderTarget.fbo),this.renderer.render(this._shader,this._uniforms,r,i)}_createGeometry(e){const t=new d.Geometry({POSITION:new Float32Array(e),TEXCOORD:new Float32Array([0,0,1,0,1,1,0,1])},new Uint16Array(_),0,{primitive:"triangles",positionAttribute:"POSITION",uv0Attribute:"TEXCOORD",normalAttribute:"NORMAL",positionSize:3});return t.generateBuffers(this.device),t}_transformCoordToWorld(t){let r=[];const i=this.getMap(),o=new e.Polygon(t).getCenter(),n=x(i,o,0);return this._worldCenter=n,i&&t.forEach((t=>{const o=new e.Coordinate(t[0],t[1]),s=i.altitudeToPoint(t[2]||0,i.getGLRes()),a=x(i,o,s);a[0]=a[0]-n[0],a[1]=a[1]-n[1],r=r.concat(a)})),{worldCenter:n,points:r}}_createSceneInFrustum(e){const t=[],r=this.layer.getMap();for(let i=0;i<e.length;i++){const o=e[i],n=this._scenes[o._getVideoId()];if(!n)continue;const s=n.getMeshes();for(let e=0;e<s.length;e++){const i=s[e],n=i.getMaterial(),a=n.get("videoTexture");a&&o._canDrawing()&&(a.update?a.update({data:o.video}):a(o.video),n.set("opacity",o.getOpacity())),g(r.projViewMatrix,i.getBoundingBox())&&t.push(i)}}return t.length?new d.Scene(t):null}_updateMatrix(e,t){l.fromRotationTranslationScale(e.localTransform,c.fromEuler([],0,0,0),t,[1,1,1])}remove(){this._shader&&this._shader.dispose(),super.remove()}_deleteScene(e){const t=this._scenes[e];if(!t)return;t.getMeshes().forEach((e=>{e.geometry.dispose(),e.material&&e.material.dispose(),e.dispose()}))}}function x(e,t,r){if(!e)return null;const i=e.coordinateToPointAtRes(t,e.getGLRes());return[i.x,i.y,r]}class w extends(t(r(i))){constructor(e,t){super(t),this.setCoordinates(e),this._createVideo()}setCoordinates(e){this._coordinates=e}getCoordinates(){return this._coordinates}setVideo(e){this._videoState="stop",this.options.url=e,delete this.options.elementId,this._createVideo()}setElementId(e){this._videoState="stop",this.options.elementId=e,delete this.options.url,this._createVideo()}_createVideo(){this._videoState="stop";const e=this.options.url,t=this.options.elementId;let r=document.getElementById(t);if(e&&(r=document.createElement("video"),r.src=e),!r)throw new Error("there is no element or url setting for video mask");r.autoplay=!0,r.loop=!0,r.muted=!0,r.play(),r.addEventListener("playing",(()=>{this._videoState="playing",this.fire("playing",{state:this._videoState,url:e})})),r.addEventListener("pause",(()=>{this._videoState="pause",this.fire("pause",{state:this._videoState,url:e})})),r.addEventListener("error",(()=>{throw this._videoState="pause",this.fire("error",{state:this._videoState,url:e}),new Error("video resource load error")})),this.video=r}getVideo(){return this.video}_setVideoId(e){this._videoId=e}_getVideoId(){return this._videoId}addTo(e){if(this._layer)throw new Error("VideoSurface cannot be added to two or more layers at the same time.");return e.addSurfaces(this),this}show(){return this.options.visible=!0,this}hide(){return this.options.visible=!1,this}isVisible(){return this.options.visible}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}setAudio(e){this.video.muted=e}setOpacity(e){this.options.opacity=e}getOpacity(){return this.options.opacity}remove(){delete this.video;const e=this.getLayer();e&&e.removeVideoSurfaces(this),this.endEdit()}getLayer(){return this._layer}_canDrawing(){return"playing"===this._videoState}startEdit(){const e=this.getLayer();if(!e)return void console.warn("videosurface should be added to a map before edit");const t=e.getMap();if(!t)return void console.warn("videosurface should be added to a map before edit");if(this._clearEditHelper(),!this._editHelpLayer){const r=e.getId();this._editHelpLayer=new o(`internal_${r}_edit`).addTo(t)}const r=this.getCoordinates();this._editHelpPolygon=new n(r,{symbol:{lineColor:"#34495e",lineWidth:2,polygonFill:"rgb(135,196,240)",polygonOpacity:.1}}).addTo(this._editHelpLayer),this._editHelpPolygon.startEdit({newVertexHandleSymbol:{polygonFill:"rgba(0, 0, 0, 0)",polygonOpacity:0,markerType:"ellipse",markerWidth:1,markerHeight:1}}),this._editHelpPolygon.on("shapechange",(t=>{const r=t.target.getCoordinates()[0].slice(0,4).map((e=>[e.x,e.y,0]));this.setCoordinates(r);e.getRenderer()._updateCoordinates(this)}),this)}endEdit(){this._editHelpLayer&&(this._editHelpPolygon.endEdit(),this._editHelpPolygon.remove(),this._editHelpLayer.remove()),delete this._editHelpLayer,delete this._editHelpPolygon}_clearEditHelper(){this._editHelpLayer&&this._editHelpLayer.clear(),delete this._editHelpPolygon}}w.mergeOptions({opacity:1,visible:!0});class S extends s{constructor(e,t,r){!t||Array.isArray(t)||t instanceof w||(r=t,t=null),super(e,r),this._videoSurfaceMap={},this.videoId=0,this._videoSurfaceMap={},this.videoId=0,t&&this.addSurfaces(t)}addSurfaces(e){if(e)if(Array.isArray(e))e.forEach((e=>{this.addSurfaces(e)}));else{e._layer=this,this._videoSurfaceMap[this.videoId]=e,e._setVideoId(this.videoId);const t=this.getRenderer();t?t._getRegl()&&t._createScene(e):this.on("renderercreate",(t=>{t.renderer._getRegl()&&t.renderer._createScene(e)})),this.videoId++}}showTopAlways(e){this.options.showTopAlways=e;const t=this.getRenderer();t&&t._updateShader()}setDoubleSide(e){this.options.doubleSide=e;const t=this.getRenderer();t&&t._updateShader()}getVideoSurfaces(){const e=[];for(const t in this._videoSurfaceMap)e.push(this._videoSurfaceMap[t]);return e}removeVideoSurfaces(e){if(Array.isArray(e))e.forEach((e=>{this.removeVideoSurfaces(e)}));else{const t=e._getVideoId(),r=this.getRenderer();r&&r._deleteScene(t),delete this._videoSurfaceMap[t]}}remove(){this.clear(),super.remove()}clear(){const e=this.getVideoSurfaces();for(let t=0;t<e.length;t++)e[t].remove()}}S.mergeOptions({renderer:"gl",doubleBuffer:!1,glOptions:null,markerEvents:!0,forceRenderOnZooming:!0,forceRenderOnMoving:!0,forceRenderOnRotating:!0,showTopAlways:!0,doubleSide:!0}),S.registerJSONType("VideoLayer"),S.registerRenderer("gl",y),S.registerRenderer("gpu",y);export{S as VideoLayer,w as VideoSurface};"undefined"!=typeof console&&console.log("@maptalks/video-layer v0.122.0"); | ||
| */for(var p=[],u=0;u<6;u++)p[u]=[];var g=[];function _(e,t,r){var i,o,s,n,a,d,l,h,c,u,_,f,y,w,S,x,M;o=(i=e)[0],s=i[1],n=i[2],a=i[3],d=i[4],l=i[5],h=i[6],c=i[7],u=i[8],_=i[9],f=i[10],y=i[11],w=i[12],S=i[13],x=i[14],M=i[15],m(p[0],a-o,c-d,y-u,M-w),m(p[1],a+o,c+d,y+u,M+w),m(p[2],a+s,c+l,y+_,M+S),m(p[3],a-s,c-l,y-_,M-S),m(p[4],a-n,c-h,y-f,M-x),m(p[5],a+n,c+h,y+f,M+x);for(var C=0;C<6;C++){var b=p[C];if(g[0]=b[0]>0?t[1][0]:t[0][0],g[1]=b[1]>0?t[1][1]:t[0][1],g[2]=b[2]>0?t[1][2]:t[0][2],v(b,g)<0)return!1}return!0}function m(e,t,r,i,o){var s=1/Math.sqrt(t*t+r*r+i*i);return e[0]=t*s,e[1]=r*s,e[2]=i*s,e[3]=o*s,e}function v(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]}const f={name:"video-layer",vert:"attribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 projViewModelMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 modelMatrix;\nvarying vec2 vTexCoords;\n#include <get_output>\nvoid main()\n{\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localPosition = getPosition(aPosition);\n gl_Position = projViewModelMatrix * localPositionMatrix * localPosition;\n vTexCoords = aTexCoord;\n}",frag:"precision mediump float;\nuniform sampler2D videoTexture;\nuniform float opacity;\nvarying vec2 vTexCoords;\nvoid main() {\n vec4 color = texture2D(videoTexture, vTexCoords);\n gl_FragColor = color * opacity;\n}",uniforms:[{name:"projViewModelMatrix",type:"function",fn:(e,t)=>h.multiply([],t.projViewMatrix,t.modelMatrix)},"texture","opacity"],positionAttribute:"POSITION",extraCommandProps:{depth:{enable:!0,func:"always"},cull:{enable:!1,face:"back"},frontFace:"cw",blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"},equation:"add"}}},y=[1,0,3,3,2,1];class w extends(a(e.renderer.LayerAbstractRenderer)){constructor(e){super(e),this._scenes={}}draw(e,t){this.prepareCanvas(),this._renderScene(t)}drawOnInteracting(e,t,r){this._renderScene(r)}needToRedraw(){return!0}hitDetect(){return!1}initContext(){super.initContext();const{regl:e,device:t,reglGL:r}=this.context;this.regl=e||t,this.gl=r,this.device=e||t,this._initShader(),this._initRenderer();const i=this.layer.getVideoSurfaces();for(let e=0;e<i.length;e++)this._createScene(i[e])}_createGLContext(e,t){const r=["webgl","experimental-webgl"];let i=null;for(let o=0;o<r.length;++o){try{i=e.getContext(r[o],t)}catch(e){}if(i)break}return i}_initRenderer(){const e=this.layer.getMap(),t=new d.Renderer(this.regl);this.renderer=t,this._uniforms={projMatrix:e.projMatrix,projViewMatrix:e.projViewMatrix,viewMatrix:e.viewMatrix,halton:[.2107,-.0202],uHalton:[.2107,-.0202],uCameraPosition:e.cameraPosition,cameraPosition:e.cameraPosition,globalTexSize:[e.width,e.height]}}_getRegl(){return this.regl}_initShader(){this.viewport={x:0,y:0,width:()=>this.canvas?this.canvas.width:1,height:()=>this.canvas?this.canvas.height:1},this._updateShader()}_updateShader(){this._shader&&this._shader.dispose(),f.wgslVert=l("layer_video_video_vert"),f.wgslFrag=l("layer_video_video_frag"),this.layer.options.showTopAlways?(f.extraCommandProps.depth.mask=!1,f.extraCommandProps.depth.range=[0,0]):(delete f.extraCommandProps.depth.mask,delete f.extraCommandProps.depth.range),f.extraCommandProps.cull.enable=!this.layer.options.doubleSide,this._shader=new d.MeshShader(f)}_createScene(e){const t=this.device.texture(),r=new d.Material({videoTexture:t,opacity:1}),i=e.getCoordinates(),{worldCenter:o,points:s}=this._transformCoordToWorld(i),n=this._createGeometry(s),a=new d.Mesh(n,r);this._updateMatrix(a,o);const l=new d.Scene(a),h=e._getVideoId();this._scenes[h]=l}_updateCoordinates(e){const t=e._getVideoId(),r=this._scenes[t].getMeshes()[0],i=e.getCoordinates();r.geometry.dispose();const{worldCenter:o,points:s}=this._transformCoordToWorld(i),n=this._createGeometry(s);r.geometry=n,this._updateMatrix(r,o)}_renderScene(e){const t=this.layer.getVideoSurfaces().filter((e=>e.isVisible()));if(!t.length)return;const r=this._createSceneInFrustum(t);if(!r)return;let i=null;e&&(i=e.renderTarget&&e.renderTarget.fbo),this.renderer.render(this._shader,this._uniforms,r,i)}_createGeometry(e){const t=new d.Geometry({POSITION:new Float32Array(e),TEXCOORD:new Float32Array([0,0,1,0,1,1,0,1])},new Uint16Array(y),0,{primitive:"triangles",positionAttribute:"POSITION",uv0Attribute:"TEXCOORD",normalAttribute:"NORMAL",positionSize:3});return t.generateBuffers(this.device),t}_transformCoordToWorld(t){let r=[];const i=this.getMap(),o=new e.Polygon(t).getCenter(),s=S(i,o,0);return this._worldCenter=s,i&&t.forEach((t=>{const o=new e.Coordinate(t[0],t[1]),n=i.altitudeToPoint(t[2]||0,i.getGLRes()),a=S(i,o,n);a[0]=a[0]-s[0],a[1]=a[1]-s[1],r=r.concat(a)})),{worldCenter:s,points:r}}_createSceneInFrustum(e){const t=[],r=this.layer.getMap();for(let i=0;i<e.length;i++){const o=e[i],s=this._scenes[o._getVideoId()];if(!s)continue;const n=s.getMeshes();for(let e=0;e<n.length;e++){const i=n[e],s=i.getMaterial(),a=s.get("videoTexture");a&&o._canDrawing()&&(a.update?a.update({data:o.video}):a(o.video),s.set("opacity",o.getOpacity())),_(r.projViewMatrix,i.getBoundingBox())&&t.push(i)}}return t.length?new d.Scene(t):null}_updateMatrix(e,t){h.fromRotationTranslationScale(e.localTransform,c.fromEuler([],0,0,0),t,[1,1,1])}remove(){this._shader&&this._shader.dispose(),super.remove()}_deleteScene(e){const t=this._scenes[e];if(!t)return;t.getMeshes().forEach((e=>{e.geometry.dispose(),e.material&&e.material.dispose(),e.dispose()}))}}function S(e,t,r){if(!e)return null;const i=e.coordinateToPointAtRes(t,e.getGLRes());return[i.x,i.y,r]}class x extends(t(r(i))){constructor(e,t){super(t),this.setCoordinates(e),this._createVideo()}setCoordinates(e){this._coordinates=e}getCoordinates(){return this._coordinates}setVideo(e){this._videoState="stop",this.options.url=e,delete this.options.elementId,this._createVideo()}setElementId(e){this._videoState="stop",this.options.elementId=e,delete this.options.url,this._createVideo()}_createVideo(){this._videoState="stop";const e=this.options.url,t=this.options.elementId;let r=document.getElementById(t);if(e&&(r=document.createElement("video"),r.src=e),!r)throw new Error("there is no element or url setting for video mask");r.autoplay=!0,r.loop=!0,r.muted=!0,r.play(),r.addEventListener("playing",(()=>{this._videoState="playing",this.fire("playing",{state:this._videoState,url:e})})),r.addEventListener("pause",(()=>{this._videoState="pause",this.fire("pause",{state:this._videoState,url:e})})),r.addEventListener("error",(()=>{throw this._videoState="pause",this.fire("error",{state:this._videoState,url:e}),new Error("video resource load error")})),this.video=r}getVideo(){return this.video}_setVideoId(e){this._videoId=e}_getVideoId(){return this._videoId}addTo(e){if(this._layer)throw new Error("VideoSurface cannot be added to two or more layers at the same time.");return e.addSurfaces(this),this}show(){return this.options.visible=!0,this}hide(){return this.options.visible=!1,this}isVisible(){return this.options.visible}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}setAudio(e){this.video.muted=e}setOpacity(e){this.options.opacity=e}getOpacity(){return this.options.opacity}remove(){delete this.video;const e=this.getLayer();e&&e.removeVideoSurfaces(this),this.endEdit()}getLayer(){return this._layer}_canDrawing(){return"playing"===this._videoState}startEdit(){const e=this.getLayer();if(!e)return void console.warn("videosurface should be added to a map before edit");const t=e.getMap();if(!t)return void console.warn("videosurface should be added to a map before edit");if(this._clearEditHelper(),!this._editHelpLayer){const r=e.getId();this._editHelpLayer=new o(`internal_${r}_edit`).addTo(t)}const r=this.getCoordinates();this._editHelpPolygon=new s(r,{symbol:{lineColor:"#34495e",lineWidth:2,polygonFill:"rgb(135,196,240)",polygonOpacity:.1}}).addTo(this._editHelpLayer),this._editHelpPolygon.startEdit({newVertexHandleSymbol:{polygonFill:"rgba(0, 0, 0, 0)",polygonOpacity:0,markerType:"ellipse",markerWidth:1,markerHeight:1}}),this._editHelpPolygon.on("shapechange",(t=>{const r=t.target.getCoordinates()[0].slice(0,4).map((e=>[e.x,e.y,0]));this.setCoordinates(r);e.getRenderer()._updateCoordinates(this)}),this)}endEdit(){this._editHelpLayer&&(this._editHelpPolygon.endEdit(),this._editHelpPolygon.remove(),this._editHelpLayer.remove()),delete this._editHelpLayer,delete this._editHelpPolygon}_clearEditHelper(){this._editHelpLayer&&this._editHelpLayer.clear(),delete this._editHelpPolygon}}x.mergeOptions({opacity:1,visible:!0});class M extends n{constructor(e,t,r){!t||Array.isArray(t)||t instanceof x||(r=t,t=null),super(e,r),this._videoSurfaceMap={},this.videoId=0,this._videoSurfaceMap={},this.videoId=0,t&&this.addSurfaces(t)}addSurfaces(e){if(e)if(Array.isArray(e))e.forEach((e=>{this.addSurfaces(e)}));else{e._layer=this,this._videoSurfaceMap[this.videoId]=e,e._setVideoId(this.videoId);const t=this.getRenderer();t?t._getRegl()&&t._createScene(e):this.on("renderercreate",(t=>{t.renderer._getRegl()&&t.renderer._createScene(e)})),this.videoId++}}showTopAlways(e){this.options.showTopAlways=e;const t=this.getRenderer();t&&t._updateShader()}setDoubleSide(e){this.options.doubleSide=e;const t=this.getRenderer();t&&t._updateShader()}getVideoSurfaces(){const e=[];for(const t in this._videoSurfaceMap)e.push(this._videoSurfaceMap[t]);return e}removeVideoSurfaces(e){if(Array.isArray(e))e.forEach((e=>{this.removeVideoSurfaces(e)}));else{const t=e._getVideoId(),r=this.getRenderer();r&&r._deleteScene(t),delete this._videoSurfaceMap[t]}}remove(){this.clear(),super.remove()}clear(){const e=this.getVideoSurfaces();for(let t=0;t<e.length;t++)e[t].remove()}}M.mergeOptions({renderer:"gl",doubleBuffer:!1,glOptions:null,markerEvents:!0,forceRenderOnZooming:!0,forceRenderOnMoving:!0,forceRenderOnRotating:!0,showTopAlways:!0,doubleSide:!0}),M.registerJSONType("VideoLayer"),M.registerRenderer("gl",w),M.registerRenderer("gpu",w);export{M as VideoLayer,x as VideoSurface};"undefined"!=typeof console&&console.log("@maptalks/video-layer v0.123.0"); | ||
| //# sourceMappingURL=maptalks.video.es.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"maptalks.video.es.js","sources":["../../../node_modules/.pnpm/frustum-intersects@0.2.4/node_modules/frustum-intersects/src/index.js","../src/VideoLayerRenderer.js","../src/VideoSurface.ts","../src/VideoLayer.ts"],"sourcesContent":["/*!\r\n* Contains code from THREE.js\r\n* MIT License\r\n* https://github.com/mrdoob/three.js\r\n*/\r\n\r\nvar planes = [];\r\nfor (var i = 0; i < 6; i++) {\r\n planes[i] = [];\r\n}\r\n\r\nexport function intersectsSphere(matrix, sphere, mask) {\r\n setPlanes(matrix);\r\n var center = sphere[0];\r\n var negRadius = -sphere[1];\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var distance = distanceToPoint(planes[i], center);\r\n if (distance < negRadius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nvar p = [];\r\n\r\nexport function intersectsBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n // corner at max distance\r\n p[0] = plane[0] > 0 ? box[1][0] : box[0][0];\r\n p[1] = plane[1] > 0 ? box[1][1] : box[0][1];\r\n p[2] = plane[2] > 0 ? box[1][2] : box[0][2];\r\n\r\n if (distanceToPoint(plane, p) < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function intersectsOrientedBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n if (!intersectsPlane(plane, box)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nvar COLUMN0ROW0 = 0 + 3, COLUMN0ROW1 = 1 + 3, COLUMN0ROW2 = 2 + 3, COLUMN1ROW0 = 3 + 3, COLUMN1ROW1 = 4 + 3, COLUMN1ROW2 = 5 + 3, COLUMN2ROW0 = 6 + 3, COLUMN2ROW1 = 7 + 3, COLUMN2ROW2 = 8 + 3;\r\n// const COLUMN0ROW0 = 0, COLUMN0ROW1 = 1, COLUMN0ROW2 = 2, COLUMN1ROW0 = 3, COLUMN1ROW1 = 4, COLUMN1ROW2 = 5, COLUMN2ROW0 = 6, COLUMN2ROW1 = 7, COLUMN2ROW2 = 8;\r\nvar BOX_CENTER = [];\r\nvar HALF_AXES = [];\r\n\r\nfunction intersectsPlane(plane, box) {\r\n var center = box;\r\n var normal = plane;\r\n var halfAxes = box;\r\n var normalX = normal[0], normalY = normal[1], normalZ = normal[2];\r\n // plane is used as if it is its normal; the first three components are assumed to be normalized\r\n var radEffective = Math.abs(normalX * halfAxes[COLUMN0ROW0] + normalY * halfAxes[COLUMN0ROW1] + normalZ * halfAxes[COLUMN0ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN1ROW0] + normalY * halfAxes[COLUMN1ROW1] + normalZ * halfAxes[COLUMN1ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN2ROW0] + normalY * halfAxes[COLUMN2ROW1] + normalZ * halfAxes[COLUMN2ROW2]);\r\n var distanceToPlane = distanceToPoint(plane, center);\r\n\r\n if (distanceToPlane <= -radEffective) {\r\n // The entire box is on the negative side of the plane normal\r\n // return Intersect.OUTSIDE;\r\n return false;\r\n } else if (distanceToPlane >= radEffective) {\r\n // The entire box is on the positive side of the plane normal\r\n // return Intersect.INSIDE;\r\n return true;\r\n }\r\n return true;\r\n // return Intersect.INTERSECTING;\r\n}\r\n\r\nfunction setPlanes(m) {\r\n var me = m;\r\n var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];\r\n var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];\r\n var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];\r\n var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];\r\n\r\n //right\r\n setComponents(planes[0], me3 - me0, me7 - me4, me11 - me8, me15 - me12);\r\n //left\r\n setComponents(planes[1], me3 + me0, me7 + me4, me11 + me8, me15 + me12);\r\n //bottom\r\n setComponents(planes[2], me3 + me1, me7 + me5, me11 + me9, me15 + me13);\r\n //top\r\n setComponents(planes[3], me3 - me1, me7 - me5, me11 - me9, me15 - me13);\r\n //z-far\r\n setComponents(planes[4], me3 - me2, me7 - me6, me11 - me10, me15 - me14);\r\n //z-near\r\n setComponents(planes[5], me3 + me2, me7 + me6, me11 + me10, me15 + me14);\r\n}\r\n\r\nfunction setComponents(out, x, y, z, w) {\r\n // THREE.js Plane.js\r\n var inverseNormalLength = 1 / Math.sqrt(x * x + y * y + z * z);\r\n out[0] = x * inverseNormalLength;\r\n out[1] = y * inverseNormalLength;\r\n out[2] = z * inverseNormalLength;\r\n out[3] = w * inverseNormalLength;\r\n return out;\r\n}\r\n\r\nfunction distanceToPoint(plane, p) {\r\n return plane[0] * p[0] + plane[1] * p[1] + plane[2] * p[2] + plane[3];\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { CanvasCompatible, reshader, mat4, quat } from '@maptalks/gl';\nimport { intersectsBox } from 'frustum-intersects';\nimport vert from './video.vert';\nimport frag from './video.frag';\nimport wgslVert from './video_vert.wgsl';\nimport wgslFrag from './video_frag.wgsl';\n\nconst shaderConfig = {\n name: 'video-layer',\n vert,\n frag,\n wgslVert,\n wgslFrag,\n uniforms : [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (context, props) => {\n return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n }\n },\n 'texture',\n 'opacity'\n ],\n positionAttribute : 'POSITION',\n extraCommandProps: {\n depth: {\n enable: true,\n func: 'always'\n },\n cull: {\n enable: false,\n face: 'back'\n },\n frontFace: 'cw',\n blend: {\n enable: true,\n func: {\n src: 'src alpha',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n }\n }\n};\n\nconst triangles = [1, 0, 3, 3, 2, 1];\nclass VideoLayerRenderer extends CanvasCompatible(maptalks.renderer.LayerAbstractRenderer) {\n constructor(layer) {\n super(layer);\n this._scenes = {};\n }\n\n draw(timestamp, context) {\n this.prepareCanvas();\n this._renderScene(context);\n }\n\n drawOnInteracting(e, timestamp, context) {\n this._renderScene(context);\n }\n\n needToRedraw() {\n return true;\n }\n\n hitDetect() {\n return false;\n }\n\n initContext() {\n super.initContext();\n const { regl, device, reglGL } = this.context;\n\n this.regl = regl || device;\n this.gl = reglGL;\n this.device = regl || device;\n\n this._initShader();\n this._initRenderer();\n const videoSurfaces = this.layer.getVideoSurfaces();\n for (let i = 0; i < videoSurfaces.length; i++) {\n this._createScene(videoSurfaces[i]);\n }\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) {}\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _initRenderer() {\n const map = this.layer.getMap();\n const renderer = new reshader.Renderer(this.regl);\n this.renderer = renderer;\n this._uniforms = {\n 'projMatrix': map.projMatrix,\n 'projViewMatrix' : map.projViewMatrix,\n 'viewMatrix': map.viewMatrix,\n 'halton': [0.2107, -0.0202],\n 'uHalton': [0.2107, -0.0202],\n 'uCameraPosition' : map.cameraPosition,\n 'cameraPosition' : map.cameraPosition,\n 'globalTexSize' : [map.width, map.height]\n };\n }\n\n _getRegl() {\n return this.regl;\n }\n\n _initShader() {\n this.viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this.canvas ? this.canvas.width : 1;\n },\n height : () => {\n return this.canvas ? this.canvas.height : 1;\n }\n };\n this._updateShader();\n }\n\n _updateShader() {\n if (this._shader) {\n this._shader.dispose();\n }\n if (this.layer.options['showTopAlways']) {\n shaderConfig.extraCommandProps.depth.mask = false;\n shaderConfig.extraCommandProps.depth.range = [0, 0];\n } else {\n delete shaderConfig.extraCommandProps.depth.mask;\n delete shaderConfig.extraCommandProps.depth.range;\n }\n shaderConfig.extraCommandProps.cull.enable = this.layer.options['doubleSide'] ? false : true;\n this._shader = new reshader.MeshShader(shaderConfig);\n }\n\n _createScene(videoSurface) {\n const texture = this.device.texture();\n const material = new reshader.Material({\n videoTexture: texture,\n opacity: 1.0\n });\n const coordinates = videoSurface.getCoordinates();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n const mesh = new reshader.Mesh(geometry, material);\n this._updateMatrix(mesh, worldCenter);\n const scene = new reshader.Scene(mesh);\n const videoId = videoSurface._getVideoId();\n this._scenes[videoId] = scene;\n }\n\n _updateCoordinates(videoSurface) {\n const videoId = videoSurface._getVideoId();\n const scene = this._scenes[videoId];\n const mesh = scene.getMeshes()[0];\n const coordinates = videoSurface.getCoordinates();\n mesh.geometry.dispose();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n mesh.geometry = geometry;\n this._updateMatrix(mesh, worldCenter);\n }\n\n _renderScene(context) {\n const visibles = this.layer.getVideoSurfaces().filter(videoSurface => {\n return videoSurface.isVisible();\n });\n if (!visibles.length) {\n return;\n }\n const renderScene = this._createSceneInFrustum(visibles);\n if (!renderScene) {\n return;\n }\n let targetFBO = null;\n if (context) {\n targetFBO = context.renderTarget && context.renderTarget.fbo;\n }\n this.renderer.render(this._shader, this._uniforms, renderScene, targetFBO);\n }\n\n _createGeometry(points) {\n const geometry = new reshader.Geometry({\n POSITION: new Float32Array(points),\n TEXCOORD: new Float32Array([\n 0.0, 0.0,\n 1.0, 0.0,\n 1.0, 1.0,\n 0.0, 1.0\n ])\n },\n new Uint16Array(triangles),\n 0,\n {\n primitive: 'triangles',\n //顶点的属性名称,默认为 aPosition\n positionAttribute: 'POSITION',\n uv0Attribute: 'TEXCOORD',\n normalAttribute: 'NORMAL',\n //顶点个数,默认为3\n positionSize: 3\n });\n geometry.generateBuffers(this.device);\n return geometry;\n }\n\n _transformCoordToWorld(coordinates) {\n let points = [];\n const map = this.getMap();\n const tmpPolygon = new maptalks.Polygon(coordinates);\n const center = tmpPolygon.getCenter();\n const worldCenter = coordinateToWorld(map, center, 0);\n this._worldCenter = worldCenter;\n if (map) {\n coordinates.forEach(coordinate => {\n const coord = new maptalks.Coordinate(coordinate[0], coordinate[1]);\n const altitude = map.altitudeToPoint(coordinate[2] || 0, map.getGLRes());\n const worldPoint = coordinateToWorld(map, coord, altitude);\n worldPoint[0] = worldPoint[0] - worldCenter[0];\n worldPoint[1] = worldPoint[1] - worldCenter[1];\n points = points.concat(worldPoint);\n });\n }\n return { worldCenter, points };\n }\n\n _createSceneInFrustum(videoSurfaces) {\n const visibles = [];\n const map = this.layer.getMap();\n for (let i = 0; i < videoSurfaces.length; i++) {\n const videoSurface = videoSurfaces[i];\n const scene = this._scenes[videoSurface._getVideoId()];\n if (!scene) {\n continue;\n }\n const meshes = scene.getMeshes();\n for (let ii = 0; ii < meshes.length; ii++) {\n const mesh = meshes[ii];\n const material = mesh.getMaterial();\n const texture = material.get('videoTexture');\n if (texture && videoSurface._canDrawing()) {\n if (texture.update) {\n texture.update({ data: videoSurface.video });\n } else {\n texture(videoSurface.video);\n }\n\n material.set('opacity', videoSurface.getOpacity());\n }\n if (intersectsBox(map.projViewMatrix, mesh.getBoundingBox())) {\n visibles.push(mesh);\n }\n }\n }\n return visibles.length ? new reshader.Scene(visibles) : null;\n }\n\n _updateMatrix(mesh, worldCenter) {\n mat4.fromRotationTranslationScale(mesh.localTransform, quat.fromEuler([], 0, 0, 0), worldCenter, [1, 1, 1]);\n }\n\n remove() {\n if (this._shader) {\n this._shader.dispose();\n }\n super.remove();\n }\n\n _deleteScene(videoId) {\n const scene = this._scenes[videoId];\n if (!scene) {\n return;\n }\n const meshes = scene.getMeshes();\n meshes.forEach(mesh => {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n mesh.dispose();\n });\n }\n}\nexport default VideoLayerRenderer;\n\nfunction coordinateToWorld(map, coordinate, z) {\n if (!map) {\n return null;\n }\n const p = map.coordinateToPointAtRes(coordinate, map.getGLRes());\n return [p.x, p.y, z];\n}\n",null,null],"names":["planes","i","p","intersectsBox","matrix","box","mask","me","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","plane","distanceToPoint","out","x","y","z","w","inverseNormalLength","Math","sqrt","shaderConfig","name","vert","frag","wgslVert","wgslFrag","uniforms","type","fn","context","props","mat4","multiply","positionAttribute","extraCommandProps","depth","enable","func","cull","face","frontFace","blend","src","dst","equation","triangles","VideoLayerRenderer","CanvasCompatible","maptalks","renderer","LayerAbstractRenderer","constructor","layer","super","this","_scenes","draw","timestamp","prepareCanvas","_renderScene","drawOnInteracting","e","needToRedraw","hitDetect","initContext","regl","device","reglGL","gl","_initShader","_initRenderer","videoSurfaces","getVideoSurfaces","length","_createScene","_createGLContext","canvas","options","names","getContext","map","getMap","reshader","Renderer","_uniforms","projMatrix","projViewMatrix","viewMatrix","halton","uHalton","uCameraPosition","cameraPosition","globalTexSize","width","height","_getRegl","viewport","_updateShader","_shader","dispose","range","MeshShader","videoSurface","texture","material","Material","videoTexture","opacity","coordinates","getCoordinates","worldCenter","points","_transformCoordToWorld","geometry","_createGeometry","mesh","Mesh","_updateMatrix","scene","Scene","videoId","_getVideoId","_updateCoordinates","getMeshes","visibles","filter","isVisible","renderScene","_createSceneInFrustum","targetFBO","renderTarget","fbo","render","Geometry","POSITION","Float32Array","TEXCOORD","Uint16Array","primitive","uv0Attribute","normalAttribute","positionSize","generateBuffers","center","Polygon","getCenter","coordinateToWorld","_worldCenter","forEach","coordinate","coord","Coordinate","altitude","altitudeToPoint","getGLRes","worldPoint","concat","meshes","ii","getMaterial","get","_canDrawing","update","data","video","set","getOpacity","getBoundingBox","push","fromRotationTranslationScale","localTransform","quat","fromEuler","remove","_deleteScene","coordinateToPointAtRes","VideoSurface","Eventable","Handlerable","Class","setCoordinates","_createVideo","_coordinates","setVideo","url","_videoState","elementId","setElementId","id","document","getElementById","createElement","Error","autoplay","loop","muted","play","addEventListener","fire","state","getVideo","_setVideoId","_videoId","addTo","_layer","addSurfaces","show","visible","hide","pause","setAudio","audio","setOpacity","getLayer","removeVideoSurfaces","endEdit","startEdit","console","warn","_clearEditHelper","_editHelpLayer","layerId","getId","DrawToolLayer","_editHelpPolygon","symbol","lineColor","lineWidth","polygonFill","polygonOpacity","newVertexHandleSymbol","markerType","markerWidth","markerHeight","on","positions","target","slice","getRenderer","clear","mergeOptions","VideoLayer","Layer","Array","isArray","_videoSurfaceMap","showTopAlways","always","setDoubleSide","doubleSide","surfaceList","s","surfaces","doubleBuffer","glOptions","markerEvents","forceRenderOnZooming","forceRenderOnMoving","forceRenderOnRotating","registerJSONType","registerRenderer"],"mappings":"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","x_google_ignoreList":[0]} | ||
| {"version":3,"file":"maptalks.video.es.js","sources":["../../../node_modules/.pnpm/frustum-intersects@0.2.4/node_modules/frustum-intersects/src/index.js","../src/VideoLayerRenderer.js","../src/VideoSurface.ts","../src/VideoLayer.ts"],"sourcesContent":["/*!\r\n* Contains code from THREE.js\r\n* MIT License\r\n* https://github.com/mrdoob/three.js\r\n*/\r\n\r\nvar planes = [];\r\nfor (var i = 0; i < 6; i++) {\r\n planes[i] = [];\r\n}\r\n\r\nexport function intersectsSphere(matrix, sphere, mask) {\r\n setPlanes(matrix);\r\n var center = sphere[0];\r\n var negRadius = -sphere[1];\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var distance = distanceToPoint(planes[i], center);\r\n if (distance < negRadius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nvar p = [];\r\n\r\nexport function intersectsBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n // corner at max distance\r\n p[0] = plane[0] > 0 ? box[1][0] : box[0][0];\r\n p[1] = plane[1] > 0 ? box[1][1] : box[0][1];\r\n p[2] = plane[2] > 0 ? box[1][2] : box[0][2];\r\n\r\n if (distanceToPoint(plane, p) < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function intersectsOrientedBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n if (!intersectsPlane(plane, box)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nvar COLUMN0ROW0 = 0 + 3, COLUMN0ROW1 = 1 + 3, COLUMN0ROW2 = 2 + 3, COLUMN1ROW0 = 3 + 3, COLUMN1ROW1 = 4 + 3, COLUMN1ROW2 = 5 + 3, COLUMN2ROW0 = 6 + 3, COLUMN2ROW1 = 7 + 3, COLUMN2ROW2 = 8 + 3;\r\n// const COLUMN0ROW0 = 0, COLUMN0ROW1 = 1, COLUMN0ROW2 = 2, COLUMN1ROW0 = 3, COLUMN1ROW1 = 4, COLUMN1ROW2 = 5, COLUMN2ROW0 = 6, COLUMN2ROW1 = 7, COLUMN2ROW2 = 8;\r\nvar BOX_CENTER = [];\r\nvar HALF_AXES = [];\r\n\r\nfunction intersectsPlane(plane, box) {\r\n var center = box;\r\n var normal = plane;\r\n var halfAxes = box;\r\n var normalX = normal[0], normalY = normal[1], normalZ = normal[2];\r\n // plane is used as if it is its normal; the first three components are assumed to be normalized\r\n var radEffective = Math.abs(normalX * halfAxes[COLUMN0ROW0] + normalY * halfAxes[COLUMN0ROW1] + normalZ * halfAxes[COLUMN0ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN1ROW0] + normalY * halfAxes[COLUMN1ROW1] + normalZ * halfAxes[COLUMN1ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN2ROW0] + normalY * halfAxes[COLUMN2ROW1] + normalZ * halfAxes[COLUMN2ROW2]);\r\n var distanceToPlane = distanceToPoint(plane, center);\r\n\r\n if (distanceToPlane <= -radEffective) {\r\n // The entire box is on the negative side of the plane normal\r\n // return Intersect.OUTSIDE;\r\n return false;\r\n } else if (distanceToPlane >= radEffective) {\r\n // The entire box is on the positive side of the plane normal\r\n // return Intersect.INSIDE;\r\n return true;\r\n }\r\n return true;\r\n // return Intersect.INTERSECTING;\r\n}\r\n\r\nfunction setPlanes(m) {\r\n var me = m;\r\n var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];\r\n var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];\r\n var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];\r\n var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];\r\n\r\n //right\r\n setComponents(planes[0], me3 - me0, me7 - me4, me11 - me8, me15 - me12);\r\n //left\r\n setComponents(planes[1], me3 + me0, me7 + me4, me11 + me8, me15 + me12);\r\n //bottom\r\n setComponents(planes[2], me3 + me1, me7 + me5, me11 + me9, me15 + me13);\r\n //top\r\n setComponents(planes[3], me3 - me1, me7 - me5, me11 - me9, me15 - me13);\r\n //z-far\r\n setComponents(planes[4], me3 - me2, me7 - me6, me11 - me10, me15 - me14);\r\n //z-near\r\n setComponents(planes[5], me3 + me2, me7 + me6, me11 + me10, me15 + me14);\r\n}\r\n\r\nfunction setComponents(out, x, y, z, w) {\r\n // THREE.js Plane.js\r\n var inverseNormalLength = 1 / Math.sqrt(x * x + y * y + z * z);\r\n out[0] = x * inverseNormalLength;\r\n out[1] = y * inverseNormalLength;\r\n out[2] = z * inverseNormalLength;\r\n out[3] = w * inverseNormalLength;\r\n return out;\r\n}\r\n\r\nfunction distanceToPoint(plane, p) {\r\n return plane[0] * p[0] + plane[1] * p[1] + plane[2] * p[2] + plane[3];\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { CanvasCompatible, reshader, mat4, quat, getWGSLSource } from '@maptalks/gl';\nimport { intersectsBox } from 'frustum-intersects';\nimport vert from './video.vert';\nimport frag from './video.frag';\nconst shaderConfig = {\n name: 'video-layer',\n vert,\n frag,\n uniforms : [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (context, props) => {\n return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n }\n },\n 'texture',\n 'opacity'\n ],\n positionAttribute : 'POSITION',\n extraCommandProps: {\n depth: {\n enable: true,\n func: 'always'\n },\n cull: {\n enable: false,\n face: 'back'\n },\n frontFace: 'cw',\n blend: {\n enable: true,\n func: {\n src: 'src alpha',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n }\n }\n};\n\nconst triangles = [1, 0, 3, 3, 2, 1];\nclass VideoLayerRenderer extends CanvasCompatible(maptalks.renderer.LayerAbstractRenderer) {\n constructor(layer) {\n super(layer);\n this._scenes = {};\n }\n\n draw(timestamp, context) {\n this.prepareCanvas();\n this._renderScene(context);\n }\n\n drawOnInteracting(e, timestamp, context) {\n this._renderScene(context);\n }\n\n needToRedraw() {\n return true;\n }\n\n hitDetect() {\n return false;\n }\n\n initContext() {\n super.initContext();\n const { regl, device, reglGL } = this.context;\n\n this.regl = regl || device;\n this.gl = reglGL;\n this.device = regl || device;\n\n this._initShader();\n this._initRenderer();\n const videoSurfaces = this.layer.getVideoSurfaces();\n for (let i = 0; i < videoSurfaces.length; i++) {\n this._createScene(videoSurfaces[i]);\n }\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) {}\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _initRenderer() {\n const map = this.layer.getMap();\n const renderer = new reshader.Renderer(this.regl);\n this.renderer = renderer;\n this._uniforms = {\n 'projMatrix': map.projMatrix,\n 'projViewMatrix' : map.projViewMatrix,\n 'viewMatrix': map.viewMatrix,\n 'halton': [0.2107, -0.0202],\n 'uHalton': [0.2107, -0.0202],\n 'uCameraPosition' : map.cameraPosition,\n 'cameraPosition' : map.cameraPosition,\n 'globalTexSize' : [map.width, map.height]\n };\n }\n\n _getRegl() {\n return this.regl;\n }\n\n _initShader() {\n this.viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this.canvas ? this.canvas.width : 1;\n },\n height : () => {\n return this.canvas ? this.canvas.height : 1;\n }\n };\n this._updateShader();\n }\n\n _updateShader() {\n if (this._shader) {\n this._shader.dispose();\n }\n shaderConfig.wgslVert = getWGSLSource('layer_video_video_vert');\n shaderConfig.wgslFrag = getWGSLSource('layer_video_video_frag');\n if (this.layer.options['showTopAlways']) {\n shaderConfig.extraCommandProps.depth.mask = false;\n shaderConfig.extraCommandProps.depth.range = [0, 0];\n } else {\n delete shaderConfig.extraCommandProps.depth.mask;\n delete shaderConfig.extraCommandProps.depth.range;\n }\n shaderConfig.extraCommandProps.cull.enable = this.layer.options['doubleSide'] ? false : true;\n this._shader = new reshader.MeshShader(shaderConfig);\n }\n\n _createScene(videoSurface) {\n const texture = this.device.texture();\n const material = new reshader.Material({\n videoTexture: texture,\n opacity: 1.0\n });\n const coordinates = videoSurface.getCoordinates();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n const mesh = new reshader.Mesh(geometry, material);\n this._updateMatrix(mesh, worldCenter);\n const scene = new reshader.Scene(mesh);\n const videoId = videoSurface._getVideoId();\n this._scenes[videoId] = scene;\n }\n\n _updateCoordinates(videoSurface) {\n const videoId = videoSurface._getVideoId();\n const scene = this._scenes[videoId];\n const mesh = scene.getMeshes()[0];\n const coordinates = videoSurface.getCoordinates();\n mesh.geometry.dispose();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n mesh.geometry = geometry;\n this._updateMatrix(mesh, worldCenter);\n }\n\n _renderScene(context) {\n const visibles = this.layer.getVideoSurfaces().filter(videoSurface => {\n return videoSurface.isVisible();\n });\n if (!visibles.length) {\n return;\n }\n const renderScene = this._createSceneInFrustum(visibles);\n if (!renderScene) {\n return;\n }\n let targetFBO = null;\n if (context) {\n targetFBO = context.renderTarget && context.renderTarget.fbo;\n }\n this.renderer.render(this._shader, this._uniforms, renderScene, targetFBO);\n }\n\n _createGeometry(points) {\n const geometry = new reshader.Geometry({\n POSITION: new Float32Array(points),\n TEXCOORD: new Float32Array([\n 0.0, 0.0,\n 1.0, 0.0,\n 1.0, 1.0,\n 0.0, 1.0\n ])\n },\n new Uint16Array(triangles),\n 0,\n {\n primitive: 'triangles',\n //顶点的属性名称,默认为 aPosition\n positionAttribute: 'POSITION',\n uv0Attribute: 'TEXCOORD',\n normalAttribute: 'NORMAL',\n //顶点个数,默认为3\n positionSize: 3\n });\n geometry.generateBuffers(this.device);\n return geometry;\n }\n\n _transformCoordToWorld(coordinates) {\n let points = [];\n const map = this.getMap();\n const tmpPolygon = new maptalks.Polygon(coordinates);\n const center = tmpPolygon.getCenter();\n const worldCenter = coordinateToWorld(map, center, 0);\n this._worldCenter = worldCenter;\n if (map) {\n coordinates.forEach(coordinate => {\n const coord = new maptalks.Coordinate(coordinate[0], coordinate[1]);\n const altitude = map.altitudeToPoint(coordinate[2] || 0, map.getGLRes());\n const worldPoint = coordinateToWorld(map, coord, altitude);\n worldPoint[0] = worldPoint[0] - worldCenter[0];\n worldPoint[1] = worldPoint[1] - worldCenter[1];\n points = points.concat(worldPoint);\n });\n }\n return { worldCenter, points };\n }\n\n _createSceneInFrustum(videoSurfaces) {\n const visibles = [];\n const map = this.layer.getMap();\n for (let i = 0; i < videoSurfaces.length; i++) {\n const videoSurface = videoSurfaces[i];\n const scene = this._scenes[videoSurface._getVideoId()];\n if (!scene) {\n continue;\n }\n const meshes = scene.getMeshes();\n for (let ii = 0; ii < meshes.length; ii++) {\n const mesh = meshes[ii];\n const material = mesh.getMaterial();\n const texture = material.get('videoTexture');\n if (texture && videoSurface._canDrawing()) {\n if (texture.update) {\n texture.update({ data: videoSurface.video });\n } else {\n texture(videoSurface.video);\n }\n\n material.set('opacity', videoSurface.getOpacity());\n }\n if (intersectsBox(map.projViewMatrix, mesh.getBoundingBox())) {\n visibles.push(mesh);\n }\n }\n }\n return visibles.length ? new reshader.Scene(visibles) : null;\n }\n\n _updateMatrix(mesh, worldCenter) {\n mat4.fromRotationTranslationScale(mesh.localTransform, quat.fromEuler([], 0, 0, 0), worldCenter, [1, 1, 1]);\n }\n\n remove() {\n if (this._shader) {\n this._shader.dispose();\n }\n super.remove();\n }\n\n _deleteScene(videoId) {\n const scene = this._scenes[videoId];\n if (!scene) {\n return;\n }\n const meshes = scene.getMeshes();\n meshes.forEach(mesh => {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n mesh.dispose();\n });\n }\n}\nexport default VideoLayerRenderer;\n\nfunction coordinateToWorld(map, coordinate, z) {\n if (!map) {\n return null;\n }\n const p = map.coordinateToPointAtRes(coordinate, map.getGLRes());\n return [p.x, p.y, z];\n}\n",null,null],"names":["planes","i","p","intersectsBox","matrix","box","mask","me","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","plane","distanceToPoint","out","x","y","z","w","inverseNormalLength","Math","sqrt","shaderConfig","name","vert","frag","uniforms","type","fn","context","props","mat4","multiply","positionAttribute","extraCommandProps","depth","enable","func","cull","face","frontFace","blend","src","dst","equation","triangles","VideoLayerRenderer","CanvasCompatible","maptalks","renderer","LayerAbstractRenderer","constructor","layer","super","this","_scenes","draw","timestamp","prepareCanvas","_renderScene","drawOnInteracting","e","needToRedraw","hitDetect","initContext","regl","device","reglGL","gl","_initShader","_initRenderer","videoSurfaces","getVideoSurfaces","length","_createScene","_createGLContext","canvas","options","names","getContext","map","getMap","reshader","Renderer","_uniforms","projMatrix","projViewMatrix","viewMatrix","halton","uHalton","uCameraPosition","cameraPosition","globalTexSize","width","height","_getRegl","viewport","_updateShader","_shader","dispose","wgslVert","getWGSLSource","wgslFrag","range","MeshShader","videoSurface","texture","material","Material","videoTexture","opacity","coordinates","getCoordinates","worldCenter","points","_transformCoordToWorld","geometry","_createGeometry","mesh","Mesh","_updateMatrix","scene","Scene","videoId","_getVideoId","_updateCoordinates","getMeshes","visibles","filter","isVisible","renderScene","_createSceneInFrustum","targetFBO","renderTarget","fbo","render","Geometry","POSITION","Float32Array","TEXCOORD","Uint16Array","primitive","uv0Attribute","normalAttribute","positionSize","generateBuffers","center","Polygon","getCenter","coordinateToWorld","_worldCenter","forEach","coordinate","coord","Coordinate","altitude","altitudeToPoint","getGLRes","worldPoint","concat","meshes","ii","getMaterial","get","_canDrawing","update","data","video","set","getOpacity","getBoundingBox","push","fromRotationTranslationScale","localTransform","quat","fromEuler","remove","_deleteScene","coordinateToPointAtRes","VideoSurface","Eventable","Handlerable","Class","setCoordinates","_createVideo","_coordinates","setVideo","url","_videoState","elementId","setElementId","id","document","getElementById","createElement","Error","autoplay","loop","muted","play","addEventListener","fire","state","getVideo","_setVideoId","_videoId","addTo","_layer","addSurfaces","show","visible","hide","pause","setAudio","audio","setOpacity","getLayer","removeVideoSurfaces","endEdit","startEdit","console","warn","_clearEditHelper","_editHelpLayer","layerId","getId","DrawToolLayer","_editHelpPolygon","symbol","lineColor","lineWidth","polygonFill","polygonOpacity","newVertexHandleSymbol","markerType","markerWidth","markerHeight","on","positions","target","slice","getRenderer","clear","mergeOptions","VideoLayer","Layer","Array","isArray","_videoSurfaceMap","showTopAlways","always","setDoubleSide","doubleSide","surfaceList","s","surfaces","doubleBuffer","glOptions","markerEvents","forceRenderOnZooming","forceRenderOnMoving","forceRenderOnRotating","registerJSONType","registerRenderer"],"mappings":"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","x_google_ignoreList":[0]} |
| /*! | ||
| * @maptalks/video-layer v0.122.0 | ||
| * @maptalks/video-layer v0.123.0 | ||
| * LICENSE : UNLICENSED | ||
| * (c) 2016-2026 maptalks.org | ||
| */ | ||
| !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("maptalks"),require("@maptalks/gl")):"function"==typeof define&&define.amd?define(["exports","maptalks","@maptalks/gl"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).maptalks=e.maptalks||{},e.maptalks,e.maptalks)}(this,(function(e,t,r){"use strict";function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}for(var o=i(t),n=[],s=0 | ||
| !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("maptalks"),require("@maptalks/gl")):"function"==typeof define&&define.amd?define(["exports","maptalks","@maptalks/gl"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).maptalks=e.maptalks||{},e.maptalks,e.maptalks)}(this,(function(e,t,r){"use strict";function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}for(var o=i(t),s=[],a=0 | ||
| /*! | ||
@@ -11,3 +11,3 @@ * Contains code from THREE.js | ||
| * https://github.com/mrdoob/three.js | ||
| */;s<6;s++)n[s]=[];var a=[];function d(e,t,r){var i,o,s,d,u,h,p,g,f,m,v,_,y,x,w,S,b;o=(i=e)[0],s=i[1],d=i[2],u=i[3],h=i[4],p=i[5],g=i[6],f=i[7],m=i[8],v=i[9],_=i[10],y=i[11],x=i[12],w=i[13],S=i[14],b=i[15],l(n[0],u-o,f-h,y-m,b-x),l(n[1],u+o,f+h,y+m,b+x),l(n[2],u+s,f+p,y+v,b+w),l(n[3],u-s,f-p,y-v,b-w),l(n[4],u-d,f-g,y-_,b-S),l(n[5],u+d,f+g,y+_,b+S);for(var M=0;M<6;M++){var C=n[M];if(a[0]=C[0]>0?t[1][0]:t[0][0],a[1]=C[1]>0?t[1][1]:t[0][1],a[2]=C[2]>0?t[1][2]:t[0][2],c(C,a)<0)return!1}return!0}function l(e,t,r,i,o){var n=1/Math.sqrt(t*t+r*r+i*i);return e[0]=t*n,e[1]=r*n,e[2]=i*n,e[3]=o*n,e}function c(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]}const u={name:"video-layer",vert:"attribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 projViewModelMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 modelMatrix;\nvarying vec2 vTexCoords;\n#include <get_output>\nvoid main()\n{\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localPosition = getPosition(aPosition);\n gl_Position = projViewModelMatrix * localPositionMatrix * localPosition;\n vTexCoords = aTexCoord;\n}",frag:"precision mediump float;\nuniform sampler2D videoTexture;\nuniform float opacity;\nvarying vec2 vTexCoords;\nvoid main() {\n vec4 color = texture2D(videoTexture, vTexCoords);\n gl_FragColor = color * opacity;\n}",wgslVert:"#include <get_output>\nstruct Uniforms {\n modelMatrix: mat4x4f,\n positionMatrix: mat4x4f,\n projViewModelMatrix: mat4x4f,\n};\n@group(0) @binding($b) var<uniform> uniforms: Uniforms;\nstruct VertexInput {\n @location($i) aPosition: vec3f,\n @location($i) aTexCoord: vec2f,\n};\nstruct VertexOutput {\n @builtin(position) position: vec4f,\n @location($o) vTexCoords: vec2f,\n};\n@vertex\nfn main(vertexInput: VertexInput) -> VertexOutput {\n var output: VertexOutput;\n let localPositionMatrix: mat4x4f = getPositionMatrix(vertexInput, &output, uniforms.positionMatrix);\n let localPosition: vec4f = getPosition(vec3f(vertexInput.aPosition.xyz), vertexInput);\n output.vTexCoords = vertexInput.aTexCoord;\n output.position = uniforms.projViewModelMatrix * localPositionMatrix * localPosition;\n return output;\n}",wgslFrag:"struct FragUniforms {\n opacity: f32\n}\n@group(0) @binding($b) var videoTexture: texture_2d<f32>;\n@group(0) @binding($b) var videoTextureSampler: sampler;\n@group(0) @binding($b) var<uniform> fragUniforms: FragUniforms;\n@fragment\nfn main(vertexOutput: VertexOutput) -> @location(0) vec4f {\n let color = textureSample(videoTexture, videoTextureSampler, vertexOutput.vTexCoords);\n return color * fragUniforms.opacity;\n}",uniforms:[{name:"projViewModelMatrix",type:"function",fn:(e,t)=>r.mat4.multiply([],t.projViewMatrix,t.modelMatrix)},"texture","opacity"],positionAttribute:"POSITION",extraCommandProps:{depth:{enable:!0,func:"always"},cull:{enable:!1,face:"back"},frontFace:"cw",blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"},equation:"add"}}},h=[1,0,3,3,2,1];class p extends(r.CanvasCompatible(o.renderer.LayerAbstractRenderer)){constructor(e){super(e),this._scenes={}}draw(e,t){this.prepareCanvas(),this._renderScene(t)}drawOnInteracting(e,t,r){this._renderScene(r)}needToRedraw(){return!0}hitDetect(){return!1}initContext(){super.initContext();const{regl:e,device:t,reglGL:r}=this.context;this.regl=e||t,this.gl=r,this.device=e||t,this._initShader(),this._initRenderer();const i=this.layer.getVideoSurfaces();for(let e=0;e<i.length;e++)this._createScene(i[e])}_createGLContext(e,t){const r=["webgl","experimental-webgl"];let i=null;for(let o=0;o<r.length;++o){try{i=e.getContext(r[o],t)}catch(e){}if(i)break}return i}_initRenderer(){const e=this.layer.getMap(),t=new r.reshader.Renderer(this.regl);this.renderer=t,this._uniforms={"projMatrix":e.projMatrix,"projViewMatrix":e.projViewMatrix,"viewMatrix":e.viewMatrix,"halton":[.2107,-.0202],"uHalton":[.2107,-.0202],"uCameraPosition":e.cameraPosition,"cameraPosition":e.cameraPosition,"globalTexSize":[e.width,e.height]}}_getRegl(){return this.regl}_initShader(){this.viewport={x:0,y:0,width:()=>this.canvas?this.canvas.width:1,height:()=>this.canvas?this.canvas.height:1},this._updateShader()}_updateShader(){this._shader&&this._shader.dispose(),this.layer.options.showTopAlways?(u.extraCommandProps.depth.mask=!1,u.extraCommandProps.depth.range=[0,0]):(delete u.extraCommandProps.depth.mask,delete u.extraCommandProps.depth.range),u.extraCommandProps.cull.enable=!this.layer.options.doubleSide,this._shader=new r.reshader.MeshShader(u)}_createScene(e){const t=this.device.texture(),i=new r.reshader.Material({videoTexture:t,opacity:1}),o=e.getCoordinates(),{worldCenter:n,points:s}=this._transformCoordToWorld(o),a=this._createGeometry(s),d=new r.reshader.Mesh(a,i);this._updateMatrix(d,n);const l=new r.reshader.Scene(d),c=e._getVideoId();this._scenes[c]=l}_updateCoordinates(e){const t=e._getVideoId(),r=this._scenes[t].getMeshes()[0],i=e.getCoordinates();r.geometry.dispose();const{worldCenter:o,points:n}=this._transformCoordToWorld(i),s=this._createGeometry(n);r.geometry=s,this._updateMatrix(r,o)}_renderScene(e){const t=this.layer.getVideoSurfaces().filter((e=>e.isVisible()));if(!t.length)return;const r=this._createSceneInFrustum(t);if(!r)return;let i=null;e&&(i=e.renderTarget&&e.renderTarget.fbo),this.renderer.render(this._shader,this._uniforms,r,i)}_createGeometry(e){const t=new r.reshader.Geometry({POSITION:new Float32Array(e),TEXCOORD:new Float32Array([0,0,1,0,1,1,0,1])},new Uint16Array(h),0,{primitive:"triangles",positionAttribute:"POSITION",uv0Attribute:"TEXCOORD",normalAttribute:"NORMAL",positionSize:3});return t.generateBuffers(this.device),t}_transformCoordToWorld(e){let t=[];const r=this.getMap(),i=new o.Polygon(e).getCenter(),n=g(r,i,0);return this._worldCenter=n,r&&e.forEach((e=>{const i=new o.Coordinate(e[0],e[1]),s=r.altitudeToPoint(e[2]||0,r.getGLRes()),a=g(r,i,s);a[0]=a[0]-n[0],a[1]=a[1]-n[1],t=t.concat(a)})),{worldCenter:n,points:t}}_createSceneInFrustum(e){const t=[],i=this.layer.getMap();for(let r=0;r<e.length;r++){const o=e[r],n=this._scenes[o._getVideoId()];if(!n)continue;const s=n.getMeshes();for(let e=0;e<s.length;e++){const r=s[e],n=r.getMaterial(),a=n.get("videoTexture");a&&o._canDrawing()&&(a.update?a.update({data:o.video}):a(o.video),n.set("opacity",o.getOpacity())),d(i.projViewMatrix,r.getBoundingBox())&&t.push(r)}}return t.length?new r.reshader.Scene(t):null}_updateMatrix(e,t){r.mat4.fromRotationTranslationScale(e.localTransform,r.quat.fromEuler([],0,0,0),t,[1,1,1])}remove(){this._shader&&this._shader.dispose(),super.remove()}_deleteScene(e){const t=this._scenes[e];if(!t)return;t.getMeshes().forEach((e=>{e.geometry.dispose(),e.material&&e.material.dispose(),e.dispose()}))}}function g(e,t,r){if(!e)return null;const i=e.coordinateToPointAtRes(t,e.getGLRes());return[i.x,i.y,r]}class f extends(t.Eventable(t.Handlerable(t.Class))){constructor(e,t){super(t),this.setCoordinates(e),this._createVideo()}setCoordinates(e){this._coordinates=e}getCoordinates(){return this._coordinates}setVideo(e){this._videoState="stop",this.options.url=e,delete this.options.elementId,this._createVideo()}setElementId(e){this._videoState="stop",this.options.elementId=e,delete this.options.url,this._createVideo()}_createVideo(){this._videoState="stop";const e=this.options.url,t=this.options.elementId;let r=document.getElementById(t);if(e&&(r=document.createElement("video"),r.src=e),!r)throw new Error("there is no element or url setting for video mask");r.autoplay=!0,r.loop=!0,r.muted=!0,r.play(),r.addEventListener("playing",(()=>{this._videoState="playing",this.fire("playing",{state:this._videoState,url:e})})),r.addEventListener("pause",(()=>{this._videoState="pause",this.fire("pause",{state:this._videoState,url:e})})),r.addEventListener("error",(()=>{throw this._videoState="pause",this.fire("error",{state:this._videoState,url:e}),new Error("video resource load error")})),this.video=r}getVideo(){return this.video}_setVideoId(e){this._videoId=e}_getVideoId(){return this._videoId}addTo(e){if(this._layer)throw new Error("VideoSurface cannot be added to two or more layers at the same time.");return e.addSurfaces(this),this}show(){return this.options.visible=!0,this}hide(){return this.options.visible=!1,this}isVisible(){return this.options.visible}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}setAudio(e){this.video.muted=e}setOpacity(e){this.options.opacity=e}getOpacity(){return this.options.opacity}remove(){delete this.video;const e=this.getLayer();e&&e.removeVideoSurfaces(this),this.endEdit()}getLayer(){return this._layer}_canDrawing(){return"playing"===this._videoState}startEdit(){const e=this.getLayer();if(!e)return void console.warn("videosurface should be added to a map before edit");const r=e.getMap();if(!r)return void console.warn("videosurface should be added to a map before edit");if(this._clearEditHelper(),!this._editHelpLayer){const i=e.getId();this._editHelpLayer=new t.DrawToolLayer(`internal_${i}_edit`).addTo(r)}const i=this.getCoordinates();this._editHelpPolygon=new t.Polygon(i,{symbol:{lineColor:"#34495e",lineWidth:2,polygonFill:"rgb(135,196,240)",polygonOpacity:.1}}).addTo(this._editHelpLayer),this._editHelpPolygon.startEdit({newVertexHandleSymbol:{polygonFill:"rgba(0, 0, 0, 0)",polygonOpacity:0,markerType:"ellipse",markerWidth:1,markerHeight:1}}),this._editHelpPolygon.on("shapechange",(t=>{const r=t.target.getCoordinates()[0].slice(0,4).map((e=>[e.x,e.y,0]));this.setCoordinates(r);e.getRenderer()._updateCoordinates(this)}),this)}endEdit(){this._editHelpLayer&&(this._editHelpPolygon.endEdit(),this._editHelpPolygon.remove(),this._editHelpLayer.remove()),delete this._editHelpLayer,delete this._editHelpPolygon}_clearEditHelper(){this._editHelpLayer&&this._editHelpLayer.clear(),delete this._editHelpPolygon}}f.mergeOptions({opacity:1,visible:!0});class m extends t.Layer{constructor(e,t,r){!t||Array.isArray(t)||t instanceof f||(r=t,t=null),super(e,r),this._videoSurfaceMap={},this.videoId=0,this._videoSurfaceMap={},this.videoId=0,t&&this.addSurfaces(t)}addSurfaces(e){if(e)if(Array.isArray(e))e.forEach((e=>{this.addSurfaces(e)}));else{e._layer=this,this._videoSurfaceMap[this.videoId]=e,e._setVideoId(this.videoId);const t=this.getRenderer();t?t._getRegl()&&t._createScene(e):this.on("renderercreate",(t=>{t.renderer._getRegl()&&t.renderer._createScene(e)})),this.videoId++}}showTopAlways(e){this.options.showTopAlways=e;const t=this.getRenderer();t&&t._updateShader()}setDoubleSide(e){this.options.doubleSide=e;const t=this.getRenderer();t&&t._updateShader()}getVideoSurfaces(){const e=[];for(const t in this._videoSurfaceMap)e.push(this._videoSurfaceMap[t]);return e}removeVideoSurfaces(e){if(Array.isArray(e))e.forEach((e=>{this.removeVideoSurfaces(e)}));else{const t=e._getVideoId(),r=this.getRenderer();r&&r._deleteScene(t),delete this._videoSurfaceMap[t]}}remove(){this.clear(),super.remove()}clear(){const e=this.getVideoSurfaces();for(let t=0;t<e.length;t++)e[t].remove()}}m.mergeOptions({renderer:"gl",doubleBuffer:!1,glOptions:null,markerEvents:!0,forceRenderOnZooming:!0,forceRenderOnMoving:!0,forceRenderOnRotating:!0,showTopAlways:!0,doubleSide:!0}),m.registerJSONType("VideoLayer"),m.registerRenderer("gl",p),m.registerRenderer("gpu",p),e.VideoLayer=m,e.VideoSurface=f,"undefined"!=typeof console&&console.log("@maptalks/video-layer v0.122.0")})); | ||
| */;a<6;a++)s[a]=[];var n=[];function d(e,t,r){var i,o,a,d,c,p,u,g,f,m,_,v,y,S,w,x,b;o=(i=e)[0],a=i[1],d=i[2],c=i[3],p=i[4],u=i[5],g=i[6],f=i[7],m=i[8],_=i[9],v=i[10],y=i[11],S=i[12],w=i[13],x=i[14],b=i[15],l(s[0],c-o,f-p,y-m,b-S),l(s[1],c+o,f+p,y+m,b+S),l(s[2],c+a,f+u,y+_,b+w),l(s[3],c-a,f-u,y-_,b-w),l(s[4],c-d,f-g,y-v,b-x),l(s[5],c+d,f+g,y+v,b+x);for(var C=0;C<6;C++){var M=s[C];if(n[0]=M[0]>0?t[1][0]:t[0][0],n[1]=M[1]>0?t[1][1]:t[0][1],n[2]=M[2]>0?t[1][2]:t[0][2],h(M,n)<0)return!1}return!0}function l(e,t,r,i,o){var s=1/Math.sqrt(t*t+r*r+i*i);return e[0]=t*s,e[1]=r*s,e[2]=i*s,e[3]=o*s,e}function h(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]}const c={name:"video-layer",vert:"attribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 projViewModelMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 modelMatrix;\nvarying vec2 vTexCoords;\n#include <get_output>\nvoid main()\n{\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localPosition = getPosition(aPosition);\n gl_Position = projViewModelMatrix * localPositionMatrix * localPosition;\n vTexCoords = aTexCoord;\n}",frag:"precision mediump float;\nuniform sampler2D videoTexture;\nuniform float opacity;\nvarying vec2 vTexCoords;\nvoid main() {\n vec4 color = texture2D(videoTexture, vTexCoords);\n gl_FragColor = color * opacity;\n}",uniforms:[{name:"projViewModelMatrix",type:"function",fn:(e,t)=>r.mat4.multiply([],t.projViewMatrix,t.modelMatrix)},"texture","opacity"],positionAttribute:"POSITION",extraCommandProps:{depth:{enable:!0,func:"always"},cull:{enable:!1,face:"back"},frontFace:"cw",blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"},equation:"add"}}},p=[1,0,3,3,2,1];class u extends(r.CanvasCompatible(o.renderer.LayerAbstractRenderer)){constructor(e){super(e),this._scenes={}}draw(e,t){this.prepareCanvas(),this._renderScene(t)}drawOnInteracting(e,t,r){this._renderScene(r)}needToRedraw(){return!0}hitDetect(){return!1}initContext(){super.initContext();const{regl:e,device:t,reglGL:r}=this.context;this.regl=e||t,this.gl=r,this.device=e||t,this._initShader(),this._initRenderer();const i=this.layer.getVideoSurfaces();for(let e=0;e<i.length;e++)this._createScene(i[e])}_createGLContext(e,t){const r=["webgl","experimental-webgl"];let i=null;for(let o=0;o<r.length;++o){try{i=e.getContext(r[o],t)}catch(e){}if(i)break}return i}_initRenderer(){const e=this.layer.getMap(),t=new r.reshader.Renderer(this.regl);this.renderer=t,this._uniforms={"projMatrix":e.projMatrix,"projViewMatrix":e.projViewMatrix,"viewMatrix":e.viewMatrix,"halton":[.2107,-.0202],"uHalton":[.2107,-.0202],"uCameraPosition":e.cameraPosition,"cameraPosition":e.cameraPosition,"globalTexSize":[e.width,e.height]}}_getRegl(){return this.regl}_initShader(){this.viewport={x:0,y:0,width:()=>this.canvas?this.canvas.width:1,height:()=>this.canvas?this.canvas.height:1},this._updateShader()}_updateShader(){this._shader&&this._shader.dispose(),c.wgslVert=r.getWGSLSource("layer_video_video_vert"),c.wgslFrag=r.getWGSLSource("layer_video_video_frag"),this.layer.options.showTopAlways?(c.extraCommandProps.depth.mask=!1,c.extraCommandProps.depth.range=[0,0]):(delete c.extraCommandProps.depth.mask,delete c.extraCommandProps.depth.range),c.extraCommandProps.cull.enable=!this.layer.options.doubleSide,this._shader=new r.reshader.MeshShader(c)}_createScene(e){const t=this.device.texture(),i=new r.reshader.Material({videoTexture:t,opacity:1}),o=e.getCoordinates(),{worldCenter:s,points:a}=this._transformCoordToWorld(o),n=this._createGeometry(a),d=new r.reshader.Mesh(n,i);this._updateMatrix(d,s);const l=new r.reshader.Scene(d),h=e._getVideoId();this._scenes[h]=l}_updateCoordinates(e){const t=e._getVideoId(),r=this._scenes[t].getMeshes()[0],i=e.getCoordinates();r.geometry.dispose();const{worldCenter:o,points:s}=this._transformCoordToWorld(i),a=this._createGeometry(s);r.geometry=a,this._updateMatrix(r,o)}_renderScene(e){const t=this.layer.getVideoSurfaces().filter((e=>e.isVisible()));if(!t.length)return;const r=this._createSceneInFrustum(t);if(!r)return;let i=null;e&&(i=e.renderTarget&&e.renderTarget.fbo),this.renderer.render(this._shader,this._uniforms,r,i)}_createGeometry(e){const t=new r.reshader.Geometry({POSITION:new Float32Array(e),TEXCOORD:new Float32Array([0,0,1,0,1,1,0,1])},new Uint16Array(p),0,{primitive:"triangles",positionAttribute:"POSITION",uv0Attribute:"TEXCOORD",normalAttribute:"NORMAL",positionSize:3});return t.generateBuffers(this.device),t}_transformCoordToWorld(e){let t=[];const r=this.getMap(),i=new o.Polygon(e).getCenter(),s=g(r,i,0);return this._worldCenter=s,r&&e.forEach((e=>{const i=new o.Coordinate(e[0],e[1]),a=r.altitudeToPoint(e[2]||0,r.getGLRes()),n=g(r,i,a);n[0]=n[0]-s[0],n[1]=n[1]-s[1],t=t.concat(n)})),{worldCenter:s,points:t}}_createSceneInFrustum(e){const t=[],i=this.layer.getMap();for(let r=0;r<e.length;r++){const o=e[r],s=this._scenes[o._getVideoId()];if(!s)continue;const a=s.getMeshes();for(let e=0;e<a.length;e++){const r=a[e],s=r.getMaterial(),n=s.get("videoTexture");n&&o._canDrawing()&&(n.update?n.update({data:o.video}):n(o.video),s.set("opacity",o.getOpacity())),d(i.projViewMatrix,r.getBoundingBox())&&t.push(r)}}return t.length?new r.reshader.Scene(t):null}_updateMatrix(e,t){r.mat4.fromRotationTranslationScale(e.localTransform,r.quat.fromEuler([],0,0,0),t,[1,1,1])}remove(){this._shader&&this._shader.dispose(),super.remove()}_deleteScene(e){const t=this._scenes[e];if(!t)return;t.getMeshes().forEach((e=>{e.geometry.dispose(),e.material&&e.material.dispose(),e.dispose()}))}}function g(e,t,r){if(!e)return null;const i=e.coordinateToPointAtRes(t,e.getGLRes());return[i.x,i.y,r]}class f extends(t.Eventable(t.Handlerable(t.Class))){constructor(e,t){super(t),this.setCoordinates(e),this._createVideo()}setCoordinates(e){this._coordinates=e}getCoordinates(){return this._coordinates}setVideo(e){this._videoState="stop",this.options.url=e,delete this.options.elementId,this._createVideo()}setElementId(e){this._videoState="stop",this.options.elementId=e,delete this.options.url,this._createVideo()}_createVideo(){this._videoState="stop";const e=this.options.url,t=this.options.elementId;let r=document.getElementById(t);if(e&&(r=document.createElement("video"),r.src=e),!r)throw new Error("there is no element or url setting for video mask");r.autoplay=!0,r.loop=!0,r.muted=!0,r.play(),r.addEventListener("playing",(()=>{this._videoState="playing",this.fire("playing",{state:this._videoState,url:e})})),r.addEventListener("pause",(()=>{this._videoState="pause",this.fire("pause",{state:this._videoState,url:e})})),r.addEventListener("error",(()=>{throw this._videoState="pause",this.fire("error",{state:this._videoState,url:e}),new Error("video resource load error")})),this.video=r}getVideo(){return this.video}_setVideoId(e){this._videoId=e}_getVideoId(){return this._videoId}addTo(e){if(this._layer)throw new Error("VideoSurface cannot be added to two or more layers at the same time.");return e.addSurfaces(this),this}show(){return this.options.visible=!0,this}hide(){return this.options.visible=!1,this}isVisible(){return this.options.visible}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}setAudio(e){this.video.muted=e}setOpacity(e){this.options.opacity=e}getOpacity(){return this.options.opacity}remove(){delete this.video;const e=this.getLayer();e&&e.removeVideoSurfaces(this),this.endEdit()}getLayer(){return this._layer}_canDrawing(){return"playing"===this._videoState}startEdit(){const e=this.getLayer();if(!e)return void console.warn("videosurface should be added to a map before edit");const r=e.getMap();if(!r)return void console.warn("videosurface should be added to a map before edit");if(this._clearEditHelper(),!this._editHelpLayer){const i=e.getId();this._editHelpLayer=new t.DrawToolLayer(`internal_${i}_edit`).addTo(r)}const i=this.getCoordinates();this._editHelpPolygon=new t.Polygon(i,{symbol:{lineColor:"#34495e",lineWidth:2,polygonFill:"rgb(135,196,240)",polygonOpacity:.1}}).addTo(this._editHelpLayer),this._editHelpPolygon.startEdit({newVertexHandleSymbol:{polygonFill:"rgba(0, 0, 0, 0)",polygonOpacity:0,markerType:"ellipse",markerWidth:1,markerHeight:1}}),this._editHelpPolygon.on("shapechange",(t=>{const r=t.target.getCoordinates()[0].slice(0,4).map((e=>[e.x,e.y,0]));this.setCoordinates(r);e.getRenderer()._updateCoordinates(this)}),this)}endEdit(){this._editHelpLayer&&(this._editHelpPolygon.endEdit(),this._editHelpPolygon.remove(),this._editHelpLayer.remove()),delete this._editHelpLayer,delete this._editHelpPolygon}_clearEditHelper(){this._editHelpLayer&&this._editHelpLayer.clear(),delete this._editHelpPolygon}}f.mergeOptions({opacity:1,visible:!0});class m extends t.Layer{constructor(e,t,r){!t||Array.isArray(t)||t instanceof f||(r=t,t=null),super(e,r),this._videoSurfaceMap={},this.videoId=0,this._videoSurfaceMap={},this.videoId=0,t&&this.addSurfaces(t)}addSurfaces(e){if(e)if(Array.isArray(e))e.forEach((e=>{this.addSurfaces(e)}));else{e._layer=this,this._videoSurfaceMap[this.videoId]=e,e._setVideoId(this.videoId);const t=this.getRenderer();t?t._getRegl()&&t._createScene(e):this.on("renderercreate",(t=>{t.renderer._getRegl()&&t.renderer._createScene(e)})),this.videoId++}}showTopAlways(e){this.options.showTopAlways=e;const t=this.getRenderer();t&&t._updateShader()}setDoubleSide(e){this.options.doubleSide=e;const t=this.getRenderer();t&&t._updateShader()}getVideoSurfaces(){const e=[];for(const t in this._videoSurfaceMap)e.push(this._videoSurfaceMap[t]);return e}removeVideoSurfaces(e){if(Array.isArray(e))e.forEach((e=>{this.removeVideoSurfaces(e)}));else{const t=e._getVideoId(),r=this.getRenderer();r&&r._deleteScene(t),delete this._videoSurfaceMap[t]}}remove(){this.clear(),super.remove()}clear(){const e=this.getVideoSurfaces();for(let t=0;t<e.length;t++)e[t].remove()}}m.mergeOptions({renderer:"gl",doubleBuffer:!1,glOptions:null,markerEvents:!0,forceRenderOnZooming:!0,forceRenderOnMoving:!0,forceRenderOnRotating:!0,showTopAlways:!0,doubleSide:!0}),m.registerJSONType("VideoLayer"),m.registerRenderer("gl",u),m.registerRenderer("gpu",u),e.VideoLayer=m,e.VideoSurface=f,"undefined"!=typeof console&&console.log("@maptalks/video-layer v0.123.0")})); | ||
| //# sourceMappingURL=maptalks.video.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"maptalks.video.js","sources":["../../../node_modules/.pnpm/frustum-intersects@0.2.4/node_modules/frustum-intersects/src/index.js","../src/VideoLayerRenderer.js","../src/VideoSurface.ts","../src/VideoLayer.ts"],"sourcesContent":["/*!\r\n* Contains code from THREE.js\r\n* MIT License\r\n* https://github.com/mrdoob/three.js\r\n*/\r\n\r\nvar planes = [];\r\nfor (var i = 0; i < 6; i++) {\r\n planes[i] = [];\r\n}\r\n\r\nexport function intersectsSphere(matrix, sphere, mask) {\r\n setPlanes(matrix);\r\n var center = sphere[0];\r\n var negRadius = -sphere[1];\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var distance = distanceToPoint(planes[i], center);\r\n if (distance < negRadius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nvar p = [];\r\n\r\nexport function intersectsBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n // corner at max distance\r\n p[0] = plane[0] > 0 ? box[1][0] : box[0][0];\r\n p[1] = plane[1] > 0 ? box[1][1] : box[0][1];\r\n p[2] = plane[2] > 0 ? box[1][2] : box[0][2];\r\n\r\n if (distanceToPoint(plane, p) < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function intersectsOrientedBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n if (!intersectsPlane(plane, box)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nvar COLUMN0ROW0 = 0 + 3, COLUMN0ROW1 = 1 + 3, COLUMN0ROW2 = 2 + 3, COLUMN1ROW0 = 3 + 3, COLUMN1ROW1 = 4 + 3, COLUMN1ROW2 = 5 + 3, COLUMN2ROW0 = 6 + 3, COLUMN2ROW1 = 7 + 3, COLUMN2ROW2 = 8 + 3;\r\n// const COLUMN0ROW0 = 0, COLUMN0ROW1 = 1, COLUMN0ROW2 = 2, COLUMN1ROW0 = 3, COLUMN1ROW1 = 4, COLUMN1ROW2 = 5, COLUMN2ROW0 = 6, COLUMN2ROW1 = 7, COLUMN2ROW2 = 8;\r\nvar BOX_CENTER = [];\r\nvar HALF_AXES = [];\r\n\r\nfunction intersectsPlane(plane, box) {\r\n var center = box;\r\n var normal = plane;\r\n var halfAxes = box;\r\n var normalX = normal[0], normalY = normal[1], normalZ = normal[2];\r\n // plane is used as if it is its normal; the first three components are assumed to be normalized\r\n var radEffective = Math.abs(normalX * halfAxes[COLUMN0ROW0] + normalY * halfAxes[COLUMN0ROW1] + normalZ * halfAxes[COLUMN0ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN1ROW0] + normalY * halfAxes[COLUMN1ROW1] + normalZ * halfAxes[COLUMN1ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN2ROW0] + normalY * halfAxes[COLUMN2ROW1] + normalZ * halfAxes[COLUMN2ROW2]);\r\n var distanceToPlane = distanceToPoint(plane, center);\r\n\r\n if (distanceToPlane <= -radEffective) {\r\n // The entire box is on the negative side of the plane normal\r\n // return Intersect.OUTSIDE;\r\n return false;\r\n } else if (distanceToPlane >= radEffective) {\r\n // The entire box is on the positive side of the plane normal\r\n // return Intersect.INSIDE;\r\n return true;\r\n }\r\n return true;\r\n // return Intersect.INTERSECTING;\r\n}\r\n\r\nfunction setPlanes(m) {\r\n var me = m;\r\n var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];\r\n var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];\r\n var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];\r\n var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];\r\n\r\n //right\r\n setComponents(planes[0], me3 - me0, me7 - me4, me11 - me8, me15 - me12);\r\n //left\r\n setComponents(planes[1], me3 + me0, me7 + me4, me11 + me8, me15 + me12);\r\n //bottom\r\n setComponents(planes[2], me3 + me1, me7 + me5, me11 + me9, me15 + me13);\r\n //top\r\n setComponents(planes[3], me3 - me1, me7 - me5, me11 - me9, me15 - me13);\r\n //z-far\r\n setComponents(planes[4], me3 - me2, me7 - me6, me11 - me10, me15 - me14);\r\n //z-near\r\n setComponents(planes[5], me3 + me2, me7 + me6, me11 + me10, me15 + me14);\r\n}\r\n\r\nfunction setComponents(out, x, y, z, w) {\r\n // THREE.js Plane.js\r\n var inverseNormalLength = 1 / Math.sqrt(x * x + y * y + z * z);\r\n out[0] = x * inverseNormalLength;\r\n out[1] = y * inverseNormalLength;\r\n out[2] = z * inverseNormalLength;\r\n out[3] = w * inverseNormalLength;\r\n return out;\r\n}\r\n\r\nfunction distanceToPoint(plane, p) {\r\n return plane[0] * p[0] + plane[1] * p[1] + plane[2] * p[2] + plane[3];\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { CanvasCompatible, reshader, mat4, quat } from '@maptalks/gl';\nimport { intersectsBox } from 'frustum-intersects';\nimport vert from './video.vert';\nimport frag from './video.frag';\nimport wgslVert from './video_vert.wgsl';\nimport wgslFrag from './video_frag.wgsl';\n\nconst shaderConfig = {\n name: 'video-layer',\n vert,\n frag,\n wgslVert,\n wgslFrag,\n uniforms : [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (context, props) => {\n return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n }\n },\n 'texture',\n 'opacity'\n ],\n positionAttribute : 'POSITION',\n extraCommandProps: {\n depth: {\n enable: true,\n func: 'always'\n },\n cull: {\n enable: false,\n face: 'back'\n },\n frontFace: 'cw',\n blend: {\n enable: true,\n func: {\n src: 'src alpha',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n }\n }\n};\n\nconst triangles = [1, 0, 3, 3, 2, 1];\nclass VideoLayerRenderer extends CanvasCompatible(maptalks.renderer.LayerAbstractRenderer) {\n constructor(layer) {\n super(layer);\n this._scenes = {};\n }\n\n draw(timestamp, context) {\n this.prepareCanvas();\n this._renderScene(context);\n }\n\n drawOnInteracting(e, timestamp, context) {\n this._renderScene(context);\n }\n\n needToRedraw() {\n return true;\n }\n\n hitDetect() {\n return false;\n }\n\n initContext() {\n super.initContext();\n const { regl, device, reglGL } = this.context;\n\n this.regl = regl || device;\n this.gl = reglGL;\n this.device = regl || device;\n\n this._initShader();\n this._initRenderer();\n const videoSurfaces = this.layer.getVideoSurfaces();\n for (let i = 0; i < videoSurfaces.length; i++) {\n this._createScene(videoSurfaces[i]);\n }\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) {}\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _initRenderer() {\n const map = this.layer.getMap();\n const renderer = new reshader.Renderer(this.regl);\n this.renderer = renderer;\n this._uniforms = {\n 'projMatrix': map.projMatrix,\n 'projViewMatrix' : map.projViewMatrix,\n 'viewMatrix': map.viewMatrix,\n 'halton': [0.2107, -0.0202],\n 'uHalton': [0.2107, -0.0202],\n 'uCameraPosition' : map.cameraPosition,\n 'cameraPosition' : map.cameraPosition,\n 'globalTexSize' : [map.width, map.height]\n };\n }\n\n _getRegl() {\n return this.regl;\n }\n\n _initShader() {\n this.viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this.canvas ? this.canvas.width : 1;\n },\n height : () => {\n return this.canvas ? this.canvas.height : 1;\n }\n };\n this._updateShader();\n }\n\n _updateShader() {\n if (this._shader) {\n this._shader.dispose();\n }\n if (this.layer.options['showTopAlways']) {\n shaderConfig.extraCommandProps.depth.mask = false;\n shaderConfig.extraCommandProps.depth.range = [0, 0];\n } else {\n delete shaderConfig.extraCommandProps.depth.mask;\n delete shaderConfig.extraCommandProps.depth.range;\n }\n shaderConfig.extraCommandProps.cull.enable = this.layer.options['doubleSide'] ? false : true;\n this._shader = new reshader.MeshShader(shaderConfig);\n }\n\n _createScene(videoSurface) {\n const texture = this.device.texture();\n const material = new reshader.Material({\n videoTexture: texture,\n opacity: 1.0\n });\n const coordinates = videoSurface.getCoordinates();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n const mesh = new reshader.Mesh(geometry, material);\n this._updateMatrix(mesh, worldCenter);\n const scene = new reshader.Scene(mesh);\n const videoId = videoSurface._getVideoId();\n this._scenes[videoId] = scene;\n }\n\n _updateCoordinates(videoSurface) {\n const videoId = videoSurface._getVideoId();\n const scene = this._scenes[videoId];\n const mesh = scene.getMeshes()[0];\n const coordinates = videoSurface.getCoordinates();\n mesh.geometry.dispose();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n mesh.geometry = geometry;\n this._updateMatrix(mesh, worldCenter);\n }\n\n _renderScene(context) {\n const visibles = this.layer.getVideoSurfaces().filter(videoSurface => {\n return videoSurface.isVisible();\n });\n if (!visibles.length) {\n return;\n }\n const renderScene = this._createSceneInFrustum(visibles);\n if (!renderScene) {\n return;\n }\n let targetFBO = null;\n if (context) {\n targetFBO = context.renderTarget && context.renderTarget.fbo;\n }\n this.renderer.render(this._shader, this._uniforms, renderScene, targetFBO);\n }\n\n _createGeometry(points) {\n const geometry = new reshader.Geometry({\n POSITION: new Float32Array(points),\n TEXCOORD: new Float32Array([\n 0.0, 0.0,\n 1.0, 0.0,\n 1.0, 1.0,\n 0.0, 1.0\n ])\n },\n new Uint16Array(triangles),\n 0,\n {\n primitive: 'triangles',\n //顶点的属性名称,默认为 aPosition\n positionAttribute: 'POSITION',\n uv0Attribute: 'TEXCOORD',\n normalAttribute: 'NORMAL',\n //顶点个数,默认为3\n positionSize: 3\n });\n geometry.generateBuffers(this.device);\n return geometry;\n }\n\n _transformCoordToWorld(coordinates) {\n let points = [];\n const map = this.getMap();\n const tmpPolygon = new maptalks.Polygon(coordinates);\n const center = tmpPolygon.getCenter();\n const worldCenter = coordinateToWorld(map, center, 0);\n this._worldCenter = worldCenter;\n if (map) {\n coordinates.forEach(coordinate => {\n const coord = new maptalks.Coordinate(coordinate[0], coordinate[1]);\n const altitude = map.altitudeToPoint(coordinate[2] || 0, map.getGLRes());\n const worldPoint = coordinateToWorld(map, coord, altitude);\n worldPoint[0] = worldPoint[0] - worldCenter[0];\n worldPoint[1] = worldPoint[1] - worldCenter[1];\n points = points.concat(worldPoint);\n });\n }\n return { worldCenter, points };\n }\n\n _createSceneInFrustum(videoSurfaces) {\n const visibles = [];\n const map = this.layer.getMap();\n for (let i = 0; i < videoSurfaces.length; i++) {\n const videoSurface = videoSurfaces[i];\n const scene = this._scenes[videoSurface._getVideoId()];\n if (!scene) {\n continue;\n }\n const meshes = scene.getMeshes();\n for (let ii = 0; ii < meshes.length; ii++) {\n const mesh = meshes[ii];\n const material = mesh.getMaterial();\n const texture = material.get('videoTexture');\n if (texture && videoSurface._canDrawing()) {\n if (texture.update) {\n texture.update({ data: videoSurface.video });\n } else {\n texture(videoSurface.video);\n }\n\n material.set('opacity', videoSurface.getOpacity());\n }\n if (intersectsBox(map.projViewMatrix, mesh.getBoundingBox())) {\n visibles.push(mesh);\n }\n }\n }\n return visibles.length ? new reshader.Scene(visibles) : null;\n }\n\n _updateMatrix(mesh, worldCenter) {\n mat4.fromRotationTranslationScale(mesh.localTransform, quat.fromEuler([], 0, 0, 0), worldCenter, [1, 1, 1]);\n }\n\n remove() {\n if (this._shader) {\n this._shader.dispose();\n }\n super.remove();\n }\n\n _deleteScene(videoId) {\n const scene = this._scenes[videoId];\n if (!scene) {\n return;\n }\n const meshes = scene.getMeshes();\n meshes.forEach(mesh => {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n mesh.dispose();\n });\n }\n}\nexport default VideoLayerRenderer;\n\nfunction coordinateToWorld(map, coordinate, z) {\n if (!map) {\n return null;\n }\n const p = map.coordinateToPointAtRes(coordinate, map.getGLRes());\n return [p.x, p.y, z];\n}\n",null,null],"names":["planes","i","p","intersectsBox","matrix","box","mask","me","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","plane","distanceToPoint","out","x","y","z","w","inverseNormalLength","Math","sqrt","shaderConfig","name","vert","frag","wgslVert","wgslFrag","uniforms","type","fn","context","props","mat4","multiply","positionAttribute","extraCommandProps","depth","enable","func","cull","face","frontFace","blend","src","dst","equation","triangles","VideoLayerRenderer","CanvasCompatible","maptalks","renderer","LayerAbstractRenderer","constructor","layer","super","this","_scenes","draw","timestamp","prepareCanvas","_renderScene","drawOnInteracting","e","needToRedraw","hitDetect","initContext","regl","device","reglGL","gl","_initShader","_initRenderer","videoSurfaces","getVideoSurfaces","length","_createScene","_createGLContext","canvas","options","names","getContext","map","getMap","reshader","Renderer","_uniforms","projMatrix","projViewMatrix","viewMatrix","halton","uHalton","uCameraPosition","cameraPosition","globalTexSize","width","height","_getRegl","viewport","_updateShader","_shader","dispose","range","MeshShader","videoSurface","texture","material","Material","videoTexture","opacity","coordinates","getCoordinates","worldCenter","points","_transformCoordToWorld","geometry","_createGeometry","mesh","Mesh","_updateMatrix","scene","Scene","videoId","_getVideoId","_updateCoordinates","getMeshes","visibles","filter","isVisible","renderScene","_createSceneInFrustum","targetFBO","renderTarget","fbo","render","Geometry","POSITION","Float32Array","TEXCOORD","Uint16Array","primitive","uv0Attribute","normalAttribute","positionSize","generateBuffers","center","Polygon","getCenter","coordinateToWorld","_worldCenter","forEach","coordinate","coord","Coordinate","altitude","altitudeToPoint","getGLRes","worldPoint","concat","meshes","ii","getMaterial","get","_canDrawing","update","data","video","set","getOpacity","getBoundingBox","push","fromRotationTranslationScale","localTransform","quat","fromEuler","remove","_deleteScene","coordinateToPointAtRes","VideoSurface","Eventable","Handlerable","Class","setCoordinates","_createVideo","_coordinates","setVideo","url","_videoState","elementId","setElementId","id","document","getElementById","createElement","Error","autoplay","loop","muted","play","addEventListener","fire","state","getVideo","_setVideoId","_videoId","addTo","_layer","addSurfaces","show","visible","hide","pause","setAudio","audio","setOpacity","getLayer","removeVideoSurfaces","endEdit","startEdit","console","warn","_clearEditHelper","_editHelpLayer","layerId","getId","DrawToolLayer","_editHelpPolygon","symbol","lineColor","lineWidth","polygonFill","polygonOpacity","newVertexHandleSymbol","markerType","markerWidth","markerHeight","on","positions","target","slice","getRenderer","clear","mergeOptions","VideoLayer","Layer","Array","isArray","_videoSurfaceMap","showTopAlways","always","setDoubleSide","doubleSide","surfaceList","s","surfaces","doubleBuffer","glOptions","markerEvents","forceRenderOnZooming","forceRenderOnMoving","forceRenderOnRotating","registerJSONType","registerRenderer"],"mappings":"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","x_google_ignoreList":[0]} | ||
| {"version":3,"file":"maptalks.video.js","sources":["../../../node_modules/.pnpm/frustum-intersects@0.2.4/node_modules/frustum-intersects/src/index.js","../src/VideoLayerRenderer.js","../src/VideoSurface.ts","../src/VideoLayer.ts"],"sourcesContent":["/*!\r\n* Contains code from THREE.js\r\n* MIT License\r\n* https://github.com/mrdoob/three.js\r\n*/\r\n\r\nvar planes = [];\r\nfor (var i = 0; i < 6; i++) {\r\n planes[i] = [];\r\n}\r\n\r\nexport function intersectsSphere(matrix, sphere, mask) {\r\n setPlanes(matrix);\r\n var center = sphere[0];\r\n var negRadius = -sphere[1];\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var distance = distanceToPoint(planes[i], center);\r\n if (distance < negRadius) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nvar p = [];\r\n\r\nexport function intersectsBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n // corner at max distance\r\n p[0] = plane[0] > 0 ? box[1][0] : box[0][0];\r\n p[1] = plane[1] > 0 ? box[1][1] : box[0][1];\r\n p[2] = plane[2] > 0 ? box[1][2] : box[0][2];\r\n\r\n if (distanceToPoint(plane, p) < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function intersectsOrientedBox(matrix, box, mask) {\r\n setPlanes(matrix);\r\n for (var i = 0; i < 6; i++) {\r\n if (mask && mask.charAt(i) === '0') {\r\n continue;\r\n }\r\n var plane = planes[i];\r\n if (!intersectsPlane(plane, box)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nvar COLUMN0ROW0 = 0 + 3, COLUMN0ROW1 = 1 + 3, COLUMN0ROW2 = 2 + 3, COLUMN1ROW0 = 3 + 3, COLUMN1ROW1 = 4 + 3, COLUMN1ROW2 = 5 + 3, COLUMN2ROW0 = 6 + 3, COLUMN2ROW1 = 7 + 3, COLUMN2ROW2 = 8 + 3;\r\n// const COLUMN0ROW0 = 0, COLUMN0ROW1 = 1, COLUMN0ROW2 = 2, COLUMN1ROW0 = 3, COLUMN1ROW1 = 4, COLUMN1ROW2 = 5, COLUMN2ROW0 = 6, COLUMN2ROW1 = 7, COLUMN2ROW2 = 8;\r\nvar BOX_CENTER = [];\r\nvar HALF_AXES = [];\r\n\r\nfunction intersectsPlane(plane, box) {\r\n var center = box;\r\n var normal = plane;\r\n var halfAxes = box;\r\n var normalX = normal[0], normalY = normal[1], normalZ = normal[2];\r\n // plane is used as if it is its normal; the first three components are assumed to be normalized\r\n var radEffective = Math.abs(normalX * halfAxes[COLUMN0ROW0] + normalY * halfAxes[COLUMN0ROW1] + normalZ * halfAxes[COLUMN0ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN1ROW0] + normalY * halfAxes[COLUMN1ROW1] + normalZ * halfAxes[COLUMN1ROW2]) +\r\n Math.abs(normalX * halfAxes[COLUMN2ROW0] + normalY * halfAxes[COLUMN2ROW1] + normalZ * halfAxes[COLUMN2ROW2]);\r\n var distanceToPlane = distanceToPoint(plane, center);\r\n\r\n if (distanceToPlane <= -radEffective) {\r\n // The entire box is on the negative side of the plane normal\r\n // return Intersect.OUTSIDE;\r\n return false;\r\n } else if (distanceToPlane >= radEffective) {\r\n // The entire box is on the positive side of the plane normal\r\n // return Intersect.INSIDE;\r\n return true;\r\n }\r\n return true;\r\n // return Intersect.INTERSECTING;\r\n}\r\n\r\nfunction setPlanes(m) {\r\n var me = m;\r\n var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];\r\n var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];\r\n var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];\r\n var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];\r\n\r\n //right\r\n setComponents(planes[0], me3 - me0, me7 - me4, me11 - me8, me15 - me12);\r\n //left\r\n setComponents(planes[1], me3 + me0, me7 + me4, me11 + me8, me15 + me12);\r\n //bottom\r\n setComponents(planes[2], me3 + me1, me7 + me5, me11 + me9, me15 + me13);\r\n //top\r\n setComponents(planes[3], me3 - me1, me7 - me5, me11 - me9, me15 - me13);\r\n //z-far\r\n setComponents(planes[4], me3 - me2, me7 - me6, me11 - me10, me15 - me14);\r\n //z-near\r\n setComponents(planes[5], me3 + me2, me7 + me6, me11 + me10, me15 + me14);\r\n}\r\n\r\nfunction setComponents(out, x, y, z, w) {\r\n // THREE.js Plane.js\r\n var inverseNormalLength = 1 / Math.sqrt(x * x + y * y + z * z);\r\n out[0] = x * inverseNormalLength;\r\n out[1] = y * inverseNormalLength;\r\n out[2] = z * inverseNormalLength;\r\n out[3] = w * inverseNormalLength;\r\n return out;\r\n}\r\n\r\nfunction distanceToPoint(plane, p) {\r\n return plane[0] * p[0] + plane[1] * p[1] + plane[2] * p[2] + plane[3];\r\n}\r\n","import * as maptalks from 'maptalks';\nimport { CanvasCompatible, reshader, mat4, quat, getWGSLSource } from '@maptalks/gl';\nimport { intersectsBox } from 'frustum-intersects';\nimport vert from './video.vert';\nimport frag from './video.frag';\nconst shaderConfig = {\n name: 'video-layer',\n vert,\n frag,\n uniforms : [\n {\n name: 'projViewModelMatrix',\n type: 'function',\n fn: (context, props) => {\n return mat4.multiply([], props['projViewMatrix'], props['modelMatrix']);\n }\n },\n 'texture',\n 'opacity'\n ],\n positionAttribute : 'POSITION',\n extraCommandProps: {\n depth: {\n enable: true,\n func: 'always'\n },\n cull: {\n enable: false,\n face: 'back'\n },\n frontFace: 'cw',\n blend: {\n enable: true,\n func: {\n src: 'src alpha',\n dst: 'one minus src alpha'\n },\n equation: 'add'\n }\n }\n};\n\nconst triangles = [1, 0, 3, 3, 2, 1];\nclass VideoLayerRenderer extends CanvasCompatible(maptalks.renderer.LayerAbstractRenderer) {\n constructor(layer) {\n super(layer);\n this._scenes = {};\n }\n\n draw(timestamp, context) {\n this.prepareCanvas();\n this._renderScene(context);\n }\n\n drawOnInteracting(e, timestamp, context) {\n this._renderScene(context);\n }\n\n needToRedraw() {\n return true;\n }\n\n hitDetect() {\n return false;\n }\n\n initContext() {\n super.initContext();\n const { regl, device, reglGL } = this.context;\n\n this.regl = regl || device;\n this.gl = reglGL;\n this.device = regl || device;\n\n this._initShader();\n this._initRenderer();\n const videoSurfaces = this.layer.getVideoSurfaces();\n for (let i = 0; i < videoSurfaces.length; i++) {\n this._createScene(videoSurfaces[i]);\n }\n }\n\n _createGLContext(canvas, options) {\n const names = ['webgl', 'experimental-webgl'];\n let context = null;\n /* eslint-disable no-empty */\n for (let i = 0; i < names.length; ++i) {\n try {\n context = canvas.getContext(names[i], options);\n } catch (e) {}\n if (context) {\n break;\n }\n }\n return context;\n /* eslint-enable no-empty */\n }\n\n _initRenderer() {\n const map = this.layer.getMap();\n const renderer = new reshader.Renderer(this.regl);\n this.renderer = renderer;\n this._uniforms = {\n 'projMatrix': map.projMatrix,\n 'projViewMatrix' : map.projViewMatrix,\n 'viewMatrix': map.viewMatrix,\n 'halton': [0.2107, -0.0202],\n 'uHalton': [0.2107, -0.0202],\n 'uCameraPosition' : map.cameraPosition,\n 'cameraPosition' : map.cameraPosition,\n 'globalTexSize' : [map.width, map.height]\n };\n }\n\n _getRegl() {\n return this.regl;\n }\n\n _initShader() {\n this.viewport = {\n x : 0,\n y : 0,\n width : () => {\n return this.canvas ? this.canvas.width : 1;\n },\n height : () => {\n return this.canvas ? this.canvas.height : 1;\n }\n };\n this._updateShader();\n }\n\n _updateShader() {\n if (this._shader) {\n this._shader.dispose();\n }\n shaderConfig.wgslVert = getWGSLSource('layer_video_video_vert');\n shaderConfig.wgslFrag = getWGSLSource('layer_video_video_frag');\n if (this.layer.options['showTopAlways']) {\n shaderConfig.extraCommandProps.depth.mask = false;\n shaderConfig.extraCommandProps.depth.range = [0, 0];\n } else {\n delete shaderConfig.extraCommandProps.depth.mask;\n delete shaderConfig.extraCommandProps.depth.range;\n }\n shaderConfig.extraCommandProps.cull.enable = this.layer.options['doubleSide'] ? false : true;\n this._shader = new reshader.MeshShader(shaderConfig);\n }\n\n _createScene(videoSurface) {\n const texture = this.device.texture();\n const material = new reshader.Material({\n videoTexture: texture,\n opacity: 1.0\n });\n const coordinates = videoSurface.getCoordinates();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n const mesh = new reshader.Mesh(geometry, material);\n this._updateMatrix(mesh, worldCenter);\n const scene = new reshader.Scene(mesh);\n const videoId = videoSurface._getVideoId();\n this._scenes[videoId] = scene;\n }\n\n _updateCoordinates(videoSurface) {\n const videoId = videoSurface._getVideoId();\n const scene = this._scenes[videoId];\n const mesh = scene.getMeshes()[0];\n const coordinates = videoSurface.getCoordinates();\n mesh.geometry.dispose();\n const { worldCenter, points } = this._transformCoordToWorld(coordinates);\n const geometry = this._createGeometry(points);\n mesh.geometry = geometry;\n this._updateMatrix(mesh, worldCenter);\n }\n\n _renderScene(context) {\n const visibles = this.layer.getVideoSurfaces().filter(videoSurface => {\n return videoSurface.isVisible();\n });\n if (!visibles.length) {\n return;\n }\n const renderScene = this._createSceneInFrustum(visibles);\n if (!renderScene) {\n return;\n }\n let targetFBO = null;\n if (context) {\n targetFBO = context.renderTarget && context.renderTarget.fbo;\n }\n this.renderer.render(this._shader, this._uniforms, renderScene, targetFBO);\n }\n\n _createGeometry(points) {\n const geometry = new reshader.Geometry({\n POSITION: new Float32Array(points),\n TEXCOORD: new Float32Array([\n 0.0, 0.0,\n 1.0, 0.0,\n 1.0, 1.0,\n 0.0, 1.0\n ])\n },\n new Uint16Array(triangles),\n 0,\n {\n primitive: 'triangles',\n //顶点的属性名称,默认为 aPosition\n positionAttribute: 'POSITION',\n uv0Attribute: 'TEXCOORD',\n normalAttribute: 'NORMAL',\n //顶点个数,默认为3\n positionSize: 3\n });\n geometry.generateBuffers(this.device);\n return geometry;\n }\n\n _transformCoordToWorld(coordinates) {\n let points = [];\n const map = this.getMap();\n const tmpPolygon = new maptalks.Polygon(coordinates);\n const center = tmpPolygon.getCenter();\n const worldCenter = coordinateToWorld(map, center, 0);\n this._worldCenter = worldCenter;\n if (map) {\n coordinates.forEach(coordinate => {\n const coord = new maptalks.Coordinate(coordinate[0], coordinate[1]);\n const altitude = map.altitudeToPoint(coordinate[2] || 0, map.getGLRes());\n const worldPoint = coordinateToWorld(map, coord, altitude);\n worldPoint[0] = worldPoint[0] - worldCenter[0];\n worldPoint[1] = worldPoint[1] - worldCenter[1];\n points = points.concat(worldPoint);\n });\n }\n return { worldCenter, points };\n }\n\n _createSceneInFrustum(videoSurfaces) {\n const visibles = [];\n const map = this.layer.getMap();\n for (let i = 0; i < videoSurfaces.length; i++) {\n const videoSurface = videoSurfaces[i];\n const scene = this._scenes[videoSurface._getVideoId()];\n if (!scene) {\n continue;\n }\n const meshes = scene.getMeshes();\n for (let ii = 0; ii < meshes.length; ii++) {\n const mesh = meshes[ii];\n const material = mesh.getMaterial();\n const texture = material.get('videoTexture');\n if (texture && videoSurface._canDrawing()) {\n if (texture.update) {\n texture.update({ data: videoSurface.video });\n } else {\n texture(videoSurface.video);\n }\n\n material.set('opacity', videoSurface.getOpacity());\n }\n if (intersectsBox(map.projViewMatrix, mesh.getBoundingBox())) {\n visibles.push(mesh);\n }\n }\n }\n return visibles.length ? new reshader.Scene(visibles) : null;\n }\n\n _updateMatrix(mesh, worldCenter) {\n mat4.fromRotationTranslationScale(mesh.localTransform, quat.fromEuler([], 0, 0, 0), worldCenter, [1, 1, 1]);\n }\n\n remove() {\n if (this._shader) {\n this._shader.dispose();\n }\n super.remove();\n }\n\n _deleteScene(videoId) {\n const scene = this._scenes[videoId];\n if (!scene) {\n return;\n }\n const meshes = scene.getMeshes();\n meshes.forEach(mesh => {\n mesh.geometry.dispose();\n if (mesh.material) {\n mesh.material.dispose();\n }\n mesh.dispose();\n });\n }\n}\nexport default VideoLayerRenderer;\n\nfunction coordinateToWorld(map, coordinate, z) {\n if (!map) {\n return null;\n }\n const p = map.coordinateToPointAtRes(coordinate, map.getGLRes());\n return [p.x, p.y, z];\n}\n",null,null],"names":["planes","i","p","intersectsBox","matrix","box","mask","me","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","plane","distanceToPoint","out","x","y","z","w","inverseNormalLength","Math","sqrt","shaderConfig","name","vert","frag","uniforms","type","fn","context","props","mat4","multiply","positionAttribute","extraCommandProps","depth","enable","func","cull","face","frontFace","blend","src","dst","equation","triangles","VideoLayerRenderer","CanvasCompatible","maptalks","renderer","LayerAbstractRenderer","constructor","layer","super","this","_scenes","draw","timestamp","prepareCanvas","_renderScene","drawOnInteracting","e","needToRedraw","hitDetect","initContext","regl","device","reglGL","gl","_initShader","_initRenderer","videoSurfaces","getVideoSurfaces","length","_createScene","_createGLContext","canvas","options","names","getContext","map","getMap","reshader","Renderer","_uniforms","projMatrix","projViewMatrix","viewMatrix","halton","uHalton","uCameraPosition","cameraPosition","globalTexSize","width","height","_getRegl","viewport","_updateShader","_shader","dispose","wgslVert","getWGSLSource","wgslFrag","range","MeshShader","videoSurface","texture","material","Material","videoTexture","opacity","coordinates","getCoordinates","worldCenter","points","_transformCoordToWorld","geometry","_createGeometry","mesh","Mesh","_updateMatrix","scene","Scene","videoId","_getVideoId","_updateCoordinates","getMeshes","visibles","filter","isVisible","renderScene","_createSceneInFrustum","targetFBO","renderTarget","fbo","render","Geometry","POSITION","Float32Array","TEXCOORD","Uint16Array","primitive","uv0Attribute","normalAttribute","positionSize","generateBuffers","center","Polygon","getCenter","coordinateToWorld","_worldCenter","forEach","coordinate","coord","Coordinate","altitude","altitudeToPoint","getGLRes","worldPoint","concat","meshes","ii","getMaterial","get","_canDrawing","update","data","video","set","getOpacity","getBoundingBox","push","fromRotationTranslationScale","localTransform","quat","fromEuler","remove","_deleteScene","coordinateToPointAtRes","VideoSurface","Eventable","Handlerable","Class","setCoordinates","_createVideo","_coordinates","setVideo","url","_videoState","elementId","setElementId","id","document","getElementById","createElement","Error","autoplay","loop","muted","play","addEventListener","fire","state","getVideo","_setVideoId","_videoId","addTo","_layer","addSurfaces","show","visible","hide","pause","setAudio","audio","setOpacity","getLayer","removeVideoSurfaces","endEdit","startEdit","console","warn","_clearEditHelper","_editHelpLayer","layerId","getId","DrawToolLayer","_editHelpPolygon","symbol","lineColor","lineWidth","polygonFill","polygonOpacity","newVertexHandleSymbol","markerType","markerWidth","markerHeight","on","positions","target","slice","getRenderer","clear","mergeOptions","VideoLayer","Layer","Array","isArray","_videoSurfaceMap","showTopAlways","always","setDoubleSide","doubleSide","surfaceList","s","surfaces","doubleBuffer","glOptions","markerEvents","forceRenderOnZooming","forceRenderOnMoving","forceRenderOnRotating","registerJSONType","registerRenderer"],"mappings":"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","x_google_ignoreList":[0]} |
+6
-8
| { | ||
| "name": "@maptalks/video-layer", | ||
| "version": "0.122.0", | ||
| "version": "0.123.0", | ||
| "description": "A maptalks Layer to render video", | ||
@@ -16,3 +16,2 @@ "license": "UNLICENSED", | ||
| "dist/maptalks.video.es.js", | ||
| "dist/maptalks.video.gpu.es.js", | ||
| "dist/maptalks.video.es.js.map" | ||
@@ -38,5 +37,5 @@ ], | ||
| "rollup": "^4.17.2", | ||
| "@maptalks/gl": "0.122.0", | ||
| "@maptalks/gpu": "0.122.0", | ||
| "maptalks": "1.10.0" | ||
| "@maptalks/gl": "0.123.0", | ||
| "@maptalks/gpu": "0.123.0", | ||
| "maptalks": "1.11.0" | ||
| }, | ||
@@ -50,3 +49,3 @@ "dependencies": { | ||
| "dev": "rollup -w -c rollup.config.js", | ||
| "build": "npm run clean && npm run lint && rollup --environment BUILD:production -c rollup.config.js && npm run transform-gpu", | ||
| "build": "npm run clean && npm run lint && rollup --environment BUILD:production -c rollup.config.js", | ||
| "build-dev": "rollup -c rollup.config.js", | ||
@@ -58,5 +57,4 @@ "pretest": "npm run lint && npm run build", | ||
| "version": "npm run build", | ||
| "lint": "eslint src/**/*.js test/**/*.js", | ||
| "transform-gpu": "node ../../build/transform-to-gpu" | ||
| "lint": "eslint src/**/*.js test/**/*.js" | ||
| } | ||
| } |
| /*! | ||
| * @maptalks/video-layer v0.122.0 | ||
| * LICENSE : UNLICENSED | ||
| * (c) 2016-2026 maptalks.org | ||
| */ | ||
| import*as e from"maptalks";import{Eventable as t,Handlerable as r,Class as i,DrawToolLayer as o,Polygon as n,Layer as s}from"maptalks";import{CanvasCompatible as a,reshader as d,mat4 as l,quat as c}from"@maptalks/gpu"; | ||
| /*! | ||
| * Contains code from THREE.js | ||
| * MIT License | ||
| * https://github.com/mrdoob/three.js | ||
| */for(var h=[],u=0;u<6;u++)h[u]=[];var p=[];function g(e,t,r){var i,o,n,s,a,d,l,c,u,g,f,_,y,x,w,S,M;o=(i=e)[0],n=i[1],s=i[2],a=i[3],d=i[4],l=i[5],c=i[6],u=i[7],g=i[8],f=i[9],_=i[10],y=i[11],x=i[12],w=i[13],S=i[14],M=i[15],m(h[0],a-o,u-d,y-g,M-x),m(h[1],a+o,u+d,y+g,M+x),m(h[2],a+n,u+l,y+f,M+w),m(h[3],a-n,u-l,y-f,M-w),m(h[4],a-s,u-c,y-_,M-S),m(h[5],a+s,u+c,y+_,M+S);for(var b=0;b<6;b++){var C=h[b];if(p[0]=C[0]>0?t[1][0]:t[0][0],p[1]=C[1]>0?t[1][1]:t[0][1],p[2]=C[2]>0?t[1][2]:t[0][2],v(C,p)<0)return!1}return!0}function m(e,t,r,i,o){var n=1/Math.sqrt(t*t+r*r+i*i);return e[0]=t*n,e[1]=r*n,e[2]=i*n,e[3]=o*n,e}function v(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]}const f={name:"video-layer",vert:"attribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 projViewModelMatrix;\nuniform mat4 positionMatrix;\nuniform mat4 modelMatrix;\nvarying vec2 vTexCoords;\n#include <get_output>\nvoid main()\n{\n mat4 localPositionMatrix = getPositionMatrix();\n vec4 localPosition = getPosition(aPosition);\n gl_Position = projViewModelMatrix * localPositionMatrix * localPosition;\n vTexCoords = aTexCoord;\n}",frag:"precision mediump float;\nuniform sampler2D videoTexture;\nuniform float opacity;\nvarying vec2 vTexCoords;\nvoid main() {\n vec4 color = texture2D(videoTexture, vTexCoords);\n gl_FragColor = color * opacity;\n}",wgslVert:"#include <get_output>\nstruct Uniforms {\n modelMatrix: mat4x4f,\n positionMatrix: mat4x4f,\n projViewModelMatrix: mat4x4f,\n};\n@group(0) @binding($b) var<uniform> uniforms: Uniforms;\nstruct VertexInput {\n @location($i) aPosition: vec3f,\n @location($i) aTexCoord: vec2f,\n};\nstruct VertexOutput {\n @builtin(position) position: vec4f,\n @location($o) vTexCoords: vec2f,\n};\n@vertex\nfn main(vertexInput: VertexInput) -> VertexOutput {\n var output: VertexOutput;\n let localPositionMatrix: mat4x4f = getPositionMatrix(vertexInput, &output, uniforms.positionMatrix);\n let localPosition: vec4f = getPosition(vec3f(vertexInput.aPosition.xyz), vertexInput);\n output.vTexCoords = vertexInput.aTexCoord;\n output.position = uniforms.projViewModelMatrix * localPositionMatrix * localPosition;\n return output;\n}",wgslFrag:"struct FragUniforms {\n opacity: f32\n}\n@group(0) @binding($b) var videoTexture: texture_2d<f32>;\n@group(0) @binding($b) var videoTextureSampler: sampler;\n@group(0) @binding($b) var<uniform> fragUniforms: FragUniforms;\n@fragment\nfn main(vertexOutput: VertexOutput) -> @location(0) vec4f {\n let color = textureSample(videoTexture, videoTextureSampler, vertexOutput.vTexCoords);\n return color * fragUniforms.opacity;\n}",uniforms:[{name:"projViewModelMatrix",type:"function",fn:(e,t)=>l.multiply([],t.projViewMatrix,t.modelMatrix)},"texture","opacity"],positionAttribute:"POSITION",extraCommandProps:{depth:{enable:!0,func:"always"},cull:{enable:!1,face:"back"},frontFace:"cw",blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"},equation:"add"}}},_=[1,0,3,3,2,1];class y extends(a(e.renderer.LayerAbstractRenderer)){constructor(e){super(e),this._scenes={}}draw(e,t){this.prepareCanvas(),this._renderScene(t)}drawOnInteracting(e,t,r){this._renderScene(r)}needToRedraw(){return!0}hitDetect(){return!1}initContext(){super.initContext();const{regl:e,device:t,reglGL:r}=this.context;this.regl=e||t,this.gl=r,this.device=e||t,this._initShader(),this._initRenderer();const i=this.layer.getVideoSurfaces();for(let e=0;e<i.length;e++)this._createScene(i[e])}_createGLContext(e,t){const r=["webgl","experimental-webgl"];let i=null;for(let o=0;o<r.length;++o){try{i=e.getContext(r[o],t)}catch(e){}if(i)break}return i}_initRenderer(){const e=this.layer.getMap(),t=new d.Renderer(this.regl);this.renderer=t,this._uniforms={projMatrix:e.projMatrix,projViewMatrix:e.projViewMatrix,viewMatrix:e.viewMatrix,halton:[.2107,-.0202],uHalton:[.2107,-.0202],uCameraPosition:e.cameraPosition,cameraPosition:e.cameraPosition,globalTexSize:[e.width,e.height]}}_getRegl(){return this.regl}_initShader(){this.viewport={x:0,y:0,width:()=>this.canvas?this.canvas.width:1,height:()=>this.canvas?this.canvas.height:1},this._updateShader()}_updateShader(){this._shader&&this._shader.dispose(),this.layer.options.showTopAlways?(f.extraCommandProps.depth.mask=!1,f.extraCommandProps.depth.range=[0,0]):(delete f.extraCommandProps.depth.mask,delete f.extraCommandProps.depth.range),f.extraCommandProps.cull.enable=!this.layer.options.doubleSide,this._shader=new d.MeshShader(f)}_createScene(e){const t=this.device.texture(),r=new d.Material({videoTexture:t,opacity:1}),i=e.getCoordinates(),{worldCenter:o,points:n}=this._transformCoordToWorld(i),s=this._createGeometry(n),a=new d.Mesh(s,r);this._updateMatrix(a,o);const l=new d.Scene(a),c=e._getVideoId();this._scenes[c]=l}_updateCoordinates(e){const t=e._getVideoId(),r=this._scenes[t].getMeshes()[0],i=e.getCoordinates();r.geometry.dispose();const{worldCenter:o,points:n}=this._transformCoordToWorld(i),s=this._createGeometry(n);r.geometry=s,this._updateMatrix(r,o)}_renderScene(e){const t=this.layer.getVideoSurfaces().filter((e=>e.isVisible()));if(!t.length)return;const r=this._createSceneInFrustum(t);if(!r)return;let i=null;e&&(i=e.renderTarget&&e.renderTarget.fbo),this.renderer.render(this._shader,this._uniforms,r,i)}_createGeometry(e){const t=new d.Geometry({POSITION:new Float32Array(e),TEXCOORD:new Float32Array([0,0,1,0,1,1,0,1])},new Uint16Array(_),0,{primitive:"triangles",positionAttribute:"POSITION",uv0Attribute:"TEXCOORD",normalAttribute:"NORMAL",positionSize:3});return t.generateBuffers(this.device),t}_transformCoordToWorld(t){let r=[];const i=this.getMap(),o=new e.Polygon(t).getCenter(),n=x(i,o,0);return this._worldCenter=n,i&&t.forEach((t=>{const o=new e.Coordinate(t[0],t[1]),s=i.altitudeToPoint(t[2]||0,i.getGLRes()),a=x(i,o,s);a[0]=a[0]-n[0],a[1]=a[1]-n[1],r=r.concat(a)})),{worldCenter:n,points:r}}_createSceneInFrustum(e){const t=[],r=this.layer.getMap();for(let i=0;i<e.length;i++){const o=e[i],n=this._scenes[o._getVideoId()];if(!n)continue;const s=n.getMeshes();for(let e=0;e<s.length;e++){const i=s[e],n=i.getMaterial(),a=n.get("videoTexture");a&&o._canDrawing()&&(a.update?a.update({data:o.video}):a(o.video),n.set("opacity",o.getOpacity())),g(r.projViewMatrix,i.getBoundingBox())&&t.push(i)}}return t.length?new d.Scene(t):null}_updateMatrix(e,t){l.fromRotationTranslationScale(e.localTransform,c.fromEuler([],0,0,0),t,[1,1,1])}remove(){this._shader&&this._shader.dispose(),super.remove()}_deleteScene(e){const t=this._scenes[e];if(!t)return;t.getMeshes().forEach((e=>{e.geometry.dispose(),e.material&&e.material.dispose(),e.dispose()}))}}function x(e,t,r){if(!e)return null;const i=e.coordinateToPointAtRes(t,e.getGLRes());return[i.x,i.y,r]}class w extends(t(r(i))){constructor(e,t){super(t),this.setCoordinates(e),this._createVideo()}setCoordinates(e){this._coordinates=e}getCoordinates(){return this._coordinates}setVideo(e){this._videoState="stop",this.options.url=e,delete this.options.elementId,this._createVideo()}setElementId(e){this._videoState="stop",this.options.elementId=e,delete this.options.url,this._createVideo()}_createVideo(){this._videoState="stop";const e=this.options.url,t=this.options.elementId;let r=document.getElementById(t);if(e&&(r=document.createElement("video"),r.src=e),!r)throw new Error("there is no element or url setting for video mask");r.autoplay=!0,r.loop=!0,r.muted=!0,r.play(),r.addEventListener("playing",(()=>{this._videoState="playing",this.fire("playing",{state:this._videoState,url:e})})),r.addEventListener("pause",(()=>{this._videoState="pause",this.fire("pause",{state:this._videoState,url:e})})),r.addEventListener("error",(()=>{throw this._videoState="pause",this.fire("error",{state:this._videoState,url:e}),new Error("video resource load error")})),this.video=r}getVideo(){return this.video}_setVideoId(e){this._videoId=e}_getVideoId(){return this._videoId}addTo(e){if(this._layer)throw new Error("VideoSurface cannot be added to two or more layers at the same time.");return e.addSurfaces(this),this}show(){return this.options.visible=!0,this}hide(){return this.options.visible=!1,this}isVisible(){return this.options.visible}play(){this.video&&this.video.play()}pause(){this.video&&this.video.pause()}setAudio(e){this.video.muted=e}setOpacity(e){this.options.opacity=e}getOpacity(){return this.options.opacity}remove(){delete this.video;const e=this.getLayer();e&&e.removeVideoSurfaces(this),this.endEdit()}getLayer(){return this._layer}_canDrawing(){return"playing"===this._videoState}startEdit(){const e=this.getLayer();if(!e)return void console.warn("videosurface should be added to a map before edit");const t=e.getMap();if(!t)return void console.warn("videosurface should be added to a map before edit");if(this._clearEditHelper(),!this._editHelpLayer){const r=e.getId();this._editHelpLayer=new o(`internal_${r}_edit`).addTo(t)}const r=this.getCoordinates();this._editHelpPolygon=new n(r,{symbol:{lineColor:"#34495e",lineWidth:2,polygonFill:"rgb(135,196,240)",polygonOpacity:.1}}).addTo(this._editHelpLayer),this._editHelpPolygon.startEdit({newVertexHandleSymbol:{polygonFill:"rgba(0, 0, 0, 0)",polygonOpacity:0,markerType:"ellipse",markerWidth:1,markerHeight:1}}),this._editHelpPolygon.on("shapechange",(t=>{const r=t.target.getCoordinates()[0].slice(0,4).map((e=>[e.x,e.y,0]));this.setCoordinates(r);e.getRenderer()._updateCoordinates(this)}),this)}endEdit(){this._editHelpLayer&&(this._editHelpPolygon.endEdit(),this._editHelpPolygon.remove(),this._editHelpLayer.remove()),delete this._editHelpLayer,delete this._editHelpPolygon}_clearEditHelper(){this._editHelpLayer&&this._editHelpLayer.clear(),delete this._editHelpPolygon}}w.mergeOptions({opacity:1,visible:!0});class S extends s{constructor(e,t,r){!t||Array.isArray(t)||t instanceof w||(r=t,t=null),super(e,r),this._videoSurfaceMap={},this.videoId=0,this._videoSurfaceMap={},this.videoId=0,t&&this.addSurfaces(t)}addSurfaces(e){if(e)if(Array.isArray(e))e.forEach((e=>{this.addSurfaces(e)}));else{e._layer=this,this._videoSurfaceMap[this.videoId]=e,e._setVideoId(this.videoId);const t=this.getRenderer();t?t._getRegl()&&t._createScene(e):this.on("renderercreate",(t=>{t.renderer._getRegl()&&t.renderer._createScene(e)})),this.videoId++}}showTopAlways(e){this.options.showTopAlways=e;const t=this.getRenderer();t&&t._updateShader()}setDoubleSide(e){this.options.doubleSide=e;const t=this.getRenderer();t&&t._updateShader()}getVideoSurfaces(){const e=[];for(const t in this._videoSurfaceMap)e.push(this._videoSurfaceMap[t]);return e}removeVideoSurfaces(e){if(Array.isArray(e))e.forEach((e=>{this.removeVideoSurfaces(e)}));else{const t=e._getVideoId(),r=this.getRenderer();r&&r._deleteScene(t),delete this._videoSurfaceMap[t]}}remove(){this.clear(),super.remove()}clear(){const e=this.getVideoSurfaces();for(let t=0;t<e.length;t++)e[t].remove()}}S.mergeOptions({renderer:"gl",doubleBuffer:!1,glOptions:null,markerEvents:!0,forceRenderOnZooming:!0,forceRenderOnMoving:!0,forceRenderOnRotating:!0,showTopAlways:!0,doubleSide:!0}),S.registerJSONType("VideoLayer"),S.registerRenderer("gl",y),S.registerRenderer("gpu",y);export{S as VideoLayer,w as VideoSurface};"undefined"!=typeof console&&console.log("@maptalks/video-layer v0.122.0"); | ||
| //# sourceMappingURL=maptalks.video.es.js.map |
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
4
-20%82062
-14.6%7
-12.5%102
-38.18%