cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
2 lines (1 loc) • 15.7 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e=require("./core/Base.js"),t=require("./core/GLInfo.js"),r=require("./core/glenum.js"),i=require("./core/vendor.js"),a=require("./Material.js"),n=require("./math/Vector2.js"),s=require("./gpu/ProgramManager.js"),o=require("./Shader.js"),l=require("./shader/source/prez.glsl.js"),u=require("./glmatrix/mat4.js"),f=require("./glmatrix/vec3.js");o.default.import(l.default);var h=u.default.create,d={};function _(e){return e.material}function c(e,t,r){return t.uniforms[r].value}function g(e,t,r,i){return r!==i}function E(e){return!0}function p(){}var m={float:r.default.FLOAT,byte:r.default.BYTE,ubyte:r.default.UNSIGNED_BYTE,short:r.default.SHORT,ushort:r.default.UNSIGNED_SHORT};function R(e,t,r){this.availableAttributes=e,this.availableAttributeSymbols=t,this.indicesBuffer=r,this.vao=null}function v(e){var t,r;this.bind=function(e){t||((t=i.default.createCanvas()).width=t.height=1,t.getContext("2d"));var a=e.gl,n=!r;n&&(r=a.createTexture()),a.bindTexture(a.TEXTURE_2D,r),n&&a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,t)},this.unbind=function(e){e.gl.bindTexture(e.gl.TEXTURE_2D,null)},this.isRenderable=function(){return!0}}var S=e.default.extend((function(){return{canvas:null,_width:100,_height:100,devicePixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,clearColor:[0,0,0,0],clearBit:17664,alpha:!0,depth:!0,stencil:!1,antialias:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,throwError:!0,gl:null,viewport:{},maxJointNumber:20,__currentFrameBuffer:null,_viewportStack:[],_clearStack:[],_sceneRendering:null}}),(function(){this.canvas||(this.canvas=i.default.createCanvas());var e=this.canvas;try{var r={alpha:this.alpha,depth:this.depth,stencil:this.stencil,antialias:this.antialias,premultipliedAlpha:this.premultipliedAlpha,preserveDrawingBuffer:this.preserveDrawingBuffer};if(this.gl=e.getContext("webgl",r)||e.getContext("experimental-webgl",r),!this.gl)throw new Error;this._glinfo=new t.default(this.gl),this.gl.targetRenderer,this.gl.targetRenderer=this,this.resize()}catch(a){throw"Error creating WebGL Context "+a}this._programMgr=new s.default(this),this._placeholderTexture=new v}),{resize:function(e,t){var r=this.canvas,i=this.devicePixelRatio;null!=e?(r.style&&(r.style.width=e+"px",r.style.height=t+"px"),r.width=e*i,r.height=t*i,this._width=e,this._height=t):(this._width=r.width/i,this._height=r.height/i),this.setViewport(0,0,this._width,this._height)},getWidth:function(){return this._width},getHeight:function(){return this._height},getViewportAspect:function(){var e=this.viewport;return e.width/e.height},setDevicePixelRatio:function(e){this.devicePixelRatio=e,this.resize(this._width,this._height)},getDevicePixelRatio:function(){return this.devicePixelRatio},getGLExtension:function(e){return this._glinfo.getExtension(e)},getGLParameter:function(e){return this._glinfo.getParameter(e)},setViewport:function(e,t,r,i,a){if("object"==typeof e){var n=e;e=n.x,t=n.y,r=n.width,i=n.height,a=n.devicePixelRatio}a=a||this.devicePixelRatio,this.gl.viewport(e*a,t*a,r*a,i*a),this.viewport={x:e,y:t,width:r,height:i,devicePixelRatio:a}},saveViewport:function(){this._viewportStack.push(this.viewport)},restoreViewport:function(){this._viewportStack.length>0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var e=this._clearStack.pop();this.clearColor=e.clearColor,this.clearBit=e.clearBit}},bindSceneRendering:function(e){this._sceneRendering=e},render:function(e,t,r,i){var a=this.gl,n=this.clearColor;if(this.clearBit){a.colorMask(!0,!0,!0,!0),a.depthMask(!0);var s=this.viewport,o=!1,l=s.devicePixelRatio;(s.width!==this._width||s.height!==this._height||l&&l!==this.devicePixelRatio||s.x||s.y)&&(o=!0,a.enable(a.SCISSOR_TEST),a.scissor(s.x*l,s.y*l,s.width*l,s.height*l)),a.clearColor(n[0],n[1],n[2],n[3]),a.clear(this.clearBit),o&&a.disable(a.SCISSOR_TEST)}if(r||e.update(!1),e.updateLights(),t=t||e.getMainCamera()){t.update();var d=e.updateRenderList(t,!0);this._sceneRendering=e;var _=d.opaque,c=d.transparent,g=e.material;e.trigger("beforerender",this,e,t,d),i?(this.renderPreZ(_,e,t),a.depthFunc(a.LEQUAL)):a.depthFunc(a.LESS);for(var E=h(),p=f.default.create(),m=0;m<c.length;m++){var R=c[m];u.default.multiplyAffine(E,t.viewMatrix.array,R.worldTransform.array),f.default.transformMat4(p,R.position.array,E),R.__depth=p[2]}this.renderPass(_,t,{getMaterial:function(e){return g||e.material},sortCompare:this.opaqueSortCompare}),this.renderPass(c,t,{getMaterial:function(e){return g||e.material},sortCompare:this.transparentSortCompare}),e.trigger("afterrender",this,e,t,d),this._sceneRendering=null}},getProgram:function(e,t,r){return t=t||e.material,this._programMgr.getProgram(e,t,r)},validateProgram:function(e){if(e.__error){var t=e.__error;if(d[e.__uid__])return;if(d[e.__uid__]=!0,this.throwError)throw new Error(t);this.trigger("error",t)}},updatePrograms:function(e,t,r){var i=r&&r.getMaterial||_;t=t||null;for(var a=0;a<e.length;a++){var n=e[a],s=i.call(this,n);if(a>0){var o=e[a-1],l=o.joints?o.joints.length:0;if((n.joints?n.joints.length:0)===l&&n.material===o.material&&n.lightGroup===o.lightGroup){n.__program=o.__program;continue}}var u=this._programMgr.getProgram(n,s,t);this.validateProgram(u),n.__program=u}},renderPass:function(e,t,r){this.trigger("beforerenderpass",this,e,t,r),(r=r||{}).getMaterial=r.getMaterial||_,r.getUniform=r.getUniform||c,r.isMaterialChanged=r.isMaterialChanged||g,r.beforeRender=r.beforeRender||p,r.afterRender=r.afterRender||p;var i=r.ifRender||E;this.updatePrograms(e,this._sceneRendering,r),r.sortCompare&&e.sort(r.sortCompare);var a=this.viewport,n=a.devicePixelRatio,s=[a.x*n,a.y*n,a.width*n,a.height*n],o=this.devicePixelRatio,l=this.__currentFrameBuffer?[this.__currentFrameBuffer.getTextureWidth(),this.__currentFrameBuffer.getTextureHeight()]:[this._width*o,this._height*o],f=[s[2],s[3]],h=Date.now();t?(u.default.copy(O.VIEW,t.viewMatrix.array),u.default.copy(O.PROJECTION,t.projectionMatrix.array),u.default.copy(O.VIEWINVERSE,t.worldTransform.array)):(u.default.identity(O.VIEW),u.default.identity(O.PROJECTION),u.default.identity(O.VIEWINVERSE)),u.default.multiply(O.VIEWPROJECTION,O.PROJECTION,O.VIEW),u.default.invert(O.PROJECTIONINVERSE,O.PROJECTION),u.default.invert(O.VIEWPROJECTIONINVERSE,O.VIEWPROJECTION);for(var d,m,R,v,S,I,T,N,C,x,P,b,A=this.gl,V=this._sceneRendering,y=null,w=0;w<e.length;w++){var W,L=e[w],M=null!=L.worldTransform;if(i(L)){M&&(W=L.isSkinnedMesh&&L.isSkinnedMesh()?L.offsetMatrix?L.offsetMatrix.array:O.IDENTITY:L.worldTransform.array);var D=L.geometry,U=r.getMaterial.call(this,L),B=L.__program,F=U.shader,k=D.__uid__+"-"+B.__uid__,J=k!==x;x=k,M&&(u.default.copy(O.WORLD,W),u.default.multiply(O.WORLDVIEWPROJECTION,O.VIEWPROJECTION,W),u.default.multiplyAffine(O.WORLDVIEW,O.VIEW,W),(F.matrixSemantics.WORLDINVERSE||F.matrixSemantics.WORLDINVERSETRANSPOSE)&&u.default.invert(O.WORLDINVERSE,W),(F.matrixSemantics.WORLDVIEWINVERSE||F.matrixSemantics.WORLDVIEWINVERSETRANSPOSE)&&u.default.invert(O.WORLDVIEWINVERSE,O.WORLDVIEW),(F.matrixSemantics.WORLDVIEWPROJECTIONINVERSE||F.matrixSemantics.WORLDVIEWPROJECTIONINVERSETRANSPOSE)&&u.default.invert(O.WORLDVIEWPROJECTIONINVERSE,O.WORLDVIEWPROJECTION)),L.beforeRender&&L.beforeRender(this),r.beforeRender.call(this,L,U,d);var j=B!==m;j?(B.bind(this),B.setUniformOfSemantic(A,"VIEWPORT",s),B.setUniformOfSemantic(A,"WINDOW_SIZE",l),t&&(B.setUniformOfSemantic(A,"NEAR",t.near),B.setUniformOfSemantic(A,"FAR",t.far)),B.setUniformOfSemantic(A,"DEVICEPIXELRATIO",n),B.setUniformOfSemantic(A,"TIME",h),B.setUniformOfSemantic(A,"VIEWPORT_SIZE",f),V&&V.setLightUniforms(B,L.lightGroup,this)):B=m,(j||r.isMaterialChanged(L,R,U,d))&&(U.depthTest!==v&&(U.depthTest?A.enable(A.DEPTH_TEST):A.disable(A.DEPTH_TEST),v=U.depthTest),U.depthMask!==S&&(A.depthMask(U.depthMask),S=U.depthMask),U.transparent!==C&&(U.transparent?A.enable(A.BLEND):A.disable(A.BLEND),C=U.transparent),U.transparent&&(U.blend?U.blend(A):(A.blendEquationSeparate(A.FUNC_ADD,A.FUNC_ADD),A.blendFuncSeparate(A.SRC_ALPHA,A.ONE_MINUS_SRC_ALPHA,A.ONE,A.ONE_MINUS_SRC_ALPHA))),b=this._bindMaterial(L,U,B,R||null,d||null,m||null,r.getUniform),d=U);var G=F.matrixSemanticKeys;if(M)for(var q=0;q<G.length;q++){var H=G[q],z=F.matrixSemantics[H],Y=O[H];if(z.isTranspose){var X=O[z.semanticNoTranspose];u.default.transpose(Y,X)}B.setUniform(A,z.type,z.symbol,Y)}L.cullFace!==T&&(T=L.cullFace,A.cullFace(T)),L.frontFace!==N&&(N=L.frontFace,A.frontFace(N)),L.culling!==I&&((I=L.culling)?A.enable(A.CULL_FACE):A.disable(A.CULL_FACE)),this._updateSkeleton(L,B,b),J&&(P=this._bindVAO(y,F,D,B)),this._renderObject(L,P,B),r.afterRender(this,L),L.afterRender&&L.afterRender(this),m=B,R=L}}this.trigger("afterrenderpass",this,e,t,r)},getMaxJointNumber:function(){return this.maxJointNumber},_updateSkeleton:function(e,t,r){var i=this.gl,a=e.skeleton;if(a)if(a.update(),e.joints.length>this.getMaxJointNumber()){var n=a.getSubSkinMatricesTexture(e.__uid__,e.joints);t.useTextureSlot(this,n,r),t.setUniform(i,"1i","skinMatricesTexture",r),t.setUniform(i,"1f","skinMatricesTextureSize",n.width)}else{var s=a.getSubSkinMatrices(e.__uid__,e.joints);t.setUniformOfSemantic(i,"SKIN_MATRIX",s)}},_renderObject:function(e,t,r){var i=this.gl,a=e.geometry,n=e.mode;null==n&&(n=4);var s=null,o=e.isInstancedMesh&&e.isInstancedMesh();if(!o||(s=this.getGLExtension("ANGLE_instanced_arrays"))){var l;if(o&&(l=this._bindInstancedAttributes(e,r,s)),t.indicesBuffer){var u=this.getGLExtension("OES_element_index_uint")&&a.indices instanceof Uint32Array?i.UNSIGNED_INT:i.UNSIGNED_SHORT;o?s.drawElementsInstancedANGLE(n,t.indicesBuffer.count,u,0,e.getInstanceCount()):i.drawElements(n,t.indicesBuffer.count,u,0)}else o?s.drawArraysInstancedANGLE(n,0,a.vertexCount,e.getInstanceCount()):i.drawArrays(n,0,a.vertexCount);if(o)for(var f=0;f<l.length;f++)i.disableVertexAttribArray(l[f])}},_bindInstancedAttributes:function(e,t,r){for(var i=this.gl,a=e.getInstancedAttributesBuffers(this),n=[],s=0;s<a.length;s++){var o=a[s],l=t.getAttribLocation(i,o.symbol);if(!(l<0)){var u=m[o.type]||i.FLOAT;i.enableVertexAttribArray(l),i.bindBuffer(i.ARRAY_BUFFER,o.buffer),i.vertexAttribPointer(l,o.size,u,!1,0,0),r.vertexAttribDivisorANGLE(l,o.divisor),n.push(l)}}return n},_bindMaterial:function(e,t,r,i,a,n,s){for(var o=this.gl,l=n===r,u=r.currentTextureSlot(),f=t.getEnabledUniforms(),h=t.getTextureUniforms(),d=this._placeholderTexture,_=0;_<h.length;_++){var c=s(e,t,p=h[_]);if("t"===(E=t.uniforms[p].type)&&c)c.__slot=-1;else if("tv"===E)for(var g=0;g<c.length;g++)c[g]&&(c[g].__slot=-1)}d.__slot=-1;for(_=0;_<f.length;_++){var E,p=f[_],m=t.uniforms[p],R=(c=s(e,t,p),"t"===(E=m.type));if(R&&(c&&c.isRenderable()||(c=d)),a&&l){var v=s(i,a,p);if(R&&(v&&v.isRenderable()||(v=d)),v===c){if(R)r.takeCurrentTextureSlot(this,null);else if("tv"===E&&c)for(g=0;g<c.length;g++)r.takeCurrentTextureSlot(this,null);continue}}if(null!=c)if(R)if(c.__slot<0){var S=r.currentTextureSlot();r.setUniform(o,"1i",p,S)&&(r.takeCurrentTextureSlot(this,c),c.__slot=S)}else r.setUniform(o,"1i",p,c.__slot);else if(Array.isArray(c)){if(0===c.length)continue;if("tv"===E){if(!r.hasUniform(p))continue;var O=[];for(g=0;g<c.length;g++){var I=c[g];if(I.__slot<0){S=r.currentTextureSlot();O.push(S),r.takeCurrentTextureSlot(this,I),I.__slot=S}else O.push(I.__slot)}r.setUniform(o,"1iv",p,O)}else r.setUniform(o,m.type,p,c)}else r.setUniform(o,m.type,p,c)}var T=r.currentTextureSlot();return r.resetTextureSlot(u),T},_bindVAO:function(e,t,r,i){var a=!r.dynamic,n=this.gl,s=this.__uid__+"-"+i.__uid__,o=r.__vaoCache[s];if(!o){var l=r.getBufferChunks(this);if(!l||!l.length)return;for(var u=l[0],f=u.attributeBuffers,h=u.indicesBuffer,d=[],_=[],c=0;c<f.length;c++){var g,E=(T=f[c]).name,p=T.semantic;if(p){var v=t.attributeSemantics[p];g=v&&v.symbol}else g=E;g&&i.attributes[g]&&(d.push(T),_.push(g))}o=new R(d,_,h),a&&(r.__vaoCache[s]=o)}var S=!0;e&&a&&(null==o.vao?o.vao=e.createVertexArrayOES():S=!1,e.bindVertexArrayOES(o.vao));d=o.availableAttributes,h=o.indicesBuffer;if(S){var O=i.enableAttributes(this,o.availableAttributeSymbols,e&&a&&o);for(c=0;c<d.length;c++){var I=O[c];if(-1!==I){var T,N=(T=d[c]).buffer,C=T.size,x=m[T.type]||n.FLOAT;n.bindBuffer(n.ARRAY_BUFFER,N),n.vertexAttribPointer(I,C,x,!1,0,0)}}r.isUseIndices()&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,h.buffer)}return o},renderPreZ:function(e,t,r){var i=this.gl,n=this._prezMaterial||new a.default({shader:new o.default(o.default.source("clay.prez.vertex"),o.default.source("clay.prez.fragment"))});this._prezMaterial=n,i.colorMask(!1,!1,!1,!1),i.depthMask(!0),this.renderPass(e,r,{ifRender:function(e){return!e.ignorePreZ},isMaterialChanged:function(e,t){var r=e.material,i=t.material;return r.get("diffuseMap")!==i.get("diffuseMap")||(r.get("alphaCutoff")||0)!==(i.get("alphaCutoff")||0)},getUniform:function(e,t,r){return"alphaMap"===r?e.material.get("diffuseMap"):"alphaCutoff"===r?e.material.isDefined("fragment","ALPHA_TEST")&&e.material.get("diffuseMap")&&e.material.get("alphaCutoff")||0:"uvRepeat"===r?e.material.get("uvRepeat"):"uvOffset"===r?e.material.get("uvOffset"):t.get(r)},getMaterial:function(){return n},sort:this.opaqueSortCompare}),i.colorMask(!0,!0,!0,!0),i.depthMask(!0)},disposeScene:function(e){this.disposeNode(e,!0,!0),e.dispose()},disposeNode:function(e,t,r){e.getParent()&&e.getParent().remove(e);var i={};e.traverse((function(e){var a=e.material;if(e.geometry&&t&&e.geometry.dispose(this),r&&a&&!i[a.__uid__]){for(var n=a.getTextureUniforms(),s=0;s<n.length;s++){var o=n[s],l=a.uniforms[o].value,u=a.uniforms[o].type;if(l)if("t"===u)l.dispose&&l.dispose(this);else if("tv"===u)for(var f=0;f<l.length;f++)l[f]&&l[f].dispose&&l[f].dispose(this)}i[a.__uid__]=!0}e.dispose&&e.dispose(this)}),this)},disposeGeometry:function(e){e.dispose(this)},disposeTexture:function(e){e.dispose(this)},disposeFrameBuffer:function(e){e.dispose(this)},dispose:function(){},screenToNDC:function(e,t,r){r||(r=new n.default),t=this._height-t;var i=this.viewport,a=r.array;return a[0]=(e-i.x)/i.width,a[0]=2*a[0]-1,a[1]=(t-i.y)/i.height,a[1]=2*a[1]-1,r}});S.opaqueSortCompare=S.prototype.opaqueSortCompare=function(e,t){return e.renderOrder===t.renderOrder?e.__program===t.__program?e.material===t.material?e.geometry.__uid__-t.geometry.__uid__:e.material.__uid__-t.material.__uid__:e.__program&&t.__program?e.__program.__uid__-t.__program.__uid__:0:e.renderOrder-t.renderOrder},S.transparentSortCompare=S.prototype.transparentSortCompare=function(e,t){return e.renderOrder===t.renderOrder?e.__depth===t.__depth?e.__program===t.__program?e.material===t.material?e.geometry.__uid__-t.geometry.__uid__:e.material.__uid__-t.material.__uid__:e.__program&&t.__program?e.__program.__uid__-t.__program.__uid__:0:e.__depth-t.__depth:e.renderOrder-t.renderOrder};var O={IDENTITY:h(),WORLD:h(),VIEW:h(),PROJECTION:h(),WORLDVIEW:h(),VIEWPROJECTION:h(),WORLDVIEWPROJECTION:h(),WORLDINVERSE:h(),VIEWINVERSE:h(),PROJECTIONINVERSE:h(),WORLDVIEWINVERSE:h(),VIEWPROJECTIONINVERSE:h(),WORLDVIEWPROJECTIONINVERSE:h(),WORLDTRANSPOSE:h(),VIEWTRANSPOSE:h(),PROJECTIONTRANSPOSE:h(),WORLDVIEWTRANSPOSE:h(),VIEWPROJECTIONTRANSPOSE:h(),WORLDVIEWPROJECTIONTRANSPOSE:h(),WORLDINVERSETRANSPOSE:h(),VIEWINVERSETRANSPOSE:h(),PROJECTIONINVERSETRANSPOSE:h(),WORLDVIEWINVERSETRANSPOSE:h(),VIEWPROJECTIONINVERSETRANSPOSE:h(),WORLDVIEWPROJECTIONINVERSETRANSPOSE:h()};S.COLOR_BUFFER_BIT=r.default.COLOR_BUFFER_BIT,S.DEPTH_BUFFER_BIT=r.default.DEPTH_BUFFER_BIT,S.STENCIL_BUFFER_BIT=r.default.STENCIL_BUFFER_BIT;var I=S;exports.default=I;